# directory with files common for whole toolset
COMMON := ../common
include $(COMMON)/Makefile

override CFLAGS += -Icommon

# subdirectories to be built
SUBDIRS = alg_bloom alg_cbf4 common
CLEANDIRS = $(SUBDIRS:%=clean-%)

# static compilation targets
STATIC_BLOOM = bloom_1 bloom_2 bloom_3 bloom_4
STATIC_CBF4 = cbf4_1 cbf4_2 cbf4_3 cbf4_4
# names of targets to be generated for static compilation
# prepending "data/", appending ".c"
STATIC_BLOOM_C := $(addprefix data/,$(addsuffix .c,$(STATIC_BLOOM)))
STATIC_CBF4_C := $(addprefix data/,$(addsuffix .c,$(STATIC_CBF4)))

####################################################
# common compilation

all: bloom-test cbf4-test

bloom-test: common alg_bloom test.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		-DALG_BLOOM \
		common/jenkins.o \
	   	alg_bloom/bloom.o \
		test.c $(PLATFORM) \
		-o $@

cbf4-test: common alg_cbf4 test.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		-DALG_CBF4 \
		common/jenkins.o \
		alg_cbf4/cbf4.o \
		test.c $(PLATFORM) \
		-o $@

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

####################################################
# cleaning

clean: $(CLEANDIRS)
	rm cbf4-test bloom-test -f
	rm data/*.c -f
	rm static/* -f

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

####################################################
# static compilation

# main target
static: $(SUBDIRS) $(STATIC_BLOOM) $(STATIC_CBF4)

# create *.c from binary data files only
static-data: $(STATIC_BLOOM_C) $(STATIC_CBF4_C)

# prepare binary data files as c source codes in data/ directory
$(STATIC_BLOOM_C):
	$(B2H) \
		$(basename $(subst _,.config_,$@))  \
		$(basename $(subst _,.items_,$@))   \
		$(basename $(subst _,.queries_,$@)) \
		> $@_
	mv $@_ $@

$(STATIC_CBF4_C):
	$(B2H) \
		$(basename $(subst _,.config_,$@))  \
		$(basename $(subst _,.items_,$@))   \
		$(basename $(subst _,.queries_,$@)) \
		$(basename $(subst _,.remove_,$@))  \
		> $@_
	mv $@_ $@

# enable second expansion of $$@ (needed for prerequisities list)
.SECONDEXPANSION:

$(STATIC_BLOOM): data/$$@.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		 -DALG_BLOOM -DSTATIC_DATA \
		 common/jenkins.o data/$@.c alg_bloom/bloom.o \
		 test.c  $(PLATFORM) \
		 -o static/$@

$(STATIC_CBF4): data/$$@.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		 -DALG_CBF4 -DSTATIC_DATA \
		 common/jenkins.o data/$@.c alg_cbf4/cbf4.o \
		 test.c  $(PLATFORM) \
		 -o static/$@

####################################################
.PHONY: $(SUBDIRS) $(CLEANDIRS)
