
CFABUILD = ~/cfa2/build-perf
LIBCFA = $(CFABUILD)/libcfa/*/src/.libs/libcfa.so

CFA = $(CFABUILD)/driver/cfa
PERFFLAGS_CFA = -nodebug -O2
PERFFLAGS_CXX = -DNDEBUG -O2


PERFPROGS = \
	perfexp-cfa-hl-pta-share \
	perfexp-cfa-hl-peq-share \
	perfexp-cfa-ll-pta-share \
	perfexp-cfa-ll-peq-share \
	perfexp-cfa-hl-pta-noshare \
	perfexp-cfa-hl-peq-noshare \
	perfexp-cfa-ll-pta-noshare \
	perfexp-cfa-ll-peq-noshare \
	perfexp-stl-pta \
	perfexp-stl-peq \
	perfexp-buhr94-pta \
	perfexp-buhr94-peq

all : $(PERFPROGS)

# upper-case conversion function
define uc
$(shell echo $(1) | tr  '[:lower:]' '[:upper:]')
endef

perfexp-cfa-%: APILEVEL=$(call uc,$(word 3,$(subst -, ,$@)))
perfexp-cfa-%: OPERATION=$(call uc,$(word 4,$(subst -, ,$@)))
perfexp-cfa-%: SHARING=$(call uc,$(word 5,$(subst -, ,$@)))
perfexp-cfa-%: prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_$(APILEVEL)_$(SHARING) -DOP_$(OPERATION)

perfexp-stl-%: OPERATION=$(call uc,$(word 3,$(subst -, ,$@)))
perfexp-stl-%: prog.cfa
	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_$(OPERATION)

perfexp-buhr94-%.o: OPERATION=$(call uc,$(word 3,$(subst -, ,$(basename $@))))
perfexp-buhr94-%.o: prog.cfa
	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_$(OPERATION)

buhr94-string.o:
	$(CXX) -xc++ -c $(PERFFLAGS_CXX) ~/usys1/sm/string/StringSharing/src/string.cc -o $@

buhr94-VbyteSM.o:
	$(CXX) -xc++ -c $(PERFFLAGS_CXX) ~/usys1/sm/string/StringSharing/src/VbyteSM.cc -o $@

perfexp-buhr94-% : perfexp-buhr94-%.o buhr94-string.o buhr94-VbyteSM.o
	$(CXX) $(PERFFLAGS_CXX) $^ -o $@

clean:
	rm -f *.o perfexp*

MEASURE = $(PERFPROGS)
CORPORI = corpus-100-*-1.txt

measurement: $(MEASURE)
	tofile=measurement-`date '+%F--%H-%M-%S'`.csv ; \
	echo $$tofile ; \
	for prog in $(MEASURE) ; do \
	    for corpus in $(CORPORI) ; do \
			corpusbody=`cat $$corpus` ; \
			printed=`./$$prog 100 10 $$corpusbody` ; \
			echo $$prog,$$corpus,$$printed  >>  $$tofile ; \
		done ; \
	done ; \
	cat $$tofile
