-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
71 lines (52 loc) · 1.64 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
SRCDIR = src
BINBASEDIR = bin
BINDIR = $(BINBASEDIR)/release
DEBUGDIR = $(BINBASEDIR)/debug
BIN = libmya.so
CLFAGS = -std=c11 \
-Wall \
-Werror \
-pedantic-errors \
-fPIC \
-O2 \
-DTCOLORS \
-I "src/include"
TESTDIR = tests
TESTOBJ = $(BINBASEDIR)/unity.o
SRCLIST = $(shell find $(SRCDIR) -iname '*.c')
OBJLIST = $(subst .c,.o,$(subst $(SRCDIR)/,$(BINDIR)/,$(SRCLIST)))
OBJSUBDIRS = $(dir $(OBJLIST))
TESTLIST = $(shell find $(TESTDIR) -iname "test_*.c")
TESTBINLIST = $(basename $(notdir $(TESTLIST)))
MAKEFLAGS += --no-print-directory
$(BIN): create_bin_dirs $(OBJLIST)
@echo "$(OBJLIST) -> $(BINDIR)/$(BIN)"
@$(CC) $(CLFAGS) $(EXTRA_FLAGS) $(OBJLIST) -shared -o "$(BINDIR)/$(BIN)"
$(BINDIR)/%.o: $(SRCDIR)/%.c
@echo "$< -> $@"
@$(CC) $(CLFAGS) $(EXTRA_FLAGS) -c "$<" -o "$@"
.PHONY: debug
debug:
@$(MAKE) EXTRA_FLAGS=-g3 BINDIR=$(DEBUGDIR)
.PHONY: create_bin_dirs
create_bin_dirs:
@mkdir -p $(OBJSUBDIRS)
.PHONY: clean
clean:
rm -rf $(BINBASEDIR)
.PHONY: test-all
test-all: $(TESTBINLIST)
test_%: CLFAGS += -g3 -fsanitize=address -I "$(TESTDIR)/include"
test_%: $(TESTOBJ) create_bin_dirs $(OBJLIST)
$(eval TEST_MODULE = $(shell find $(TESTDIR) -name "[email protected]"))
@[ -z "$(TEST_MODULE)" ] && echo "Test module '[email protected]' not found!" >&2 && exit 1 || exit 0
@echo
@echo "$(TEST_MODULE) -> $(BINBASEDIR)/$@"
@$(CC) $(CLFAGS) -c "$(TEST_MODULE)" -o "$(BINBASEDIR)/[email protected]"
@$(CC) $(CLFAGS) $(OBJLIST) $(TESTOBJ) "$(BINBASEDIR)/[email protected]" -o "$(BINBASEDIR)/$@"
@echo "-----------------------"
@./$(BINBASEDIR)/$@
$(TESTOBJ): CLFAGS += -I "$(TESTDIR)/include"
$(TESTOBJ): $(TESTDIR)/unity.c create_bin_dirs
@echo "$< -> $@"
@$(CC) $(CLFAGS) -c "$<" -o "$@"