-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
86 lines (70 loc) · 1.9 KB
/
Makefile
File metadata and controls
86 lines (70 loc) · 1.9 KB
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
CC=clang
CFLAGS=-std=c11 -Weverything -Werror -Wno-format-nonliteral -Wno-cast-align -Wno-padded
# 'make DEBUG=0' disables debug mode
DEBUG ?= 1
ifeq ($(DEBUG), 1)
CFLAGS+=-O0 -g
else
CFLAGS+=-O3 -Wno-disabled-macro-expansion
endif
UNAME := $(shell uname)
# Comments about flags on Darwin vs Linux:
# https://lwn.net/Articles/590381/
ifeq ($(UNAME), Linux)
CFLAGS+=-std=c11 -D_GNU_SOURCE -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700
LIBS=-lbsd
else
#Including Darwin
CFLAGS+=-std=c11
LIBS=
endif
# gperftools
# 'make PROFILE=0' disables profiler mode
PROFILE ?= 1
ifeq ($PROFILE), 1)
LFLAGS=-lprofiler $(LIBS)
else
LFLAGS=$(LIBS)
endif
ODIR=target
BINDIR=$(ODIR)/bin
ADDRINFO_OUT=$(BINDIR)/getaddrinfo
HOSTBYNAME_OUT=$(BINDIR)/gethostbyname
HOSTBYNAME2_OUT=$(BINDIR)/gethostbyname2
SDIR=src
_ADDRINFO_OBJS=common.o getaddrinfo.o
_HOSTBYNAME_OBJS=common.o gethostbyname.o
_HOSTBYNAME2_OBJS=common.o gethostbyname2.o
ADDRINFO_OBJS=$(patsubst %,$(ODIR)/%,$(_ADDRINFO_OBJS))
HOSTBYNAME_OBJS=$(patsubst %,$(ODIR)/%,$(_HOSTBYNAME_OBJS))
HOSTBYNAME2_OBJS=$(patsubst %,$(ODIR)/%,$(_HOSTBYNAME2_OBJS))
PROFOUT=$(ODIR)/prof.out
compile: $(ADDRINFO_OUT) $(HOSTBYNAME_OUT) $(HOSTBYNAME2_OUT)
all: analyze check test
$(ODIR):
mkdir $(ODIR)
$(BINDIR):
mkdir -p $(BINDIR)
$(ADDRINFO_OUT): $(ADDRINFO_OBJS)
@$(CC) -o $@ $^ $(CFLAGS) $(LFLAGS)
$(HOSTBYNAME_OUT): $(HOSTBYNAME_OBJS)
@$(CC) -o $@ $^ $(CFLAGS) $(LFLAGS)
$(HOSTBYNAME2_OUT): $(HOSTBYNAME2_OBJS)
@$(CC) -o $@ $^ $(CFLAGS) $(LFLAGS)
$(ODIR)/%.o: $(SDIR)/%.c $(ODIR) $(BINDIR)
@$(CC) -c -o $@ $< $(CFLAGS)
clean:
rm -rf $(ODIR)
analyze:
scan-build --status-bugs --use-cc=clang make clean compile
check: compile
./tests.py
test: compile
expect docker.expect && echo "OK"
$(PROFOUT): $(OUT)
CPUPROFILE=$(PROFOUT) CPUPROFILE_REALTIME=1 $(OUT) ll
profile: $(PROFOUT)
view-profile: $(PROFOUT)
google-pprof $(OUT) $(PROFOUT)
format:
clang-format -i src/*