-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
84 lines (60 loc) · 1.92 KB
/
Copy pathMakefile
File metadata and controls
84 lines (60 loc) · 1.92 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
CC := cc
AR := ar
CFLAGS := -Iinclude -Isrc -std=c11 -Wall -Wextra -Wpedantic -O2 -MMD -MP
LDFLAGS :=
DEBUGGER := lldb
BIN := bitcask
LIB := libbitcask.a
SRC := $(wildcard src/*.c)
LIB_SRC := $(filter-out src/main.c,$(SRC))
OBJ := $(SRC:.c=.o)
DEP := $(OBJ:.o=.d)
DATA_DIR := data
BENCHMARK_BIN := benchmark_runner
BENCHMARK_OBJ := benchmark.o $(LIB_SRC:.c=.benchmark.o)
BENCHMARK_CFLAGS := $(CFLAGS)
BENCHMARK_DEP := $(BENCHMARK_OBJ:.o=.d)
TEST_BIN := test_runner
TEST_SRC := $(wildcard tests/*.c tests/vendor/unity/*.c)
TEST_OBJ := $(LIB_SRC:.c=.test.o)
TEST_CFLAGS := $(CFLAGS) -Itests/vendor/unity -g -O0 -fsanitize=address,undefined
TEST_DEP := $(TEST_OBJ:.o=.d) $(TEST_DEBUG_OBJ:.o=.d)
.PHONY: all run benchmark test clean debug debug_test test_watch
all: $(BIN) $(LIB)
$(LIB): $(LIB_SRC:.c=.o)
$(AR) rcs $@ $^
$(BIN): $(OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
$(BENCHMARK_BIN): $(BENCHMARK_OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
benchmark.o: benchmark.c
$(CC) $(BENCHMARK_CFLAGS) -c -o $@ $<
%.benchmark.o: %.c
$(CC) $(BENCHMARK_CFLAGS) -c -o $@ $<
benchmark: $(BENCHMARK_BIN)
run: CFLAGS += -O0 -fsanitize=address,undefined
run: LDFLAGS += -fsanitize=address,undefined
run: $(BIN)
./$(BIN) $(DATA_DIR)
debug: CFLAGS += -g -O0
debug: $(BIN)
$(DEBUGGER) ./$(BIN) $(DATA_DIR)
%.test.o: %.c
$(CC) $(TEST_CFLAGS) -c -o $@ $<
%.debug_test.o: %.c
$(CC) $(TEST_DEBUG_CFLAGS) -c -o $@ $<
%.sanitize_test.o: %.c
$(CC) $(TEST_SANITIZE_CFLAGS) -c -o $@ $<
$(TEST_BIN): $(TEST_SRC) $(TEST_OBJ)
$(CC) $(TEST_CFLAGS) -o $@ $^ $(LDFLAGS)
test: $(TEST_BIN)
./$(TEST_BIN)
debug_test: $(TEST_BIN)
$(DEBUGGER) ./$(TEST_BIN)
test_watch: $(TEST_BIN)
rg --files -g '*.c' -g '*.h' -g Makefile | entr -c make test
clean:
rm -f $(BIN) $(LIB) $(BENCHMARK_BIN) $(TEST_BIN) $(OBJ) $(BENCHMARK_OBJ) $(TEST_OBJ) $(TEST_DEBUG_OBJ) $(DEP) $(BENCHMARK_DEP) $(TEST_DEP)
-include $(DEP) $(BENCHMARK_DEP) $(TEST_DEP)