-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMakefile
123 lines (87 loc) · 3.81 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
CC = gcc
ECHO = echo
PROJECTNAME = dyco
SUB_DIR = src/ example/
ROOT_DIR = $(shell pwd)
OBJS_DIR = $(ROOT_DIR)/objs
BIN_DIR = $(ROOT_DIR)/bin
LIB_DIR = $(ROOT_DIR)/lib
SRC_DIR = $(ROOT_DIR)/src
HDR_DIR = $(ROOT_DIR)/include
OBJS = $(patsubst %.c, %.o, $(notdir $(wildcard $(SRC_DIR)/*.c)))
OBJS += $(patsubst %.S, %.o, $(notdir $(wildcard $(SRC_DIR)/*.S)))
HDR_DIR_INSTALL_DIR = /usr/local/include
LIB = libdyco.so
LIB_INSTALL_DIR = /usr/local/lib
BIN = socket_server_example socket_client_example epoll_example sleep_example setstack_example signal_example stop_abort_example channel_example waitgroup_example pubsub_example semaphore_example multithread_example coropool_example asymmetric_example stack_dont_overflow_example
FLAG = -O3 -lpthread -ldl -I $(HDR_DIR)
SSLFLAG = -lssl -lcrypto -D DYCO_SSL_OK
HASSSL := $(shell if [ -d /usr/local/include/openssl ] || [ -d /usr/include/openssl ]; then echo 1; fi)
HASRDS := $(shell if [ -d /usr/local/include/hiredis ] || [ -d /usr/include/hiredis ]; then echo 1; fi)
ifdef HASRDS
BIN += network_example
endif
ifdef HASSSL
BIN += ssl_server_example ssl_client_example
FLAG += $(SSLFLAG)
endif
export CC BIN_DIR OBJS_DIR ROOT_DIR FLAG BIN ECHO LIB_DIR
all : PREPARE $(SUB_DIR) $(BIN) $(LIB)
.PHONY : all clean
PREPARE:
mkdir -p $(OBJS_DIR) $(BIN_DIR) $(LIB_DIR)
$(SUB_DIR) : ECHO
make -C $@
ECHO :
@echo $(SUB_DIR)
socket_server_example : $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/socket_server.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
socket_client_example : $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/socket_client.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
epoll_example : $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/epoll.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
sleep_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/sleep.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
setstack_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/setstack.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
signal_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/signal.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
stop_abort_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/stop_abort.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
channel_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/channel.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
waitgroup_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/waitgroup.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
pubsub_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/pubsub.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
semaphore_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/semaphore.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
network_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/network.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG) -lhiredis
ssl_server_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/ssl_server.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
ssl_client_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/ssl_client.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
multithread_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/multithread.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
coropool_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/coropool.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
asymmetric_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/asymmetric.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
stack_dont_overflow_example: $(addprefix $(OBJS_DIR)/, $(OBJS)) $(OBJS_DIR)/stack_dont_overflow.o
$(CC) -o $(BIN_DIR)/$@ $^ $(FLAG)
$(LIB): $(addprefix $(LIB_DIR)/, $(OBJS))
$(CC) -shared -o $(LIB_DIR)/$@ $^ $(FLAG)
install: $(LIB)
cp $(LIB_DIR)/$(LIB) $(LIB_INSTALL_DIR)
cp -r $(HDR_DIR)/$(PROJECTNAME) $(HDR_DIR_INSTALL_DIR)
ldconfig
rm -rf *.o *.so*
echo "Installing done."
uninstall:
rm -rf $(LIB_INSTALL_DIR)/$(LIB)
rm -rf $(HDR_DIR_INSTALL_DIR)/$(PROJECTNAME)
ldconfig
echo "Uninstalling done."
clean:
rm -rf $(BIN_DIR)/* $(OBJS_DIR)/* $(LIB_DIR)/*