1-
21# Target variables
3- MODE ?= Debug
2+ MODE ?= Release
43
54# The Directories, Source, Includes, Objects, Binary
65ROOT := .
@@ -10,8 +9,9 @@ GTEST_CODE := $(GTEST_DIR).tar.gz
109OBJ_DIR := $(ROOT ) /obj
1110BUILD_DIR := $(OBJ_DIR ) /release
1211AST_DIR := $(ROOT ) /ast
12+ TEST_DIR := $(ROOT ) /test
1313BIN_DIR := $(ROOT ) /bin
14- ifeq ($(MODE ) ,Debug)
14+ ifeq ($(MODE ) , Debug)
1515BUILD_DIR := $(OBJ_DIR ) /debug
1616endif
1717prefix ?= /usr/local
@@ -20,38 +20,51 @@ includedir ?= $(prefix)/include
2020libdir ?= $(exec_prefix ) /lib
2121boost_libdir ?= $(prefix )
2222
23+ .PHONY : doc clean create-folders install install-folders lib-gtest test
24+
25+ # ///////////////////////////////////////////////////////////////////////////////
26+ # Compilation ------------------------------------------------------------------
27+ # ///////////////////////////////////////////////////////////////////////////////
28+
2329# Flags, Libraries and Includes
2430INCLUDES := -I. -I$(boost_libdir ) /include
25- CXXFLAGS := -std=c++17 -Wall -Werror - Wno-reorder -O2 -D BOOST_PHOENIX_STL_TUPLE_H_ -D BOOST_MPL_LIMIT_LIST_SIZE=30 -D BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
31+ CXXFLAGS := -std=c++17 -Wno-reorder -O3
2632ifeq ($(MODE ) ,Debug)
27- CXXFLAGS += -ggdb
33+ CXXFLAGS += -ggdb -Wall -Werror
2834endif
2935LIB_SBGRAPH = lib/libsbgraph.a
3036
3137all : $(LIB_SBGRAPH )
3238
39+ include util/Makefile.include
3340include sbg/Makefile.include
3441include parser/Makefile.include
35- include util/Makefile.include
3642include eval/Makefile.include
37- include test/Makefile.include
3843
39- $(BUILD_DIR ) /% .o : % .cpp
44+ create-folders ::
45+ @mkdir -p $(ROOT ) /lib
46+ @mkdir -p $(OBJ_DIR )
47+ @mkdir -p $(BUILD_DIR )
48+ @mkdir -p $(BUILD_DIR ) /$(AST_DIR )
49+ @mkdir -p $(BIN_DIR )
50+
51+ $(BUILD_DIR ) /% .o : % .cpp | create-folders
4052 $(CC ) $(INCLUDES ) $(CXXFLAGS ) -MM -MT $@ -MF $(patsubst % .o,% .d,$@ ) $<
4153 $(CC ) $(INCLUDES ) -c $< -o $@ $(CXXFLAGS )
4254
43- $( LIB_SBGRAPH ) : create-folders $( SBG_OBJ ) $( UTIL_OBJ ) $( PARSER_OBJ ) $( EVAL_OBJ )
44- $( AR ) rcs $(LIB_SBGRAPH ) $(SBG_OBJ ) $(UTIL_OBJ ) $( PARSER_OBJ ) $( EVAL_OBJ )
55+ LIB_SRC := $( shell find ast parser sbg eval util -type f -name " * .cpp" ! -name "main.cpp" )
56+ LIB_OBJ = $(addprefix $(BUILD_DIR ) /, $(LIB_SRC:.cpp=.o ) )
4557
46- lib-gtest : | create-folders
47- ifeq ("$(wildcard $(3RD_PARTY_DIR ) /gtest/usr/lib) ","")
48- cd $(3RD_PARTY_DIR)/gtest; tar xvzf $(GTEST_CODE)
49- mkdir -p $(3RD_PARTY_DIR)/gtest/build
50- cd $(3RD_PARTY_DIR)/gtest/build; cmake ../$(GTEST_DIR) -DCMAKE_INSTALL_PREFIX=../usr
51- cd $(3RD_PARTY_DIR)/gtest/build; make install
52- rm -rf $(3RD_PARTY_DIR)/gtest/$(GTEST_DIR)
53- rm -rf $(3RD_PARTY_DIR)/gtest/build
54- endif
58+ $(LIB_SBGRAPH ) : create-folders $(LIB_OBJ )
59+ $(AR ) rcs $(LIB_SBGRAPH ) $(LIB_OBJ )
60+
61+ DEPS = $(addprefix $(BUILD_DIR ) /, $(LIB_SRC:.cpp=.d ) )
62+
63+ -include $(DEPS )
64+
65+ # ///////////////////////////////////////////////////////////////////////////////
66+ # Library Installation ---------------------------------------------------------
67+ # ///////////////////////////////////////////////////////////////////////////////
5568
5669install : | install-folders
5770 @echo " Installing SBG library headers."
@@ -73,26 +86,41 @@ install-folders:
7386 @mkdir -p $(includedir ) /parser
7487 @mkdir -p $(includedir ) /eval
7588
76- create-folders ::
77- @mkdir -p $(ROOT ) /lib
78- @mkdir -p $(OBJ_DIR )
79- @mkdir -p $(BUILD_DIR )
80- @mkdir -p $(BUILD_DIR ) /$(AST_DIR )
81- @mkdir -p $(BIN_DIR )
89+ # ///////////////////////////////////////////////////////////////////////////////
90+ # Testing ----------------------------------------------------------------------
91+ # ///////////////////////////////////////////////////////////////////////////////
92+
93+ lib-gtest : | create-folders
94+ ifeq ("$(wildcard $(3RD_PARTY_DIR ) /gtest/usr/lib) ","")
95+ cd $(3RD_PARTY_DIR)/gtest; tar xvzf $(GTEST_CODE)
96+ mkdir -p $(3RD_PARTY_DIR)/gtest/build
97+ cd $(3RD_PARTY_DIR)/gtest/build; cmake ../$(GTEST_DIR) -DCMAKE_INSTALL_PREFIX=../usr
98+ cd $(3RD_PARTY_DIR)/gtest/build; make install
99+ rm -rf $(3RD_PARTY_DIR)/gtest/$(GTEST_DIR)
100+ rm -rf $(3RD_PARTY_DIR)/gtest/build
101+ endif
102+
103+ test : lib-gtest
104+ @cd $(TEST_DIR ) && ./compile_run_tests.sh
82105
83- .PHONY : doc
106+ # ///////////////////////////////////////////////////////////////////////////////
107+ # Documentation ----------------------------------------------------------------
108+ # ///////////////////////////////////////////////////////////////////////////////
84109
85110doc :
86111 @mkdir -p $(ROOT ) /doc
87112 @mkdir -p $(ROOT ) /doc/html
88113 @mkdir -p $(ROOT ) /doc/latex
114+ doxygen eval/EVAL.doxyfile
89115 doxygen sbg/SBG.doxyfile
90116 doxygen util/UTIL.doxyfile
91117
92- test : lib-gtest $(SBG_TEST )
118+ # ///////////////////////////////////////////////////////////////////////////////
119+ # Cleaning ---------------------------------------------------------------------
120+ # ///////////////////////////////////////////////////////////////////////////////
121+
122+ TEST_DIRS := test/parser test/performance test/performance/boost test/eval
93123
94- TEST_DIRS := test/parser test/performance test/performance/boost test/eval
95-
96124clean :
97125 $(RM ) -rf $(BIN_DIR ) $(OBJ_DIR ) $(LIB_SBGRAPH ) $(ROOT ) /lib $(ROOT ) /include $(3RD_PARTY_DIR ) /gtest/usr
98126 for dir in $( TEST_DIRS) ; do \
@@ -101,11 +129,15 @@ clean:
101129 $(RM) -rf $$dir/test_data; \
102130 done
103131
132+ # ///////////////////////////////////////////////////////////////////////////////
133+ # Help -------------------------------------------------------------------------
134+ # ///////////////////////////////////////////////////////////////////////////////
135+
104136help :
105137 @echo " make MODE=<Debug|Release> prefix=<PATH> exec_prefix=<PATH> includedir=<PATH> libdir=<PATH> boost_libdir=<PATH>"
106138 @echo " Default values:"
107139 @echo " "
108- @echo " MODE=Debug "
140+ @echo " MODE=Release "
109141 @echo " prefix=/usr/local"
110142 @echo " exec_prefix=/usr/local"
111143 @echo " includedir=/usr/local/include"
0 commit comments