-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
107 lines (85 loc) · 3.73 KB
/
Copy pathmakefile
File metadata and controls
107 lines (85 loc) · 3.73 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
CC ?= cc
CXX ?= g++
CFLAGS ?= -O2
LDFLAGS ?=
all: jp_alloc.so jp_allocd.so
# Detect if g++ is available for the C++ operator new/delete shim
HAS_CXX := $(shell command -v $(CXX) >/dev/null 2>&1 && echo yes)
jp_alloc.so: jp_alloc.o
ifneq ($(HAS_CXX),)
jp_alloc.so: jp_alloc_cpp.o
endif
$(CC) -shared -o $@ $^
jp_allocd.so: jp_allocd.o
ifneq ($(HAS_CXX),)
jp_allocd.so: jp_alloc_cppd.o
endif
$(CC) -shared -g -ggdb -o $@ $^
%.o: %.c jp_alloc.h makefile
$(CC) -std=c11 -fpic -c $(CFLAGS) -DJP_ALLOC_IMPLEMENTATION -o $@ $<
%d.o: %.c jp_alloc.h makefile
$(CC) -std=c11 -fpic -c -g -ggdb $(CFLAGS) -DJP_ALLOC_IMPLEMENTATION -DJP_ALLOC_DEBUG -o $@ $<
# C++ operator new/delete shim (only built if g++ is available)
ifneq ($(HAS_CXX),)
jp_alloc_cpp.o: jp_alloc_cpp.cpp makefile
$(CXX) -std=c++17 -fpic -c $(CFLAGS) -o $@ $<
jp_alloc_cppd.o: jp_alloc_cpp.cpp makefile
$(CXX) -std=c++11 -fpic -c -g -ggdb $(CFLAGS) -o $@ $<
endif
# Benchmark / correctness test
bench: jpbench jpbenchd
madvise-bench: jp_madvise_none jp_madvise_dontneed jp_madvise_free
jpbench: jp_alloc.c jp_alloc_bench.c jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_IMPLEMENTATION -DJP_ALLOC_BENCH \
jp_alloc.c jp_alloc_bench.c \
-o jpbench -lpthread -lrt -lm
jpbenchd: jp_alloc.c jp_alloc_bench.c jp_alloc.h makefile
$(CC) -O1 -g -std=c11 -DJP_ALLOC_IMPLEMENTATION -DJP_ALLOC_DEBUG -DJP_ALLOC_BENCH \
jp_alloc.c jp_alloc_bench.c \
-o jpbenchd -lpthread -lrt -lm
jp_madvise_none: jp_alloc.c jp_alloc_madvise_bench.c jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_IMPLEMENTATION \
-DJP_ALLOC_MADVISE_MODE=JP_ALLOC_MADVISE_NONE \
jp_alloc.c jp_alloc_madvise_bench.c -o $@ -lpthread -lrt
jp_madvise_dontneed: jp_alloc.c jp_alloc_madvise_bench.c jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_IMPLEMENTATION \
-DJP_ALLOC_MADVISE_MODE=JP_ALLOC_MADVISE_DONTNEED \
jp_alloc.c jp_alloc_madvise_bench.c -o $@ -lpthread -lrt
jp_madvise_free: jp_alloc.c jp_alloc_madvise_bench.c jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_IMPLEMENTATION \
-DJP_ALLOC_MADVISE_MODE=JP_ALLOC_MADVISE_FREE \
jp_alloc.c jp_alloc_madvise_bench.c -o $@ -lpthread -lrt
# Unit tests
test: jp_alloc_test jp_alloc_test_debug jp_alloc_test_k4 jp_alloc_test_madv_free
@echo "--- Running jp_alloc_test (K=0 release) ---"
./jp_alloc_test
@echo "--- Running jp_alloc_test_debug (K=0 debug) ---"
./jp_alloc_test_debug
@echo "--- Running jp_alloc_test_k4 (K=4) ---"
./jp_alloc_test_k4
@echo "--- Running jp_alloc_test_madv_free (K=4, MADV_FREE) ---"
./jp_alloc_test_madv_free
@echo "Unit tests complete (check output above for PASS/FAIL)"
jp_alloc_test: jp_alloc.c jp_alloc_test.c jp_alloc_test.h jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_TEST -DJP_ALLOC_INTERMEDIATE_K=0 \
jp_alloc_test.c \
-o jp_alloc_test -lpthread -lm
jp_alloc_test_debug: jp_alloc.c jp_alloc_test.c jp_alloc_test.h jp_alloc.h makefile
$(CC) -O1 -g -std=c11 -DJP_ALLOC_DEBUG -DJP_ALLOC_TEST \
-DJP_ALLOC_INTERMEDIATE_K=0 \
jp_alloc_test.c \
-o jp_alloc_test_debug -lpthread -lm
jp_alloc_test_k4: jp_alloc.c jp_alloc_test.c jp_alloc_test.h jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_TEST -DJP_ALLOC_INTERMEDIATE_K=4 \
jp_alloc_test.c \
-o jp_alloc_test_k4 -lpthread -lm
jp_alloc_test_madv_free: jp_alloc.c jp_alloc_test.c jp_alloc_test.h jp_alloc.h makefile
$(CC) -O2 -std=c11 -DJP_ALLOC_TEST -DJP_ALLOC_INTERMEDIATE_K=4 \
-DJP_ALLOC_MADVISE_MODE=JP_ALLOC_MADVISE_FREE \
jp_alloc_test.c \
-o jp_alloc_test_madv_free -lpthread -lm
clean:
rm -f jp_alloc.so jp_allocd.so jp_alloc.o jp_allocd.o jp_alloc_cpp.o jp_alloc_cppd.o jpbench jpbenchd \
jp_alloc_test jp_alloc_test_debug jp_alloc_test_k4 jp_alloc_test_madv_free \
jp_madvise_none jp_madvise_dontneed jp_madvise_free
.PHONY: all bench madvise-bench test clean