-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
124 lines (107 loc) · 2.62 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
VERSION = 1
PATCH = 3
CLI_VERSION = 1
CLI_PATCH = 0
.EXPORT_ALL_VARIABLES:
.PHONY: build
build: __build
ifeq ($(VERBOSE),1)
Q =
else
Q = @
COVFLAGS = -q
endif
SHELL := bash
FMT_OD := "$(shell tput bold)
FMT_DO := $(shell tput sgr0)\n"
CC := gcc
CXX := g++
CFLAGS := -Wall -Wextra -flto
ifeq ($(DEBUG),1)
CFLAGS += -Og -g3
else
CFLAGS += -O3
endif
CLIBS :=
ifeq ($(WITH_LIBUV),1)
CLIBS += -luv
CFLAGS += -DLIBUV
endif
ifeq ($(COVERAGE),1)
CFLAGS += --coverage
endif
CLIBS += -pthread#-lssl -lcrypto
DIR_TOP := $(shell pwd)
DIR_OUT := $(DIR_TOP)/bin
DIR_TEST := $(DIR_TOP)/tests
DIR_DEPS := $(DIR_OUT)/deps
DIR_HEADERS := $(DIR_TOP)/include
DIR_INCLUDE := /usr/local/include
DIR_LIB := /usr/local/lib
DIR_COV := $(DIR_TOP)/coverage
DIR_BIN := /usr/local/bin
${DIR_OUT} ${DIR_DEPS} ${DIR_INCLUDE}/shnet \
${DIR_LIB} ${DIR_COV} ${DIR_BIN}:
$(Q)mkdir -p $@
.PHONY: _build
_build: | $(DIR_OUT) $(DIR_DEPS)
$(Q)chmod +x $(DIR_TOP)/sed_in
$(Q)$(DIR_TOP)/sed_in
$(Q)$(MAKE) -C $(DIR_TOP)/src
$(Q)$(MAKE) -C $(DIR_TOP)/cli
.PHONY: __build
ifeq ($(STATIC),1)
__build: _build $(DIR_OUT)/src/libshnet.a \
$(DIR_OUT)/cli/shnet.exe
else
__build: _build $(DIR_OUT)/src/libshnet.so \
$(DIR_OUT)/cli/shnet.exe
endif
@printf $(FMT_OD)Building complete.$(FMT_DO)
.PHONY: install
install: build | $(DIR_LIB) $(DIR_BIN) $(DIR_INCLUDE)/shnet
ifeq ($(STATIC),1)
$(Q)$(RM) $(DIR_LIB)/libshnet.so
$(Q)install $(DIR_OUT)/src/libshnet.a $(DIR_LIB)/
else
$(Q)$(RM) $(DIR_LIB)/libshnet.a
$(Q)install $(DIR_OUT)/src/libshnet.so $(DIR_LIB)/
endif
$(Q)ldconfig $(DIR_LIB)
$(Q)cp -r $(DIR_HEADERS)/shnet $(DIR_INCLUDE)/
$(Q)install $(DIR_OUT)/cli/shnet $(DIR_BIN)/
@printf $(FMT_OD)Installation complete.$(FMT_DO)
.PHONY: test
ifeq ($(COVERAGE),1)
test: build | $(DIR_COV)
$(Q)$(RM) $(shell find $(DIR_OUT)/src -name *.gcda)
else
test: build
endif
ifneq ($(PRESERVE_TESTS),1)
$(Q)$(RM) -r $(DIR_OUT)/tests
endif
$(Q)$(MAKE) -C $(DIR_TEST)
ifeq ($(COVERAGE),1)
$(Q)lcov $(COVFLAGS) -c -o $(DIR_COV)/coverage.info \
-d $(DIR_OUT)/src
$(Q)genhtml $(DIR_COV)/coverage.info \
$(COVFLAGS) -o $(DIR_COV)
@printf $(FMT_OD)Coverage in file://$(DIR_COV)/index.html$(FMT_DO)
endif
@printf $(FMT_OD)Testing complete.$(FMT_DO)
.PHONY: clean
clean:
$(Q)$(RM) -r $(DIR_DEPS) $(DIR_OUT) $(DIR_COV)
$(Q)chmod +x $(DIR_TOP)/unsed_in
$(Q)$(DIR_TOP)/unsed_in
@printf $(FMT_OD)Clean complete.$(FMT_DO)
.PHONY: uninstall
uninstall:
$(Q)$(RM) -r $(DIR_INCLUDE)/shnet $(DIR_BIN)/shnet \
$(DIR_LIB)/libshnet.so $(DIR_LIB)/libshnet.a
@printf $(FMT_OD)Uninstall complete.$(FMT_DO)
.PHONY: help
help:
$(Q)cat INSTALL
include Rules.make