include make.inc

########################################## include and linking ###################################################

INC_GEN=-I. 
BASIC_LIB=-lm -pthread -lz 

PP_EXT_INC=$(METIS_INC) $(LSB_INC) $(FOMPI_INC) $(DMAPP_INC) $(PAPI_INC) $(TBB_INC) 
PP_EXT_LIB=$(METIS_LIB) $(LSB_LIB) $(BASIC_LIB) $(FOMPI_LIB) $(DMAPP_LIB) $(PAPI_LIB) $(TBB_LIB) 

INC_PP=-I. -Iutils -Irepresentations -Ialgorithms -Irepresentations/external_generators/generator -Irepresentations/external_generators/g500_rmat $(PP_EXT_INC)
LIB_PP=$(PP_EXT_LIB) $(BASIC_LIB)

PARSUCC_EXT_INC=$(METIS_INC) $(LSB_INC) $(TREEHH_INC) $(PAPI_INC) 
PARSUCC_EXT_LIB=$(METIS_LIB) $(LSB_LIB) $(PAPI_LIB)

INC_PARSUCC=$(PARSUCC_EXT_INC) -I. -Iutils -Irepresentations -Ialgorithms -Itrees $(PAPI_INC)
LIB_PARSUCC=$(PARSUCC_EXT_LIB) $(BASIC_LIB) $(PAPI_LIB)

COMPRESS_SUCC_EXT_INC=$(METIS_INC) $(SDSL_INC) $(SIMD_INC) $(CPLEX_INC) $(TREEHH_INC) $(LSB_INC) $(PAPI_INC)
COMPRESS_SUCC_EXT_LIB=$(METIS_LIB) $(SDSL_LIB) $(SIMD_LIB) $(CPLEX_LIB) $(LSB_LIB) $(PAPI_LIB) 

INC_COMPRESS_SUCC=-I. -Iutils -Iencoders -IoffsetStructures -Ipermuters -Ipartitioners -Irepresentations -Ialgorithms $(COMPRESS_SUCC_EXT_INC) 
LIB_COMPRESS_SUCC=$(COMPRESS_SUCC_EXT_LIB) $(BASIC_LIB)

# GRAPH_PROPS_EXT_INC=$(METIS_INC) $(SDSL_INC) $(SIMD_INC) $(LSB_INC) $(IGRAPH_INC)
# GRAPH_PROPS_EXT_LIB=$(METIS_LIB) $(SDSL_LIB) $(SIMD_LIB) $(LSB_LIB) $(IGRAPH_LIB) 

GRAPH_PROPS_EXT_INC=$(METIS_INC) $(LSB_INC) $(IGRAPH_INC) $(CPLEX_INC) $(PAPI_INC)
GRAPH_PROPS_EXT_LIB=$(METIS_LIB) $(IGRAPH_LIB) $(CPLEX_LIB) $(PAPI_LIB)

INC_GRAPH_PROPS=-I. $(GRAPH_PROPS_EXT_INC)
LIB_GRAPH_PROPS=$(GRAPH_PROPS_EXT_LIB) $(BASIC_LIB) 

# INC_PP_SM=-I. -Iutils -Itests -Idebugging -Ibenchmarks -Ivarious -Ialgorithms $(METIS_INC) $(LSB_INC) $(FOMPI_INC) $(DMAPP_INC) $(PAPI_INC)
# LIB_PP_SM=$(METIS_LIB) $(LSB_LIB) $(BASIC_LIB) $(FOMPI_LIB) $(DMAPP_LIB) $(PAPI_LIB) #$(FOMPI_LIB)

INC_PAPI=-I. $(PAPI_INC) 
LIB_PAPI=$(PAPI_LIB) $(BASIC_LIB)

INC_ALL=-I. -Iutils -Irepresentations -Ialgorithms -Irepresentations/external_generators/generator -Irepresentations/external_generators/g500_rmat $(METIS_INC) $(SDSL_INC) $(SIMD_INC) $(CPLEX_INC) $(TREEHH_INC) $(LSB_INC) $(PAPI_INC) $(TBB_INC)
LIB_ALL=$(BASIC_LIB) $(METIS_LIB) $(SDSL_LIB) $(SIMD_LIB) $(CPLEX_LIB) $(LSB_LIB) $(PAPI_LIB) $(TBB_LIB)


########################################## Folders ###################################################

OBJDIR=obj
TESTDIR=tests
BENCHDIR=benchmarks

########################################## Matching source files ###################################################

