ifdef sse
sse_flags = -mfpmath=sse -DUSE_SSE2 -DUSE_XMM3
else
sse_flags =
endif

gpp_args = $(sse_flags) $(gcc_machine_flags) -m64 -O3 -I include -I /usr/include/mpi -L /usr/lib -pthread
gpp_debug_args = $(sse_flags) $(gcc_machine_flags) -m64 -g -I include -I /usr/include/mpi -L /usr/lib -pthread

widefinder: src/tbrayB_parallel.cpp
		g++ $(gpp_args) src/tbrayB_parallel.cpp -o widefinder

.PHONY : tbray
tbray: tbray1 tbray2 tbray3 tbray4 tbray5 tbray6 tbray7 tbray8 tbrayA tbrayB tbrayB_parallel matches

# wide finder variants
tbray1: src/tbray1.cpp
		g++ $(gpp_args) src/tbray1.cpp -o bin/tbray1

tbray2: src/tbray2.cpp
		g++ $(gpp_args) src/tbray2.cpp -o bin/tbray2

tbray3: src/tbray3.cpp
		g++ $(gpp_args) src/tbray3.cpp -o bin/tbray3

tbray4: src/tbray4.cpp
		g++ $(gpp_args) src/tbray4.cpp -o bin/tbray4

tbray5: src/tbray5.cpp
		g++ $(gpp_args) src/tbray5.cpp -o bin/tbray5 -lmpi

tbray6: src/tbray6.cpp
		g++ $(gpp_args) src/tbray6.cpp -o bin/tbray6

tbray7: src/tbray7.cpp
		g++ $(gpp_args) src/tbray7.cpp -o bin/tbray7

tbray8: src/tbray8.cpp
		g++ $(gpp_args) src/tbray8.cpp -o bin/tbray8

tbray9: src/tbray9.cpp
		g++ $(gpp_args) src/tbray9.cpp -o bin/tbray9

tbrayA: src/tbrayA.cpp
		g++ $(gpp_args) src/tbrayA.cpp -o bin/tbrayA

tbrayB: src/tbrayB.cpp
		g++ $(gpp_args) src/tbrayB.cpp -o bin/tbrayB

tbrayB_parallel: src/tbrayB_parallel.cpp
		g++ $(gpp_args) src/tbrayB_parallel.cpp -o bin/tbrayB_parallel

tbrayB_parallel_db: src/tbrayB_parallel.cpp
		g++ $(gpp_debug_args) src/tbrayB_parallel.cpp -o bin/tbrayB_parallel_db

matches: src/tbray9.cpp
		g++ $(gpp_args) -DLIST_MATCHES src/tbrayA.cpp -o bin/matches

# list and map tests
list_test: src/list_test.cpp src/list.h
		g++ $(gpp_args) src/list_test.cpp -o bin/list_test

list_bench: src/std_vector_bench.cpp src/list.h
		g++ $(gpp_args) -DVLIST src/std_vector_bench.cpp -o bin/list_bench

vector_bench: src/std_vector_bench.cpp src/list.h
		g++ $(gpp_args) -DVECTOR src/std_vector_bench.cpp -o bin/vector_bench

#clean object files
.PHONY : clean
clean:
	rm obj/*.o
