PLUSG=-O3 -Wall 
CC=g++
BUILDDIR=build-`uname -m`/

all: zade.o.cpp
	cd ${BUILDDIR} && ${CC} ${PLUSG} initcec2013.o deparameterizer.o zade.o constraintsepsilontakahama2006.o jdeapin2008reductnp.o jdetevc2006.o runappcecoptimization.o runapp.o main.o -o zade+cec2013.`uname -m`

zade.o.cpp:
	mkdir -p ${BUILDDIR}
	${CC} ${PLUSG} -c challenges/cec2013rpsoo/initcec2013.cpp -o ${BUILDDIR}initcec2013.o
	${CC} ${PLUSG} -c DE/ZADE/deparameterizer.cpp -o ${BUILDDIR}deparameterizer.o
	${CC} ${PLUSG} -c DE/jdetevc2006.cpp -o ${BUILDDIR}jdetevc2006.o
	${CC} ${PLUSG} -c DE/constraintsepsilontakahama2006.cpp -o ${BUILDDIR}constraintsepsilontakahama2006.o
	${CC} ${PLUSG} -c DE/jdeapin2008reductnp.cpp -o ${BUILDDIR}jdeapin2008reductnp.o
	${CC} ${PLUSG} -c DE/ZADE/zade.cpp -o ${BUILDDIR}zade.o
	${CC} ${PLUSG} -c runapp/runappcecoptimization.cpp -o ${BUILDDIR}runappcecoptimization.o
	${CC} ${PLUSG} -c runapp/runapp.cpp -o ${BUILDDIR}runapp.o
	${CC} ${PLUSG} -c main.cpp -o ${BUILDDIR}main.o

run:
	./build-x86_64/zade+cec2013.x86_64 CEC2013 strat 9 stratOpts 35 2>/dev/null

clean:
	rm -f ${BUILDDIR}*.o ${BUILDDIR}*.so

timingrun:
	make algocheckout
	make flat && echo "Run the lines below from shell manually:" \
		./build-x86_64/zade+cec2013.x86_64 CEC2013 funcs 14 14 fesn 0 2 runs 10000 10000 2>/dev/null && \
		for j in `seq 3 5`; do for i in `seq 1 5`; do ./build-x86_64/zade+cec2013.x86_64 CEC2013 funcs 14 14 fesn $(j) $(j) runs 1 1 strat 9 stratOpts 35 2>/dev/null ; done | tee timings && cat timings | grep "0000 FES" | tail -n 5  | awk '{a+=$NF}END{for (i=0; i < 1; i++) print "T=", a/5*60;}'; done | tee timings-txt | grep 'T='