UTILS:= $(wildcard utils/*.cpp)
REPRESENTATIONS:= $(wildcard representations/*.cpp)
REPRESENTATIONS_EXT_GEN_GEN:= $(wildcard representations/external_generators/generator/*.c)
REPRESENTATIONS_EXT_GEN_G500:= $(wildcard representations/external_generators/g500_rmat/*.c)
TREES:= $(wildcard trees/*.cpp)

PARTITIONERS:= $(wildcard partitioners/*.cpp)
OFFSETS:= $(wildcard offsetStructures/*.cpp)
CODERS:= $(wildcard coders/*.cpp)
PERMUTERS:= $(wildcard permuters/*.cpp)

# ALGORITHMS:= $(wildcard algorithms/*.cpp)
ALGORITHMS_BFS:= $(wildcard algorithms/BFS*.cpp)
ALGORITHMS_TC:= $(wildcard algorithms/TC*.cpp)
ALGORITHMS_GC:= $(wildcard algorithms/*GC.cpp)
ALGORITHMS_BC:= $(wildcard algorithms/BC*.cpp)
ALGORITHMS_PR:= $(wildcard algorithms/PR*.cpp)
ALGORITHMS_MST:= $(wildcard algorithms/MST.cpp)
ALGORITHMS_SSSP:= $(wildcard algorithms/SSSP*.cpp)

TESTS_GENERAL:= $(wildcard tests/*.cpp)
TESTS_COMPRESS_SUCC:= $(wildcard tests/compress_succ/*.cpp)
TESTS_PP:= $(wildcard tests/pushpull/*.cpp)
TESTS_PARSUCC:= $(wildcard tests/parsucc/*.cpp)

BENCHMARKS_GENERAL:= $(wildcard benchmarks/*.cpp)
BENCHMARKS_COMPRESS_SUCC:= $(wildcard benchmarks/compress_succ/*.cpp)
BENCHMARKS_PARSUCC:= $(wildcard benchmarks/parsucc/*.cpp)
BENCHMARKS_GRAPH_PROPS:= $(wildcard benchmarks/graph_properties/*_bench.cpp)
BENCHMARKS_PAPI:= $(wildcard benchmarks/papi/*_bench.cpp)
BENCHMARKS_PP:= $(wildcard benchmarks/pushpull/*_bench.cpp)
# BENCHMARKS_PP_BFS:= $(wildcard benchmarks/pushpull/BFS*_bench.cpp)
# BENCHMARKS_PP_GC:= $(wildcard benchmarks/pushpull/*GC*_bench.cpp)
# BENCHMARKS_PP_SSSP:= $(wildcard benchmarks/pushpull/SSSP*_bench.cpp)
# BENCHMARKS_PP_MST:= $(wildcard benchmarks/pushpull/MST*_bench.cpp)
# BENCHMARKS_PP_PR:= $(wildcard benchmarks/pushpull/PR*_bench.cpp)
# BENCHMARKS_PP_TC:= $(wildcard benchmarks/pushpull/TC*_bench.cpp)


########################################### Creating general objects ##################################################

OBJS_ALGORITHMS_BFS := $(ALGORITHMS_BFS:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_TC := $(ALGORITHMS_TC:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_GC := $(ALGORITHMS_GC:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_BC := $(ALGORITHMS_BC:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_PR := $(ALGORITHMS_PR:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_MST := $(ALGORITHMS_MST:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS_SSSP := $(ALGORITHMS_SSSP:algorithms/%.cpp=${OBJDIR}/%.o)
# OBJS_ALGORITHMS := $(ALGORITHMS:algorithms/%.cpp=${OBJDIR}/%.o)
OBJS_ALGORITHMS := $(OBJS_ALGORITHMS_BFS) $(OBJS_ALGORITHMS_TC) $(OBJS_ALGORITHMS_GC) $(OBJS_ALGORITHMS_PR) $(OBJS_ALGORITHMS_MST) $(OBJS_ALGORITHMS_SSSP) 

OBJS_PERMUTERS := $(PERMUTERS:permuters/%.cpp=${OBJDIR}/%.o)
OBJS_PARTITIONERS := $(PARTITIONERS:partitioners/%.cpp=${OBJDIR}/%.o)
OBJS_OFFSETS := $(OFFSETS:offsetStructures/%.cpp=${OBJDIR}/%.o)
OBJS_CODERS := $(CODERS:coders/%.cpp=${OBJDIR}/%.o)
OBJS_TREES := $(TREES:trees/%.cpp=${OBJDIR}/%.o)

OBJS_REPRESENTATIONS := $(REPRESENTATIONS:representations/%.cpp=${OBJDIR}/%.o)
OBJS_REPRESENTATIONS_EXT_GEN_GEN := $(REPRESENTATIONS_EXT_GEN_GEN:representations/external_generators/generator/%.c=${OBJDIR}/%.o)
OBJS_REPRESENTATIONS_EXT_GEN_G500 := $(REPRESENTATIONS_EXT_GEN_G500:representations/external_generators/g500_rmat/%.c=${OBJDIR}/%.o)

OBJS_UTILS := $(UTILS:utils/%.cpp=${OBJDIR}/%.o)

OBJS_GENERATORS := $(OBJS_REPRESENTATIONS_EXT_GEN_GEN)\
	$(OBJS_REPRESENTATIONS_EXT_GEN_G500)

########################################### Creating objects related to projects ###########################################

# OBJS := $(CPP_SRCS:%.cpp=${OBJDIR}/%.o)\
# 	$(UTILS:utils/%.cpp=${OBJDIR}/%.o)\
# 	$(REPRESENTATIONS:representations/%.cpp=${OBJDIR}/%.o)\
# 	$(REPRESENTATIONS_EXT_GEN_GEN:representations/external_generators/generator/%.c=${OBJDIR}/%.o)\
# 	$(REPRESENTATIONS_EXT_GEN_G500:representations/external_generators/g500_rmat/%.c=${OBJDIR}/%.o)\
# 	$(TREES:trees/%.cpp=${OBJDIR}/%.o)\
# 	$(PARTITIONERS:partitioners/%.cpp=${OBJDIR}/%.o)\
# 	$(OFFSETS:offsetStructures/%.cpp=${OBJDIR}/%.o)\
# 	$(CODERS:coders/%.cpp=${OBJDIR}/%.o)\
# 	$(ALGORITHMS:algorithms/%.cpp=${OBJDIR}/%.o)\
# 	$(PERMUTERS:permuters/%.cpp=${OBJDIR}/%.o)

OBJS_COMPRESS_SUCC := $(OBJS_UTILS)\
	$(OBJS_REPRESENTATIONS)\
	$(OBJS_GENERATORS)\
	$(OBJS_PARTITIONERS)\
	$(OBJS_OFFSETS)\
	$(OBJS_CODERS)\
	$(OBJS_PERMUTERS)

OBJS_PARSUCC := $(OBJS_UTILS)\
	$(OBJS_REPRESENTATIONS)\
	$(OBJS_TREES)

OBJS_GRAPH_PROPS := $(OBJS_UTILS)\
	$(OBJS_REPRESENTATIONS)

OBJS_PP := $(OBJS_UTILS)\
	$(OBJS_REPRESENTATIONS)\
	$(OBJS_GENERATORS)\
	$(OBJS_ALGORITHMS)

OBJS := $(OBJS_PP)\
	$(OBJS_COMPRESS_SUCC)\
	$(OBJS_PARSUCC)\
	$(OBJS_GRAPH_PROPS)

OBJS_ALL := $(OBJS)

########################################### Creating tests and benchmarks ###########################################

TESTS_GENERAL := $(TESTS_GENERAL:tests/%_test.cpp=${TESTDIR}/%_test)
TESTS_COMPRESS_SUCC := $(TESTS_COMPRESS_SUCC:tests/compress_succ/%_test.cpp=${TESTDIR}/compress_succ/%_test)
TESTS_PARSUCC := $(TESTS_PARSUCC:tests/parsucc/%_test.cpp=${TESTDIR}/parsucc/%_test)
TESTS_PP := $(TESTS_PP:tests/pushpull/%_test.cpp=${TESTDIR}/pushpull/%_test)

TESTS := $(TESTS_GENERAL)\
	$(TESTS_COMPRESS_SUCC)\
	$(TESTS_PARSUCC)\
	$(TESTS_PP)

BENCHMARKS_GENERAL := $(BENCHMARKS_GENERAL:benchmarks/%_bench.cpp=${BENCHDIR}/%_bench)
BENCHMARKS_COMPRESS_SUC := $(BENCHMARKS_COMPRESS_SUCC:benchmarks/compress_succ/%_bench.cpp=${BENCHDIR}/compress_succ/%_bench)
BENCHMARKS_PARSUCC := $(BENCHMARKS_PARSUCC:benchmarks/parsucc/%_bench.cpp=${BENCHDIR}/parsucc/%_bench)
BENCHMARKS_PAPI := $(BENCHMARKS_PAPI:benchmarks/papi/%_bench.cpp=${BENCHDIR}/papi/%_bench)
BENCHMARKS_GRAPH_PROPS := $(BENCHMARKS_GRAPH_PROPS:benchmarks/graph_properties/%_bench.cpp=${BENCHDIR}/graph_properties/%_bench)
BENCHMARKS_PP := $(BENCHMARKS_PP:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_BFS := $(BENCHMARKS_PP_BFS:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_GC := $(BENCHMARKS_PP_GC:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_MST := $(BENCHMARKS_PP_MST:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_SSSP := $(BENCHMARKS_PP_SSSP:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_PR := $(BENCHMARKS_PP_PR:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP_TC := $(BENCHMARKS_PP_TC:benchmarks/pushpull/%_bench.cpp=${BENCHDIR}/pushpull/%_bench)
# BENCHMARKS_PP := $(BENCHMARKS_PP_BFS) $(BENCHMARKS_PP_GC) $(BENCHMARKS_PP_MST) $(BENCHMARKS_PP_SSSP) $(BENCHMARKS_PP_PR) $(BENCHMARKS_PP_TC)

BENCHMARKS := $(BENCHMARKS_GENERAL)\
	$(BENCHMARKS_COMPRESS_SUCC)\
	$(BENCHMARKS_PARSUCC)\
	$(BENCHMARKS_PP)\
	$(BENCHMARKS_GRAPH_PROPS)

#############################################################################################

.PHONY: clean

#all: $(OBJS) 
#obj: $(OBJS)
generators: $(OBJS_GENERATORS)
tests: $(TESTS) 
benchmarks: $(BENCHMARKS)
pushpull: $(OBJS_PP) $(BENCHMARKS_PP) $(TESTS_PP) 
compress_succ: $(OBJS_COMPRESS_SUCC) $(BENCHMARKS_COMPRESS_SUCC) $(TESTS_COMPRESS_SUCC)
parsucc: $(OBJS_PARSUCC) $(BENCHMARKS_PARSUCC) $(TESTS_PARSUCC)
graph_props: $(OBJS_GRAPH_PROPS) $(BENCHMARKS_GRAPH_PROPS) $(TESTS_GRAPH_PROPS)
papi: $(OBJS_PAPI) $(BENCHMARKS_PAPI) $(TESTS_PAPI)

clean:
	rm -f obj/*.o
	rm -f $(TESTS)
	rm -f $(BENCHMARKS)
	rm -f *~
	rm -f utils/*~
	rm -f representations/*~
	rm -f representations/external_generators/*~
	rm -f representations/g500_rmat/*~
	rm -f representations/generator/*~
	rm -f trees/*~
	rm -f tests/*~
	rm -f tests/pushpull/*~
	rm -f tests/parsucc/*~
	rm -f tests/compress_succ/*~
	rm -f tests/input/*~
	rm -f tests/input/trees/*~
	rm -f tests/input/as-graphs/*~
	rm -f benchmarks/*~
	rm -f benchmarks/pushpull/*~
	rm -f benchmarks/parsucc/*~
	rm -f benchmarks/compress_succ/*~
	rm -f benchmarks/graph_properties/*~
	rm -f algorithms/*~
	rm -f offsetStructures/*~
	rm -f encoders/*~
	rm -f permuters/*~
	rm -f partitioners/*~
	rm -f partitioners/*~

######################################### Generators ####################################################

${OBJDIR}/make_graph.o: representations/external_generators/generator/make_graph.c
	$(CXX) $(CPPGLAGS_BASIC) -c $< -o $@

${OBJDIR}/graph_generator.o: representations/external_generators/generator/graph_generator.c 
	$(CXX) $(CPPFLAGS_BASIC) $(INC_GEN) -c $< -o $@

${OBJDIR}/splittable_mrg.o: representations/external_generators/generator/splittable_mrg.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/gen_utils.o: representations/external_generators/generator/gen_utils.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

# ${OBJDIR}/mrg_transitions.o: representations/external_generators/generator/splittable_mrg.c representations/external_generators/generator/mrg_transitions.c 
# 	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/mrg_transitions.o: representations/external_generators/generator/mrg_transitions.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/oned_csr.o: representations/external_generators/g500_rmat/oned_csr.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/oned_csc.o: representations/external_generators/g500_rmat/oned_csc.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/g500_utils.o: representations/external_generators/g500_rmat/g500_utils.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

${OBJDIR}/validate.o: representations/external_generators/g500_rmat/validate.c 
	$(CXX) $(CPPFLAGS_BASIC) -c $< -o $@

######################################### General targets ###############################################

${OBJDIR}/%.o: representations/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(METIS_INC) -Irepresentations -c $< -o $@

${OBJDIR}/%.o: utils/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(METIS_INC) $(LSB_INC) $(PAPI_INC) -Iutils -c $< -o $@

${OBJDIR}/%.o: partitioners/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(METIS_INC) -c $< -o $@

${OBJDIR}/%.o: offsetStructures/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(SDSL_INC) -c $< -o $@

${OBJDIR}/%.o: coders/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(SDSL_INC) $(METIS_INC) -c $< -o $@

${OBJDIR}/%.o: permuters/%.cpp
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(METIS_INC) $(CPLEX_INC) -c $< -o $@

${OBJDIR}/%.o: trees/%.cpp trees/%.h
	$(CXX) $(CPPFLAGS_FULL) $(INC_GEN) $(TREEHH_INC) -c $< -o $@

######################################### PP ###############################################

${OBJDIR}/BGC.o: algorithms/BGC.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${OBJDIR}/SSSP.o: algorithms/SSSP.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${OBJDIR}/MST.o: algorithms/MST.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${OBJDIR}/TC.o: algorithms/TC.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${OBJDIR}/BFS.o: algorithms/BFS.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${OBJDIR}/PR.o: algorithms/PR.cpp 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) -c $< -o $@

${BENCHDIR}/pushpull/%___bench: ${BENCHDIR}/pushpull/%___bench.cpp ${OBJS_PP} 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) $(OBJS_PP) $(LIB_PP) $< -o $@

${TESTDIR}/pushpull/%SM___test: ${TESTDIR}/pushpull/%SM___test.cpp ${OBJS_PP} 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) $(OBJS_PP) $(LIB_PP) $< -o $@

${TESTDIR}/pushpull/%___test: ${TESTDIR}/pushpull/%___test.cpp ${OBJS_PP} 
	$(CXX) $(CPPFLAGS_PP) $(INC_PP) $(OBJS_PP) $(LIB_PP) $< -o $@

######################################### Parsucc ###############################################

${BENCHDIR}/parsucc/%___bench: ${BENCHDIR}/parsucc/%___bench.cpp ${OBJS_PARSUCC} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_PARSUCC) $(OBJS_PARSUCC) $(LIB_PARSUCC) $< -o $@

${TESTDIR}/parsucc/%___test: ${TESTDIR}/parsucc/%___test.cpp ${OBJS_PARSUCC} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_PARSUCC) $(OBJS_PARSUCC) $(LIB_PARSUCC) $< -o $@

######################################### Compress succ ###############################################

${BENCHDIR}/compress_succ/%___bench: ${BENCHDIR}/compress_succ/%___bench.cpp ${OBJS_COMPRESS_SUCC} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_COMPRESS_SUCC) $(OBJS_COMPRESS_SUCC) $(LIB_COMPRESS_SUCC) $< -o $@

${TESTDIR}/compress_succ/%___test: ${TESTDIR}/compress_succ/%___test.cpp ${OBJS_COMPRESS_SUCC} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_COMPRESS_SUCC) $(OBJS_COMPRESS_SUCC) $(LIB_COMPRESS_SUCC) $< -o $@

######################################### Graph properties ###############################################

${BENCHDIR}/graph_properties/%___bench: ${BENCHDIR}/graph_properties/%___bench.cpp ${OBJS_GRAPH_PROPS} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_GRAPH_PROPS) $(OBJS_GRAPH_PROPS) $(LIB_GRAPH_PROPS) $< -o $@

######################################### Papi ###############################################

${BENCHDIR}/papi/%___bench: ${BENCHDIR}/papi/%___bench.cpp ${OBJS_PAPI} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_PAPI) $(OBJS_PAPI) $(LIB_PAPI) $< -o $@

######################################### Various: TODO ###############################################

${TESTDIR}/%___test: ${TESTDIR}/%___test.cpp ${OBJS} 
	$(CXX) $(CPPFLAGS_FULL) $(INC_ALL) $(OBJS_UTILS) $(OBJS_REPRESENTATIONS) $(OBJS_TREES) $(LIB_ALL) $< -o $@

