|
1 | 1 | RM := rm -rf
|
2 |
| -DHCP6RELAY_TARGET := dhcp6relay |
3 |
| -DHCP6RELAY_TEST_TARGET := dhcp6relay-test |
| 2 | +BUILD_DIR := build |
| 3 | +BUILD_TEST_DIR := build-test |
| 4 | +DHCP6RELAY_TARGET := $(BUILD_DIR)/dhcp6relay |
| 5 | +DHCP6RELAY_TEST_TARGET := $(BUILD_TEST_DIR)/dhcp6relay-test |
4 | 6 | CP := cp
|
5 | 7 | MKDIR := mkdir
|
6 | 8 | MV := mv
|
7 | 9 | FIND := find
|
8 | 10 | GCOVR := gcovr
|
9 |
| -GCOV_FLAGS := -fprofile-use -fprofile-arcs -ftest-coverage -fprofile-generate |
10 | 11 | override LDLIBS += -levent -lhiredis -lswsscommon -pthread -lboost_thread -lboost_system
|
11 |
| -override LDLIBS_TEST += -lgtest_main -lgtest -pthread -lstdc++fs |
12 | 12 | override CPPFLAGS += -Wall -std=c++17 -fPIE -I/usr/include/swss
|
13 | 13 | override CPPFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)"
|
| 14 | +CPPFLAGS_TEST := --coverage -fprofile-arcs -ftest-coverage -fprofile-generate |
| 15 | +LDLIBS_TEST := --coverage -lgtest_main -lgtest -pthread -lstdc++fs |
14 | 16 | PWD := $(shell pwd)
|
15 | 17 |
|
16 |
| -test-targets: CPP_FLAGS = -O0 -Wall -fmessage-length=0 -fPIC $(GCOV_FLAGS) |
17 |
| - |
18 | 18 | all: $(DHCP6RELAY_TARGET) $(DHCP6RELAY_TEST_TARGET)
|
19 | 19 |
|
| 20 | +-include src/subdir.mk |
| 21 | +-include test/subdir.mk |
| 22 | + |
| 23 | +# Use different build directories based on whether it's a regular build or a |
| 24 | +# test build. This is because in the test build, code coverage is enabled, |
| 25 | +# which means the object files that get built will be different |
| 26 | +OBJS = $(SRCS:%.cpp=$(BUILD_DIR)/%.o) |
| 27 | +TEST_OBJS = $(SRCS:%.cpp=$(BUILD_TEST_DIR)/%.o) |
| 28 | + |
20 | 29 | ifneq ($(MAKECMDGOALS),clean)
|
21 | 30 | -include $(OBJS:%.o=%.d)
|
| 31 | +-include $(TEST_OBJS:%.o=%.d) |
22 | 32 | endif
|
23 | 33 |
|
24 |
| --include src/subdir.mk |
25 |
| --include test/subdir.mk |
| 34 | +$(BUILD_DIR)/%.o: %.cpp |
| 35 | + @mkdir -p $(@D) |
| 36 | + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< |
26 | 37 |
|
27 | 38 | $(DHCP6RELAY_TARGET): $(OBJS)
|
28 | 39 | $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
|
29 | 40 |
|
30 |
| -$(DHCP6RELAY_TEST_TARGET): $(OBJS_DHCP6RELAY_TEST) |
31 |
| - $(CC) -lgcov --coverage -o "$(DHCP6RELAY_TEST_TARGET)" $(CPP_FLAGS) $(OBJS_DHCP6RELAY_TEST) $(LDLIBS) $(LDLIBS_TEST) |
| 41 | +$(BUILD_TEST_DIR)/%.o: %.cpp |
| 42 | + @mkdir -p $(@D) |
| 43 | + $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(CPPFLAGS_TEST) -c -o $@ $< |
| 44 | + |
| 45 | +$(DHCP6RELAY_TEST_TARGET): $(TEST_OBJS) |
| 46 | + $(CXX) $(LDFLAGS) $^ $(LDLIBS) $(LDLIBS_TEST) -o $@ |
| 47 | + |
| 48 | +test: $(DHCP6RELAY_TEST_TARGET) |
32 | 49 | ./$(DHCP6RELAY_TEST_TARGET)
|
33 | 50 | $(GCOVR) -r ./ --html --html-details -o $(DHCP6RELAY_TEST_TARGET)-result.html
|
34 | 51 | $(GCOVR) -r ./ --xml-pretty -o $(DHCP6RELAY_TEST_TARGET)-result.xml
|
35 | 52 |
|
| 53 | +install: $(DHCP6RELAY_TARGET) |
| 54 | + install -D $(DHCP6RELAY_TARGET) $(DESTDIR)/usr/sbin/$(notdir $(DHCP6RELAY_TARGET)) |
36 | 55 |
|
37 |
| -install: |
38 |
| - $(MKDIR) -p $(DESTDIR)/usr/sbin |
39 |
| - $(MV) $(DHCP6RELAY_TARGET) $(DESTDIR)/usr/sbin |
40 |
| - |
41 |
| -deinstall: |
42 |
| - $(RM) $(DESTDIR)/usr/sbin/$(DHCP6RELAY_TARGET) |
43 |
| - $(RM) -rf $(DESTDIR)/usr/sbin |
| 56 | +uninstall: |
| 57 | + $(RM) $(DESTDIR)/usr/sbin/$(notdir $(DHCP6RELAY_TARGET)) |
44 | 58 |
|
45 | 59 | clean:
|
46 |
| - -$(RM) $(EXECUTABLES) $(OBJS:%.o=%.d) $(OBJS) $(DHCP6RELAY_TARGET) $(DHCP6RELAY_TEST_TARGET) $(OBJS_DHCP6RELAY_TEST) *.html *.xml |
| 60 | + -$(RM) $(BUILD_DIR) $(BUILD_TEST_DIR) *.html *.xml |
47 | 61 | $(FIND) . -name *.gcda -exec rm -f {} \;
|
48 | 62 | $(FIND) . -name *.gcno -exec rm -f {} \;
|
49 | 63 | $(FIND) . -name *.gcov -exec rm -f {} \;
|
50 | 64 | -@echo ' '
|
51 | 65 |
|
52 |
| -.PHONY: all clean dependents |
53 |
| - |
54 |
| - |
| 66 | +.PHONY: all clean test install uninstall |
0 commit comments