
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)

perfexp-cfa-hl-pta-share : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_SHARE -DOP_PLUS_THEN_ASSIGN

perfexp-cfa-hl-peq-share : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_SHARE -DOP_PLUSEQ

perfexp-cfa-ll-pta-share : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_SHARE -DOP_PLUS_THEN_ASSIGN

perfexp-cfa-ll-peq-share : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_SHARE -DOP_PLUSEQ

perfexp-cfa-hl-pta-noshare : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_NOSHARE -DOP_PLUS_THEN_ASSIGN

perfexp-cfa-hl-peq-noshare : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_NOSHARE -DOP_PLUSEQ

perfexp-cfa-ll-pta-noshare : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_NOSHARE -DOP_PLUS_THEN_ASSIGN

perfexp-cfa-ll-peq-noshare : prog.cfa $(LIBCFA)
	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_NOSHARE -DOP_PLUSEQ

perfexp-stl-pta : prog.cfa
	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_PLUS_THEN_ASSIGN

perfexp-stl-peq : prog.cfa
	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_PLUSEQ

perfexp-buhr94-pta.o : prog.cfa
	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_PLUS_THEN_ASSIGN

perfexp-buhr94-peq.o : prog.cfa
	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_PLUSEQ

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-pta : perfexp-buhr94-pta.o buhr94-string.o buhr94-VbyteSM.o
	$(CXX) $(PERFFLAGS_CXX) $^ -o $@

perfexp-buhr94-peq : perfexp-buhr94-peq.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
