MAKEFLAGS += -j16 CXX=g++ LD=g++ CLANG_FORMAT=clang-format CXXFLAGS = -std=c++23 -pedantic-errors -Wall -Wextra -Wconversion LDFLAGS = # libraries = "" # CXXFLAGS += $(shell pkg-config $(libraries) --cflags) # LDFLAGS += $(shell pkg-config $(libraries) --libs) RELEASE = 0 GDB = 0 ifeq ($(RELEASE),1) CXXFLAGS += -O3 else CXXFLAGS += -g -Wno-unused ifeq ($(GDB),1) CXXFLAGS += -ggdb else CXXFLAGS += -fsanitize=address endif endif NO_MAIN = 0 ifeq ($(NO_MAIN),1) CXXFLAGS += -Dmain="not_main" endif build_dir = build obj_dir = $(build_dir)/obj sources = \ src/main.cpp \ src/tcp.cpp \ src/http.cpp tests = \ tests/true.cpp target=$(build_dir)/backend all: $(target) $(target): $(sources:%.cpp=$(obj_dir)/%.o) $(LD) -o $@ $(CXXFLAGS) $(LDFLAGS) $^ $(obj_dir)/%.o: %.cpp @mkdir -p $(dir $@) $(CXX) $< -c -o $@ -MMD -MP $(CXXFLAGS) test: $(sources:%.cpp=$(obj_dir)/%.o) run_tests run_tests: $(tests:tests/%.cpp=$(build_dir)/tests/test_%) printf "%s\n" $2 | xargs -I % sh -c 'echo "- %..." && ./% && echo "- %: OK" || echo "- %: FAILED" && exit 1' $(build_dir)/tests/test_%: tests/%.cpp @mkdir -p $(dir $@) $(CXX) $< -o $@ -MMD -MP $(CXXFLAGS) format: $(CLANG_FORMAT) -style=file -i src/* check: $(CLANG_FORMAT) --dry-run --Werror -style=file src/* clean: rm -rf $(build_dir) -include $(sources:%.cpp=$(obj_dir)/%.d)