CFLAGS+=-Wall -std=c99 -pedantic -D_XOPEN_SOURCE=600
CXXFLAGS+=-Wall -std=c++03 -pedantic -DEPSET_SET
#CXXFLAGS+=-Wall -std=c++11 -pedantic -DEPSET_SET_UNORDERED
LDFLAGS+=-lm -lrt
PROGS=ddm

ALL: release

debug: CFLAGS+=-ggdb -pg -Wno-unknown-pragmas
debug: CXXFLAGS+=-ggdb -pg -Wno-unknown-pragmas
debug: LDLIBS+=-pg 
debug: $(PROGS)

release: CFLAGS+=-O3 -Wunknown-pragmas -fopenmp -DNDEBUG
release: CXXFLAGS+=-O3 -Wunknown-pragmas -fopenmp -D_GLIBCXX_PARALLEL -DNDEBUG
release: LDLIBS+=-lgomp 
release: $(PROGS)

ddm: main.o interval.o brute_force_matching.o timing.o bitmatrix.o int_tree.o interval_tree_matching.o parallel_sort_matching.o
	g++ $(LDFLAGS) $^ $(LDLIBS) -o $@ 

main.o: main.c cflags.h

cflags.h:
	@echo "const char* CFLAGS=\"$(CFLAGS)\";" > cflags.h
	@echo "const char* CXXFLAGS=\"$(CXXFLAGS)\";" >> cflags.h
	@echo "const char* LDFLAGS=\"$(LDFLAGS)\";" >> cflags.h
	@echo "const char* LDLIBS=\"$(LDLIBS)\";" >> cflags.h

test: ddm
	OMP_PROC_BIND=TRUE GOMP_CPU_AFFINITY="0-7" OMP_NUM_THREADS=4 ./ddm -s parallel_sort -n 50000000 -a 100

clean:
	\rm -f *.o *~ ddm cflags.h *.txt gmon.out
