]> WPIA git - cassiopeia.git/blob - Makefile
cln: Move code around, cleanup structure
[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 SRC_DIR=src
40 OBJ_DIR=obj
41 DEP_DIR=dep
42
43 FS_SRC=$(wildcard ${SRC_DIR}/*.cpp) $(wildcard ${SRC_DIR}/io/*.cpp) $(wildcard ${SRC_DIR}/crypto/*.cpp) $(wildcard ${SRC_DIR}/db/*.cpp)
44
45 FS_BIN=$(wildcard ${SRC_DIR}/app/*.cpp)
46 FS_LIBS=$(wildcard lib/*/)
47 FS_OBJ=$(FS_SRC:${SRC_DIR}/%.cpp=${OBJ_DIR}/%.lo)
48 FS_DEP=$(FS_SRC:${SRC_DIR}/%.cpp=${DEP_DIR}/%.d)
49
50 .SUFFIXES: .c .cpp .d
51
52 .PHONY: all
53 all: build
54
55 .PHONY: clean
56 clean::
57         -rm -rf .libs
58         -rm -rf *.a
59         -rm -rf *.d
60         -rm -rf *.o
61         -rm -rf *.la
62         -rm -rf *.lo
63         -rm -rf *.so
64         -rm -rf ${OBJ_DIR}
65         -rm -rf ${DEP_DIR}
66 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
67         # Code to run the package test suite.
68         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test clean
69 endif
70
71 .PHONY: dist-clean
72 dist-clean: clean
73         ${MAKE} -C lib/openssl clean
74         ${MAKE} -C lib/collissiondetect clean
75
76
77 build: cassiopeia
78 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
79         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test
80 endif
81
82 .PHONY: install
83 install: build
84         ${INSTALL_PROGRAM} bin/cassiopeia ${DESTDIR}/usr/bin/cassiopeia
85         ${INSTALL_PROGRAM} bin/cassiopeia-signer ${DESTDIR}/usr/bin/cassiopeia-signer
86         ${INSTALL_DIR} ${DESTDIR}/etc/cacert/cassiopeia
87
88 .PHONY: libs
89 libs: ${LIBS}
90
91 .PHONY: openssl
92 openssl:
93         ${MAKE} -C lib openssl
94
95 .PHONY: collissiondetect
96 collissiondetect:
97         ${MAKE} -C lib/collissiondetect
98
99 # --------
100
101 cassiopeia: bin/cassiopeia bin/cassiopeia-signer
102
103 bin/cassiopeia: libs ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
104         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -lmysqlclient -o $@ ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
105
106 bin/cassiopeia-signer: libs ${FS_OBJ} ${OBJ_DIR}/apps/signer.lo
107         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -o $@ $(filter-out ${OBJ_DIR}/db/mysql.lo,${FS_OBJ}) ${OBJ_DIR}/apps/signer.lo
108
109 ${DEP_DIR}/%.d: ${SRC_DIR}/%.cpp
110         ${MKDIR} $(shell dirname $@) && $(CXX_DEP) $(CXXFLAGS) -M -MF $@ $<
111 ${DEP_DIR}/%.d: ${SRC_DIR}/%.c
112         ${MKDIR} $(shell dirname $@) && $(CC) $(CXXFLAGS) -M -MF $@ $<
113
114 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.c ${DEP_DIR}/%.d
115         ${MKDIR} $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
116 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.cpp ${DEP_DIR}/%.d
117         ${MKDIR} $(shell dirname $@) && $(CXX) $(CXXFLAGS) -o $@ -c $<
118
119 -include $(FS_DEP)