-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGNUmakefile
108 lines (72 loc) · 2.1 KB
/
GNUmakefile
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
CC=cc
OS := $(shell uname -s)
CFLAGS=
ifeq ($(OS),Darwin)
LD_CONFIG_COMMAND =
SHARED_LIB_EXT = .dylib
else
LD_CONFIG_COMMAND = ldconfig
SHARED_LIB_EXT = .so
endif
ifdef WITH_PTHREAD
CFLAGS += -pthread
endif
ifndef WITH_DEBUG
CFLAGS += -DNDEBUG
CFLAGS += -O3
else
CFLAGS += -g
endif
ifdef WITH_COMPRESSION
CFLAGS += -DWITH_COMPRESSION
endif
ifdef WS_TIMERS_DEFAULT_SZ
CFLAGS += -DWS_TIMERS_DEFAULT_SZ=$(WS_TIMERS_DEFAULT_SZ)
endif
CFLAGS += -flto -Wpedantic -Wall -Wextra -Wsign-conversion -Wconversion -I./src
LIB_NAME=ws
SHARED_LIB=lib$(LIB_NAME)$(SHARED_LIB_EXT)
STATIC_LIB=lib$(LIB_NAME).a
SRC=./src/ws.c
HDR=ws.h
SOBJ=$(SRC:.c=.o)
DOBJ=$(SRC:.c=.d.o)
PREFIX=/usr/local
INSTALL_LIB_PATH=$(PREFIX)/lib
INSTALL_INCLUDE_PATH=$(PREFIX)/include
.PHONY: all clean install uninstall
all: $(SHARED_LIB) $(STATIC_LIB)
$(SOBJ): $(SRC)
$(CC) $(CFLAGS) -c $< -o $@
$(DOBJ): $(SRC)
$(CC) $(CFLAGS) -fPIC -c $< -o $@
$(SHARED_LIB): $(DOBJ)
$(CC) $(CFLAGS) -fPIC -shared -o $@ $^ $(if $(WITH_COMPRESSION),-lz)
$(STATIC_LIB): $(SOBJ)
ar rcs $@ $^
install: clean uninstall all
install -m 644 $(SHARED_LIB) $(INSTALL_LIB_PATH)
install -m 644 $(STATIC_LIB) $(INSTALL_LIB_PATH)
$(LD_CONFIG_COMMAND)
install -m 644 ./src/$(HDR) $(INSTALL_INCLUDE_PATH)
uninstall:
rm -f $(INSTALL_LIB_PATH)/$(SHARED_LIB)
rm -f $(INSTALL_LIB_PATH)/$(STATIC_LIB)
rm -f $(INSTALL_INCLUDE_PATH)/$(HDR)
$(LD_CONFIG_COMMAND)
clean:
rm -f $(SOBJ) $(DOBJ) $(SHARED_LIB) $(STATIC_LIB)
echo: install
$(CC) ./examples/echo.c -flto -lws -O3 -Wall --pedantic -o server
multi_echo: install
$(CC) ./examples/multi_echo.c -flto -lws -O3 -Wall --pedantic -o server
online: install
$(CC) ./examples/online.c -flto -lws -O3 -Wall --pedantic -o server
broadcast: install
$(CC) ./examples/broadcast.c -flto -lws -O3 -Wall --pedantic -o server
multi_broadcast: install
$(CC) -pthread ./examples/multi_broadcast.c -flto -lws -O3 -Wall --pedantic -o server
autobahn: install
$(CC) ./test/autobahn/autobahn.c -flto -lws -O3 -Wall --pedantic -o server
async_task_io:
$(CC) -pthread ./src/*.c ./test/e2e/async_task_io.c -lz -O3 -Wall --pedantic -o server