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. -Inanosim 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: .have_submodules: git submodule update --init --recursive @touch $@ -include .have_submodules 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)))) override SOURCES += $(BUILD)/programs/programs.cpp override OBJECTS += $(BUILD)/programs/programs.o override DEPENDS += $(BUILD)/programs/programs.d $(BUILD)/programs/programs.cpp.d $(BUILD)/programs/programs.cpp.d: @mkdir -p $(dir $@) @echo "build/programs/programs.cpp:" `ls -1 programs/*` > $@ .PHONY: $(BUILD)/programs/programs.cpp.d -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)/%.o: $(BUILD)/%.cpp $(CXX) $(CXXFLAGS) $(COMPILE_FLAGS) -c -o $@ $< $(BUILD)/programs/programs.cpp: @mkdir -p $(dir $@) scripts/mkprograms > $@ $(BUILD)/minigolf: $(OBJECTS) @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) -o $@ -Wl,--start-group $+ -Wl,--end-group $(LINK_FLAGS)