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

override CFLAGS += -Icommon

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

# static compilation targets
STATIC_DDFA = ddfa_1 ddfa_2 ddfa_3 
STATIC_HFA = hfa_1 hfa_2 hfa_3
# names of targets to be generated for static compilation
# prepending "data/", appending ".c"
STATIC_DDFA_C := $(addprefix data/,$(addsuffix .c,$(STATIC_DDFA)))
STATIC_HFA_C := $(addprefix data/,$(addsuffix .c,$(STATIC_HFA)))

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

all: ddfa-test hfa-test

ddfa-test: common alg_ddfa test.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		-DALG_DDFA \
		common/match.o \
		alg_ddfa/ddfa.o \
		test.c $(PLATFORM) \
		-o $@

hfa-test: common alg_hybridfa test.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		-DALG_DDFA \
		common/match.o \
		alg_hybridfa/hybridfa.o \
		test.c $(PLATFORM) \
		-o $@

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

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

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

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

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

# main target
static: $(SUBDIRS) $(STATIC_DDFA)

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

# prepare binary data files as c source codes in data/ directory
$(STATIC_DDFA_C):
	$(B2H) \
		$(basename $(subst _,.automat_,$@))  \
		data/data \
		> $@_

	mv $@_ $@

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

$(STATIC_DDFA): data/$$@.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		 -DALG_DDFA -DSTATIC_DATA \
		 data/$@.c alg_ddfa/ddfa.o \
		 common/match.o \
		 test.c  $(PLATFORM) \
		 -o static/$@

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

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

$(STATIC_HFA): data/$$@.c
	$(CC) $(CFLAGS) $(LDFLAGS) \
		 -DALG_DDFA -DSTATIC_DATA \
		 data/$@.c alg_hybridfa/hybridfa.o \
		 common/match.o \
		 test.c  $(PLATFORM) \
		 -o static/$@


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