]> WPIA git - cassiopeia.git/blob - Makefile
ADD: gcov make launch
[cassiopeia.git] / Makefile
1 INSTALL = ${shell which install}
2 INSTALL_FILE    = $(INSTALL) -p -D -o root -g root  -m  644
3 INSTALL_PROGRAM = $(INSTALL) -p -D -o root -g root  -m  700
4 INSTALL_SCRIPT  = $(INSTALL) -p -D -o root -g root  -m  700
5 INSTALL_DIR     = $(INSTALL) -p -d -o root -g root  -m  755
6
7 MKDIR = mkdir -p
8
9 ifeq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
10     INSTALL_PROGRAM += -s
11 endif
12 ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
13     NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
14     MAKEFLAGS += -j$(NUMJOBS)
15 endif
16
17 BIN="bin/cassiopeia"
18 LIBS=openssl collissiondetect
19
20 CC=libtool --mode=compile gcc
21 CC_DEP=g++
22 CXX=libtool --mode=compile g++
23 CXX_DEP=g++
24 LD=libtool --mode=link g++
25
26 ifneq (,$(filter debug,$(DEB_BUILD_OPTIONS)))
27 CFLAGS+=-DNO_DAEMON -g
28 endif
29 ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
30     CFLAGS += -O0
31 else
32     CFLAGS += -O2
33 endif
34
35 CFLAGS+=${ADDFLAGS} -Wall -Werror -Wextra -pedantic -std=c++11 -Ilib/openssl/include -Isrc
36 CXXFLAGS=$(CFLAGS)
37 LDFLAGS+=${ADDFLAGS} -L/usr/lib/i386-linux-gnu/ -lssl -lcrypto -ldl -Llib/openssl
38
39 ifneq (,$(filter coverage,$(DEB_BUILD_OPTIONS)))
40     LDFLAGS += -lgcov
41     CFLAGS += -fprofile-arcs -ftest-coverage
42 endif
43
44
45 SRC_DIR=src
46 OBJ_DIR=obj
47 DEP_DIR=dep
48
49 FS_SRC=$(wildcard ${SRC_DIR}/*.cpp) $(wildcard ${SRC_DIR}/io/*.cpp) $(wildcard ${SRC_DIR}/crypto/*.cpp) $(wildcard ${SRC_DIR}/db/*.cpp)
50
51 FS_BIN=$(wildcard ${SRC_DIR}/app/*.cpp)
52 FS_LIBS=$(wildcard lib/*/)
53 FS_OBJ=$(FS_SRC:${SRC_DIR}/%.cpp=${OBJ_DIR}/%.lo)
54 FS_DEP=$(FS_SRC:${SRC_DIR}/%.cpp=${DEP_DIR}/%.d)
55
56 .SUFFIXES: .c .cpp .d
57
58 .PHONY: all
59 all: build
60
61 .PHONY: clean
62 clean::
63         -rm -rf .libs
64         -rm -rf *.gcov
65         -rm -rf gcov.log
66         -rm -rf *.a
67         -rm -rf *.d
68         -rm -rf *.o
69         -rm -rf *.la
70         -rm -rf *.lo
71         -rm -rf *.so
72         -rm -rf ${OBJ_DIR}
73         -rm -rf ${DEP_DIR}
74 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
75         # Code to run the package test suite.
76         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test clean
77 endif
78
79 .PHONY: dist-clean
80 dist-clean: clean
81         ${MAKE} -C lib/openssl clean
82         ${MAKE} -C lib/collissiondetect clean
83
84
85 build: cassiopeia
86 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
87         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test
88 endif
89
90 .PHONY: install
91 install: build
92         ${INSTALL_PROGRAM} bin/cassiopeia ${DESTDIR}/usr/bin/cassiopeia
93         ${INSTALL_PROGRAM} bin/cassiopeia-signer ${DESTDIR}/usr/bin/cassiopeia-signer
94         ${INSTALL_DIR} ${DESTDIR}/etc/cacert/cassiopeia
95
96 .PHONY: libs
97 libs: ${LIBS}
98
99 .PHONY: openssl
100 openssl:
101         ${MAKE} -C lib openssl
102
103 .PHONY: collissiondetect
104 collissiondetect:
105         ${MAKE} -C lib/collissiondetect
106
107 .PHONY: coverage
108 coverage:
109         find . -name "*.gcda" -exec rm {} +
110         ${MAKE} "DEB_BUILD_OPTIONS=coverage noopt"
111         find obj -name "*.gcda" -exec gcov -p {} + > gcov.log
112
113
114 # --------
115
116 cassiopeia: bin/cassiopeia bin/cassiopeia-signer
117
118 bin/cassiopeia: libs ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
119         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -lmysqlclient -o $@ ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
120
121 bin/cassiopeia-signer: libs ${FS_OBJ} ${OBJ_DIR}/apps/signer.lo
122         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -o $@ $(filter-out ${OBJ_DIR}/db/mysql.lo,${FS_OBJ}) ${OBJ_DIR}/apps/signer.lo
123
124 ${DEP_DIR}/%.d: ${SRC_DIR}/%.cpp
125         ${MKDIR} $(shell dirname $@) && $(CXX_DEP) $(CXXFLAGS) -M -MF $@ $<
126 ${DEP_DIR}/%.d: ${SRC_DIR}/%.c
127         ${MKDIR} $(shell dirname $@) && $(CC) $(CXXFLAGS) -M -MF $@ $<
128
129 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.c ${DEP_DIR}/%.d
130         ${MKDIR} $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
131 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.cpp ${DEP_DIR}/%.d
132         ${MKDIR} $(shell dirname $@) && $(CXX) $(CXXFLAGS) -o $@ -c $<
133
134 -include $(FS_DEP)