COMMON := ../common
include $(COMMON)/Makefile

override CFLAGS +=-Icommon

SUBDIRS = alg_SST alg_TBM alg_BSP

SSTTEST = SST7 SST15
TBMTEST = TBM4 TBM5
BSPTEST = BSPH BSPNH

CLEANDIRS = $(SUBDIRS:%=clean-%)
    
VPATH=data 
.PHONY: subdirs $(SUBDIRS) $(CLEANDIRS)


STATIC = SST7_bgptable_1009_1 SST7_bgptable_1009_2 SST7_bgptable_1009_3 SST7_bgptable_1009_4 \
SST7_bgptable_10084_1 SST7_bgptable_10084_2 SST7_bgptable_10084_3 SST7_bgptable_10084_4 \
SST15_bgptable_1009_1 SST15_bgptable_1009_2 SST15_bgptable_1009_3 SST15_bgptable_1009_4 \
SST15_bgptable_10084_1 SST15_bgptable_10084_2 SST15_bgptable_10084_3 SST15_bgptable_10084_4 \
TBM4_bgptable_1009_1 TBM4_bgptable_1009_2 TBM4_bgptable_1009_3 TBM4_bgptable_1009_4 \
TBM4_bgptable_10084_1 TBM4_bgptable_10084_2 TBM4_bgptable_10084_3 TBM4_bgptable_10084_4 \
TBM5_bgptable_1009_1 TBM5_bgptable_1009_2 TBM5_bgptable_1009_3 TBM5_bgptable_1009_4 \
TBM5_bgptable_10084_1 TBM5_bgptable_10084_2 TBM5_bgptable_10084_3 TBM5_bgptable_10084_4 \
BSPH_bgptable_1009_1 BSPH_bgptable_1009_2 BSPH_bgptable_1009_3 BSPH_bgptable_1009_4 \
BSPH_bgptable_10084_1 BSPH_bgptable_10084_2 BSPH_bgptable_10084_3 BSPH_bgptable_10084_4 \
BSPNH_bgptable_1009_1 BSPNH_bgptable_1009_2 BSPNH_bgptable_1009_3 BSPNH_bgptable_1009_4 \
BSPNH_bgptable_10084_1 BSPNH_bgptable_10084_2 BSPNH_bgptable_10084_3 BSPNH_bgptable_10084_4


STATICC = $(STATIC:%=%.c)

NAME=$(subst _, , $(@:%.c=%))

all: $(SSTTEST) $(TBMTEST) $(BSPTEST)

subdirs: $(SUBDIRS)

$(SUBDIRS):
	$(MAKE) -C $@ CFLAGS="$(CFLAGS)"

static: $(STATIC)
static-data: $(STATICC)

$(SSTTEST): alg_SST test.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_SST/SST.c -DK=$(subst SST,,$@) -DALG_SST test.c -o $@

$(TBMTEST): alg_TBM test.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_TBM/TBM.c -Dstride=$(subst TBM,,$@) -DALG_TBM test.c -o $@

$(BSPTEST): alg_BSP test.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_BSP/BSP.c alg_BSP/htable.c alg_BSP/hash_function.c -D$(subst BSP,,$@) -DALG_BSP test.c -o $@


SST%: SST%.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_SST/SST.c data/$@.c -DSTATIC_DATA -DK=$(subst SST,,$(firstword $(NAME))) -DALG_SST test.c  -o static/$@

TBM%: TBM%.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_TBM/TBM.c data/$@.c -DSTATIC_DATA -Dstride=$(firstword $(subst _, ,$(subst TBM,,$@))) -DALG_TBM test.c -o static/$@

BSP%: BSP%.c
	$(CC) $(CFLAGS) $(PLATFORM) alg_BSP/BSP.c alg_BSP/htable.c alg_BSP/hash_function.c -DSTATIC_DATA -D$(subst BSP,,$@) -DALG_BSP test.c -o $@


$(STATICC):
	$(B2H) data/bgptable_$(word 3,$(NAME))_$(word 4,$(NAME)).bin data/$(firstword $(NAME))_bgptable_$(word 3,$(NAME)).dat > data/$@_
	mv data/$@_ data/$@


clean: $(CLEANDIRS)
	rm $(SSTTEST) $(TBMTEST) $(BSPTEST) -f
	rm data/*.c -f
	rm static/* -f

$(CLEANDIRS): 
	$(MAKE) -C $(@:clean-%=%) clean
