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 -DLFLIST
LDFLAGS+=-lm -lrt
PROGS=ddm

ALL: release

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

#profile: CFLAGS+=-O0 -fopenmp -ggdb -pg -DNDEBUG 
#profile: CXXFLAGS+=-O0 -fopenmp -ggdb -pg -DNDEBUG -D_GLIBCXX_PARALLEL
#profile: LDLIBS+=-pg -lgomp
profile: CFLAGS+=-O0 -ggdb -pg -Wno-unknown-pragmas -DNDEBUG
profile: CXXFLAGS+=-O0 -ggdb -pg -Wno-unknown-pragmas -DNDEBUG
profile: LDFLAGS+=-pg
profile: LDLIBS+=-pg 
profile: $(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 parallel_brute_force.o timing.o int_tree.o interval_tree_matching.o parallel_sort_matching.o parallel_grid_matching.o
	g++ $(LDFLAGS) $^ $(LDLIBS) -o $@ 

main.o: main.c cflags.h

parallel_grid_matching.o: parallel_grid_matching.cc lflist.hh

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
# 	./ddm -s sbm -n 50000000 -a 100

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