1- SRC_DIR := src
2- OUT_DIR := build
3- EXTERNAL_DIR := external
4-
1+ SRC_DIR := src
2+ OUT_DIR := build
3+ EXTERNAL_DIR := external
4+ INSTALL_DIR ?= /usr/local/bin
55TEST_COMMON_DIR := tests/common
66TEST_MOCK_DIR := tests/mock
77BIND_CASES_DIR := tests/cases/bind
@@ -12,23 +12,24 @@ BIN_PATH := $(OUT_DIR)/$(BIN_NAME)
1212
1313CC := g++
1414CFLAGS := -O2 -std=c++23 -Wall -Wextra -pedantic -I $(SRC_DIR ) -MMD -MP
15- LDFLAGS := $(shell pkg-config --libs openssl)
1615DEBUG_CFLAGS := -g3 -fsanitize=address,leak,undefined
16+ LDFLAGS := $(shell pkg-config --libs "openssl >= 3.0")
1717
18- ifeq ($(DEBUG ) , 1)
19- CFLAGS += $(DEBUG_CFLAGS)
20- endif
18+ BIN_CFLAGS := $(CFLAGS )
19+ BIND_TEST_CFLAGS := $(CFLAGS ) $(DEBUG_CFLAGS )
20+ # Mock tests must not include debug flags because libasan(enable by `fsanitize`) intercepts the
21+ # required functions(recvfrom and sendto) thus preventing the mocked functions from being used.
22+ MOCK_TEST_CFLAGS := $(CFLAGS )
2123
22- # Disable optimizations to speed up CI
23- ifdef CI
24- CFLAGS += -O0
24+ ifeq ($(DEBUG ) , 1)
25+ BIN_CFLAGS += $(DEBUG_CFLAGS)
2526endif
2627
2728BIN_SRCS := $(shell find $(SRC_DIR ) -type f -name '* .cc')
2829BIN_OBJS := $(patsubst % .cc, $(OUT_DIR ) /% .o, $(BIN_SRCS ) )
2930BIN_DEPS := $(patsubst % .o, % .d, $(BIN_OBJS ) )
3031
31- TEST_COMMON_SRCS := $(shell find $( TEST_COMMON_DIR ) -type f -name ' * .cc') $( filter-out $(SRC_DIR ) /main.cc, $(BIN_SRCS ) )
32+ TEST_COMMON_SRCS := $(filter-out $(SRC_DIR ) /main.cc, $(BIN_SRCS ) )
3233BIND_COMMON_OBJ_DIR := $(OUT_DIR ) /$(TEST_COMMON_DIR ) /bind
3334BIND_COMMON_OBJS := $(patsubst % .cc, $(BIND_COMMON_OBJ_DIR ) /% .o, $(TEST_COMMON_SRCS ) )
3435BIND_COMMON_DEPS := $(patsubst % .o, % .d, $(BIND_COMMON_OBJS ) )
@@ -59,43 +60,49 @@ clean:
5960
6061build : $(BIN_PATH )
6162
63+ install : build
64+ install -D -m755 $(BIN_PATH ) $(INSTALL_DIR ) /$(BIN_NAME )
65+
66+ uninstall :
67+ rm $(INSTALL_DIR ) /$(BIN_NAME )
68+
6269$(BIN_PATH ) : $(BIN_OBJS )
6370 @mkdir -p $(@D )
64- $(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
71+ $(CC ) $(BIN_CFLAGS ) -o $@ $^ $(LDFLAGS )
6572
6673$(OUT_DIR ) /% .o : % .cc
6774 @mkdir -p $(@D )
68- $(CC ) $(CFLAGS ) -I $(EXTERNAL_DIR ) /cxxopts -o $@ -c $<
75+ $(CC ) $(BIN_CFLAGS ) -I $(EXTERNAL_DIR ) /cxxopts -o $@ -c $<
6976
7077test : $(BIND_CASES ) $(MOCK_CASES )
7178 @./tests/test.sh
7279
7380$(BIND_CASES_OUT_DIR ) /% : $(BIND_CASES_OUT_DIR ) /% .o $(BIND_COMMON_OBJS )
7481 @mkdir -p $(@D )
75- $(CC ) $(CFLAGS ) $( DEBUG_CFLAGS ) -o $@ $^ $(LDFLAGS )
82+ $(CC ) $(BIND_TEST_CFLAGS ) -o $@ $^ $(LDFLAGS )
7683
7784$(BIND_CASES_OUT_DIR ) /% .o : $(BIND_CASES_DIR ) /% .cc
7885 @mkdir -p $(@D )
79- $(CC ) $(CFLAGS ) $( DEBUG_CFLAGS ) -I $(TEST_COMMON_DIR ) -o $@ -c $<
86+ $(CC ) $(BIND_TEST_CFLAGS ) -I $(TEST_COMMON_DIR ) -o $@ -c $<
8087
8188$(BIND_COMMON_OBJ_DIR ) /% .o : % .cc
8289 @mkdir -p $(@D )
83- $(CC ) $(CFLAGS ) $( DEBUG_CFLAGS ) -o $@ -c $<
90+ $(CC ) $(BIND_TEST_CFLAGS ) -o $@ -c $<
8491
8592$(MOCK_CASES_OUT_DIR ) /% : $(MOCK_CASES_OUT_DIR ) /% .o $(TEST_MOCK_OBJS ) $(MOCK_COMMON_OBJS )
8693 @mkdir -p $(@D )
87- $(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
94+ $(CC ) $(MOCK_TEST_CFLAGS ) -o $@ $^ $(LDFLAGS )
8895
8996$(MOCK_CASES_OUT_DIR ) /% .o : $(MOCK_CASES_DIR ) /% .cc
9097 @mkdir -p $(@D )
91- $(CC ) $(CFLAGS ) -I $(TEST_COMMON_DIR ) -I $(TEST_MOCK_DIR ) -o $@ -c $<
98+ $(CC ) $(MOCK_TEST_CFLAGS ) -I $(TEST_COMMON_DIR ) -I $(TEST_MOCK_DIR ) -o $@ -c $<
9299
93100$(MOCK_COMMON_OBJ_DIR ) /% .o : % .cc
94101 @mkdir -p $(@D )
95- $(CC ) $(CFLAGS ) -o $@ -c $<
102+ $(CC ) $(MOCK_TEST_CFLAGS ) -o $@ -c $<
96103
97104$(TEST_MOCK_OBJ_DIR ) /% .o : % .cc
98105 @mkdir -p $(@D )
99- $(CC ) $(CFLAGS ) -I $(TEST_COMMON_DIR ) -o $@ -c $<
106+ $(CC ) $(MOCK_TEST_CFLAGS ) -I $(TEST_COMMON_DIR ) -o $@ -c $<
100107
101108-include $(BIN_DEPS ) $(BIND_COMMON_DEPS ) $(MOCK_COMMON_DEPS ) $(TEST_MOCK_DEPS ) $(BIND_CASES_DEPS ) $(MOCK_CASES_DEPS )
0 commit comments