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