1QUIET_CC  = @echo '   ' CC  ' ' $@;
2
3AT=@
4
5SOURCES = $(wildcard *.c)
6
7HEADERS = $(wildcard ../*.h)
8TEST_HEADERS = $(wildcard *.h)
9
10OBJS = $(patsubst %.c, $(BUILD_DIR)/$(MOD_DIR)_%.o, $(SOURCES))
11
12LOBJS = $(patsubst %.c, $(BUILD_DIR)/%.lo, $(SOURCES))
13MOD_LOBJ = $(BUILD_DIR)/../$(MOD_DIR).lo
14
15TEST_SOURCES = $(wildcard test/*.c)
16TESTXX_SOURCES = $(wildcard test/*.cpp)
17
18PROF_SOURCES = $(wildcard profile/*.c)
19
20TUNE_SOURCES = $(wildcard tune/*.c)
21
22TESTS = $(patsubst %.c, $(BUILD_DIR)/%$(EXEEXT), $(TEST_SOURCES)) \
23        $(patsubst %.cpp, $(BUILD_DIR)/%$(EXEEXT), $(TESTXX_SOURCES))
24
25TESTS_RUN = $(patsubst %, %_RUN, $(TESTS))
26
27VALGRIND_RUN = $(patsubst %, %_VALGRIND_RUN, $(TESTS))
28
29PROFS = $(patsubst %.c, $(BUILD_DIR)/%$(EXEEXT), $(PROF_SOURCES))
30
31TUNE = $(patsubst %.c, %$(EXEEXT), $(TUNE_SOURCES))
32
33all: shared static
34
35shared: $(MOD_LOBJ)
36
37static: $(OBJS)
38
39profile: $(PROFS)
40
41-include $(patsubst %, %.d, $(PROFS))
42
43$(BUILD_DIR)/profile/%$(EXEEXT): profile/%.c $(BUILD_DIR)/../profiler.o
44	$(QUIET_CC) $(CC) $(ABI_FLAG) -O2 -std=c99 -g $(INCS) $< $(BUILD_DIR)/../profiler.o -o $@ $(LIBS)  -MMD -MP -MF $@.d -MT "$@" -MT "$@.d"
45
46tune: $(TUNE_SOURCES) $(HEADERS)
47	$(AT)$(foreach prog, $(TUNE), $(CC) $(CFLAGS) $(INCS) $(prog).c -o $(BUILD_DIR)/$(prog) $(LIBS) || exit $$?;)
48
49-include $(OBJS:.o=.d)
50
51$(BUILD_DIR)/$(MOD_DIR)_%.o: %.c
52	$(QUIET_CC) $(CC) $(CFLAGS) $(INCS) -c $< -o $@ -MMD -MP -MF "$(BUILD_DIR)/$(MOD_DIR)_$*.d" -MT "$(BUILD_DIR)/$(MOD_DIR)_$*.d" -MT "$@"
53
54$(MOD_LOBJ): $(LOBJS)
55	$(QUIET_CC) $(CC) $(ABI_FLAG) -r $^ -o $@ -nostdlib
56
57-include $(LOBJS:.lo=.d)
58
59$(BUILD_DIR)/%.lo: %.c
60	$(QUIET_CC) $(CC) $(PIC_FLAG) $(CFLAGS) $(INCS) -c $< -o $@ -MMD -MP -MF "$(BUILD_DIR)/$*.d" -MT "$(BUILD_DIR)/$*.d" -MT "$@"
61
62clean:
63	rm -rf $(BUILD_DIR) $(MOD_LOBJ)
64
65tests: $(TESTS)
66
67check: tests $(TESTS_RUN)
68
69valgrind: tests $(VALGRIND_RUN)
70
71-include $(patsubst %, %.d, $(TESTS))
72
73ifeq ($(ANTIC_SHARED), 0)
74$(BUILD_DIR)/test/%$(EXEEXT): $(BUILD_DIR)/../../libantic.a
75endif
76
77$(BUILD_DIR)/test/%$(EXEEXT): test/%.c
78	$(QUIET_CC) $(CC) $(CFLAGS) $(INCS) $< -o $@ $(LIBS) -MMD -MP -MF $@.d -MT "$@" -MT "$@.d"
79
80$(BUILD_DIR)/test/%$(EXEEXT): test/%.cpp $(BUILD_DIR)/../../test_helpers.o
81	$(QUIET_CC) $(CXX) $(CFLAGS) $(INCS) $< -o $@ $(LIBS) -MMD -MP -MF $@.d -MT "$@" -MT "$@.d"
82
83%_RUN: %
84	@$<
85
86%_VALGRIND_RUN: %
87	valgrind --track-origins=yes --leak-check=full --show-reachable=yes --log-file="$*.valgrind" $<
88
89.PHONY: profile tune clean check tests all shared static valgrind %_RUN %_VALGRIND_RUN
90