BUILD := build override PACKAGES := fmt WARNINGS := -Wall -Werror OPTIMIZE := -Og -flto DEBUG := -g CXX := g++ CXXFLAGS := $(WARNINGS) $(OPTIMIZE) $(DEBUG) LD := ld PALBART := palbart 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 \*.cpp -o -name \*.pal -\) -print -\)) override OBJECTS := $(addprefix $(BUILD)/, $(addsuffix .o, $(basename $(SOURCES)))) override DEPENDS := $(addprefix $(BUILD)/, $(addsuffix .d, $(basename $(SOURCES)))) -include $(DEPENDS) $(BUILD)/%.bin: %.bin @mkdir -p $(dir $@) ln -ft $(dir $@) $< $(BUILD)/%.bin: %.pal @mkdir -p $(dir $@) ln -ft $(dir $@) $< $(PALBART) -$$ -a -n $(basename $@).pal $(BUILD)/%.o: $(BUILD)/%.bin cd $(dir $@) && $(LD) -r -b binary -z noexecstack -o $(notdir $@) $(notdir $<) $(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)