-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
107 lines (84 loc) · 2.91 KB
/
Makefile
File metadata and controls
107 lines (84 loc) · 2.91 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
GENINFO ?= geninfo
GENHTML ?= genhtml
BUILDDIR ?= $(shell pwd)
REAL_BUILDDIR = $(abspath $(BUILDDIR))
SRCDIR = $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
CFLAGS += -D_DEFAUT_SOURCE
CFLAGS += -Wall -Wextra -Werror --pedantic-errors
CFLAGS += -I$(SRCDIR)/src
TESTCFLAGS = -DTEST -Og -g --coverage -I$(SRCDIR)/src -I$(SRCDIR)/libtap
SRCS = $(SRCDIR)/src/alloc.c \
$(SRCDIR)/src/bbcode.c \
$(SRCDIR)/src/error.c \
$(SRCDIR)/src/main.c \
$(SRCDIR)/src/parse.c \
$(SRCDIR)/src/unicode.c \
$(SRCDIR)/src/utf8.c
OBJS = $(patsubst $(SRCDIR)/%.c, $(REAL_BUILDDIR)/%.o, $(SRCS))
DEPS = $(patsubst $(SRCDIR)/%.c, $(REAL_BUILDDIR)/%.d, $(SRCS))
BIN = $(REAL_BUILDDIR)/osu-bbcode
TESTS = $(patsubst $(SRCDIR)/t/test-%.c, $(REAL_BUILDDIR)/t/%.test, $(wildcard $(SRCDIR)/t/test-*.c))
TESTDEPS = $(patsubst $(SRCDIR)/t/test-%.c, $(REAL_BUILDDIR)/t/test-%.d, $(wildcard $(SRCDIR)/t/test-*.c))
$(BIN): $(OBJS)
@printf "%b" " \033[0;34mLD\t\033[0;35m$@\033[m\n"
@$(CC) $(OBJS) -o $@ $(LDFLAGS)
define execute
$(1)
endef
define exec_valgrind
valgrind --error-exitcode=42 --leak-check=full $(1)
endef
$(REAL_BUILDDIR)/t/%.test: $(SRCDIR)/t/test-%.c $(SRCS) $(SRCDIR)/libtap/tap.c $(SRCDIR)/t/common.c
@printf "%b" " \033[0;34mCC\t\033[0;36m$@\033[m\n"
@mkdir -p $(@D)
@$(CC) $(TESTCFLAGS) -o $@ $^
.PHONY: check
check: $(TESTS)
$(foreach t, $(TESTS), $(call execute, $(t)))
.PHONY: probe
prove: $(TESTS)
prove $(TESTS)
.PHONY: memcheck
memcheck: $(TESTS)
$(foreach t, $(TESTS), $(call exec_valgrind, $(t)))
.PHONY: coverage
coverage: $(TESTS)
@$(foreach t, $(TESTS), $(call execute, $(t)))
@printf "%b" " \033[0;34mGENINFO\t\033[0;36m$(REAL_BUILDDIR)/coverage.info\033[m\n"
@$(GENINFO) $(REAL_BUILDDIR)/t -b $(SRCDIR) -o $(REAL_BUILDDIR)/coverage.info
@printf "%b" " \033[0;34mGENHTML\t\033[0;36m$(REAL_BUILDDIR)/coverage\033[m\n"
@$(GENHTML) $(REAL_BUILDDIR)/coverage.info -o $(REAL_BUILDDIR)/coverage
.PHONY: all
all: $(BIN)
.PHONY: clean
clean:
@$(RM) $(BIN)
@$(RM) $(OBJS)
@$(RM) $(DEPS)
@$(RM) $(TESTS)
@$(RM) $(TESTDEPS)
@$(RM) $(REAL_BUILDDIR)/t/*.gcda
@$(RM) $(REAL_BUILDDIR)/t/*.gcno
@$(RM) $(REAL_BUILDDIR)/coverage.info
@$(RM) -r $(REAL_BUILDDIR)/coverage
.PHONY: veryclean
veryclean: clean
@$(RM) compile_commands.json
.PHONY: lsp
lsp: $(SRCDIR)/compile_commands.json
$(SRCDIR)/compile_commands.json: $(SRCS)
@bear -- make -B
$(REAL_BUILDDIR)/%.o: $(SRCDIR)/%.c
@printf "%b" " \033[0;34mCC\t\033[0;36m$@\033[m\n"
@mkdir -p $(@D)
@$(CC) $(CPPFLAGS) $(CFLAGS) -c $^ -o $@
test-%.d: test-%.c
@printf "%b" " \033[0;34mMKDEP\t\033[0;36m$@\033[m\n"
@$(CC) -MM $(TESTCFLAGS) $^ -MF $@
%.d: %.c
@printf "%b" " \033[0;34mMKDEP\t\033[0;36m$@\033[m\n"
@$(CC) -MM $(CFLAGS) $^ -MF $@
-include $(DEPS)
-include $(TESTDEPS)
force_look:
@true