NASM ?= nasm LD ?= ld YEAR ?= 2025 DAY ?= SRC_DIR := aoc-$(YEAR) BUILD_DIR := build/aoc-$(YEAR) NASMFLAGS ?= -f elf64 LDFLAGS ?= -m elf_x86_64 DAYS := $(basename $(notdir $(wildcard $(SRC_DIR)/day*.asm))) BINARIES := $(addprefix $(BUILD_DIR)/,$(DAYS)) .PHONY: all clean list run all: $(BINARIES) $(BUILD_DIR): @mkdir -p $@ $(BUILD_DIR)/%.o: $(SRC_DIR)/%.asm | $(BUILD_DIR) @$(NASM) $(NASMFLAGS) $< -o $@ $(BUILD_DIR)/%: $(BUILD_DIR)/%.o @$(LD) $(LDFLAGS) -o $@ $< run: ifndef DAY $(error DAY is required, e.g. make run DAY=3) endif @$(MAKE) --no-print-directory $(BUILD_DIR)/day$(DAY) @./$(BUILD_DIR)/day$(DAY) list: @printf "\033[1;36mAdvent of Code %s\033[0m\n\n" "$(YEAR)" @count=0; \ for day in $(DAYS); do \ number=$${day#day}; \ printf " \033[1;33mDay %02d\033[0m" "$$number"; \ count=$$((count + 1)); \ if [ $$((count % 5)) -eq 0 ]; then \ printf "\n"; \ else \ printf " "; \ fi; \ done @printf "\n" clean: rm -rf build