-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
110 lines (87 loc) · 2.72 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# See LICENSE file for license and copyright information
include config.mk
include common.mk
INCS = -I .
LIBS = -lm
CFLAGS += -std=c99 -pedantic -Wall -Wno-format-zero-length -Wextra $(INCS)
DFLAGS ?= -g
ifneq (${DEBUG},0)
CFLAGS += ${DFLAGS}
else
CPPFLAGS += -DNDEBUG
endif
ifneq ($(COVERAGE),0)
CFLAGS += -fprofile-arcs -ftest-coverage
LDFLAGS += -fprofile-arcs -ftest-coverage
LIBS += -lgcov
endif
ifeq ($(TARGET),i386)
CFLAGS += -m32
LDFLAGS += -m32
else
ifeq ($(TARGET),x86_64)
CFLAGS += -m64
LDFLAGS += -m64
else
$(error "Unkown target platform")
endif
endif
ifeq ($(strip $(REGISTRY_SOURCE)), )
$(error "No registry source files specified")
endif
ifeq ($(strip $(SERVER_SOURCE)), )
$(error "No server source files specified")
endif
ifeq ($(strip $(COMMUNICATION_SOURCE)), )
$(error "No communication source files specified")
endif
REGISTRY = registry
REGISTRY_OBJECTS = $(patsubst %.c, %.o, $(REGISTRY_SOURCE))
REGISTRY_GCDA = $(patsubst %.c, %.gcda, $(REGISTRY_SOURCE))
REGISTRY_GCNO = $(patsubst %.c, %.gcno, $(REGISTRY_SOURCE))
SERVER = server
SERVER_OBJECTS = $(patsubst %.c, %.o, $(SERVER_SOURCE))
SERVER_GCDA = $(patsubst %.c, %.gcda, $(SERVER_SOURCE))
SERVER_GCNO = $(patsubst %.c, %.gcno, $(SERVER_SOURCE))
COMMUNICATION = communication
COMMUNICATION_OBJECTS = $(patsubst %.c, %.o, $(COMMUNICATION_SOURCE))
COMMUNICATION_GCDA = $(patsubst %.c, %.gcda, $(COMMUNICATION_SOURCE))
COMMUNICATION_GCNO = $(patsubst %.c, %.gcno, $(COMMUNICATION_SOURCE))
all: options ${REGISTRY} ${SERVER} ${COMMUNICATION}
options:
@echo build options:
@echo "CFLAGS = ${CFLAGS}"
@echo "LIBS = ${LIBS}"
@echo "CC = ${CC}"
@echo "DEBUG = ${DEBUG}"
@echo "COVERGE = ${COVERAGE}"
@echo "TARGET = ${TARGET}"
%.o: %.c
$(ECHO) CC $<
@mkdir -p .depend/$(dir $(abspath $@))
$(QUIET)${CC} -c ${CPPFLAGS} ${CFLAGS} -o $@ $< -MMD -MF .depend/$(abspath $@).dep
${SERVER_OBJECTS}: config.mk
${REGISTRY_OBJECTS}: config.mk
${COMMUNICATION_OBJECTS}: config.mk
${REGISTRY}: lib${REGISTRY}.a
${SERVER}: lib${SERVER}.a
${COMMUNICATION}: lib${COMMUNICATION}.a
lib${REGISTRY}.a: ${REGISTRY_OBJECTS}
$(ECHO) AR rcs $@
$(QUIET)ar rcs $@ ${REGISTRY_OBJECTS}
lib${SERVER}.a: ${SERVER_OBJECTS}
$(ECHO) AR rcs $@
$(QUIET)ar rcs $@ ${SERVER_OBJECTS}
lib${COMMUNICATION}.a: ${COMMUNICATION_OBJECTS}
$(ECHO) AR rcs $@
$(QUIET)ar rcs $@ ${COMMUNICATION_OBJECTS}
doc:
$(QUIET)doxygen Doxyfile
clean:
$(QUIET)rm -rf ${REGISTRY_OBJECTS} ${SERVER_OBJECTS} ${COMMUNICATION_OBJECTS} \
lib${REGISTRY}.a lib${SERVER}.a lib${COMMUNICATION}.a doc \
${COMMUNICATION_GCDA} ${COMMUNICATION_GCNO} \
${SERVER_GCDA} ${SERVER_GCNO} \
${REGISTRY_GCDA} ${REGISTRY_GCNO}
-include $(wildcard .depend/*.dep)
.PHONY: all options ${REGISTRY} ${SERVER} ${COMMUNICATION} doc clean