-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
100 lines (86 loc) · 2.67 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
CC := gcc
PREFIX := /usr/local
INCLUDEDIR := $(PREFIX)/include
LINK_TYPE := -shared
BUILD_ARGS := -O3 \
-Werror -Wall -pedantic
DEBUG_BUILD := -g \
-Werror -Wall -pedantic -pthread
TEST_BUILD_ARGS := -ggdb \
-Werror -Wall -fstrict-aliasing -Wstrict-aliasing -fsanitize=thread -fno-sanitize-recover=all -pthread
LIBDIR := $(PREFIX)/lib
ifeq ($(OS),Windows_NT)
TEST_OUT := test
BENCH_OUT := bench
TEST_BUILD_ARGS := -ggdb \
-Werror -Wall -fstrict-aliasing -Wstrict-aliasing
else
DESTDIR := `pwd`
BENCH_OUT := bench.out
TEST_OUT := test.out
BUILD_ARGS += -fPIC
DEBUG_BUILD += -fsanitize=address -fPIC
endif
VALGRIND_CMD := valgrind -s --track-origins=yes --leak-check=yes --leak-check=full --show-leak-kinds=all
ifneq ($(OS),Windows_NT)
alloc.so: alloc.o mmap.o threading.o
@mkdir -p $(DESTDIR)/build
$(CC) $(BUILD_ARGS) $(LINK_TYPE) -pthread alloc.o mmap.o threading.o -o alloc.so
@mv $(DESTDIR)/alloc.so $(DESTDIR)/build
else
alloc.so: alloc.o mmap.o threading.o
$(CC) $(BUILD_ARGS) $(LINK_TYPE) alloc.o mmap.o threading.o -o alloc.so
endif
debug: alloc.o mmap.o threading.o
@mkdir -p $(DESTDIR)/build
$(CC) $(DEBUG_BUILD) $(LINK_TYPE) alloc.o mmap.o threading.o -o alloc.so.0
@mv $(DESTDIR)/alloc.so.0 $(DESTDIR)/build
ifneq ($(OS),Windows_NT)
test1:
$(CC) $(TEST_BUILD_ARGS) test_alloc.c alloc.c mmap.c threading.c -o $(TEST_OUT)
@mkdir -p $(DESTDIR)/build/bin
@cp $(TEST_OUT) $(DESTDIR)/build/bin
@$(DESTDIR)/build/bin/$(TEST_OUT)
@rm $(TEST_OUT)
bench:
$(CC) -g -O3 -Wall -Werror -Wextra -pthread bench_alloc.c alloc.c mmap.c threading.c -o $(BENCH_OUT)
@mkdir -p $(DESTDIR)/build/bin
@cp $(BENCH_OUT) $(DESTDIR)/build/bin
@$(DESTDIR)/build/bin/$(BENCH_OUT)
@rm $(BENCH_OUT)
else
test1:
$(CC) $(TEST_BUILD_ARGS) test_alloc.c alloc.c mmap.c threading.c -o $(TEST_OUT)
bench:
$(CC) -g -O3 -Wall -Werror -Wextra bench_alloc.c alloc.c mmap.c threading.c -o $(BENCH_OUT)
endif
%.o: %.c
$(CC) -fPIC -c '$<' -o '$@'
ifneq ($(OS),Windows_NT)
memcheck:
$(CC) $(TEST_BUILD_ARGS) test_alloc.c alloc.c mmap.c -o $(TEST_OUT)
@mkdir -p $(DESTDIR)/build/bin
@cp $(TEST_OUT) $(DESTDIR)/build/bin
@$(VALGRIND_CMD) $(DESTDIR)/build/bin/$(TEST_OUT)
@rm $(TEST_OUT)
install: alloc.so
@mkdir -p $(LIBDIR)
@mkdir -p $(INCLUDEDIR)
@cp $(DESTDIR)/build/alloc.so $(LIBDIR)/liballoc.so
@chmod 755 $(LIBDIR)/liballoc.so
@cp alloc.h $(INCLUDEDIR)/alloc.h
@cp threading.h $(INCLUDEDIR)/threading.h
@chmod 644 $(INCLUDEDIR)/alloc.h
@chmod 644 $(INCLUDEDIR)/threading.h
uninstall:
@rm -f $(LIBDIR)/liballoc.so
@rm -f $(INCLUDEDIR)/alloc.h
@rm -f $(INCLUDEDIR)/threading.h
endif
ifeq ($(OS),Windows_NT)
clean:
del *.o *.gch *.exe *.so *.so.* *.out
else
clean:
@rm -f *.o *.gch *.exe *.so *.so.* *.out
endif