BUILD := build override PACKAGES := fmt WARNINGS := -Wall -Werror OPTIMIZE := -Og -flto DEBUG := -g CXX := g++ CXXFLAGS := $(WARNINGS) $(OPTIMIZE) $(DEBUG) LD := ld XXD := xxd override CXXFLAGS += -std=c++20 override COMPILE_FLAGS := -MMD -MP -I. override LINK_FLAGS := ifneq "$(strip $(PACKAGES))" "" override COMPILE_FLAGS += $(shell pkg-config --cflags $(PACKAGES)) override LINK_FLAGS += -Wl,--start-group $(shell pkg-config --libs $(PACKAGES)) -Wl,--end-group endif default: $(BUILD)/minigolf .PHONY: default clean: rm -rf $(BUILD) .PHONY: clean .SECONDARY: .SUFFIXES: override SOURCES := $(shell find -\( -name build -prune -\) -o -\( -\( -name \*.bin -o -name \*.hex -o -name \*.cpp -\) -print -\)) override OBJECTS := $(addprefix $(BUILD)/, $(addsuffix .o, $(basename $(SOURCES)))) override DEPENDS := $(addprefix $(BUILD)/, $(addsuffix .d, $(basename $(SOURCES)))) -include $(DEPENDS) $(BUILD)/%.bin: %.hex @mkdir -p $(dir $@) $(XXD) -r -p $< $@ $(BUILD)/%.o: %.bin @mkdir -p $(dir $@) $(LD) -r -b binary -z noexecstack -o $@ $< $(BUILD)/%.o: $(BUILD)/%.bin $(LD) -r -b binary -z noexecstack -o $@ $< $(BUILD)/%.o: %.cpp @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) $(COMPILE_FLAGS) -c -o $@ $< $(BUILD)/minigolf: $(OBJECTS) @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) -o $@ -Wl,--start-group $+ -Wl,--end-group $(LINK_FLAGS)