A dungeon delver roguelike using Pathfinder 2nd edition rules
at gb 102 lines 2.9 kB view raw
1include project.mk 2 3SRCDIR = src 4OBJDIR = obj 5BINDIR = bin 6LIBDIR = libs 7RESDIR = $(SRCDIR)/resources 8ASMDIR = $(SRCDIR)/main 9RESSPRITES = $(RESDIR)/sprites 10RESBACKGROUNDS = $(RESDIR)/backgrounds 11GENDIR = $(SRCDIR)/generated 12GENSPRITES = $(GENDIR)/sprites 13GENBACKGROUNDS = $(GENDIR)/backgrounds 14BINS = $(BINDIR)/$(ROMNAME).$(ROMEXT) 15 16RGBDS ?= 17ASM := $(RGBDS)rgbasm 18LINK := $(RGBDS)rgblink 19FIX := $(RGBDS)rgbfix 20GFX := $(RGBDS)rgbgfx 21 22INCLUDEDIRS = include/ 23WARNINGS = all extra 24ASMFLAGS := -p $(PADVALUE) $(addprefix -I,$(INCLUDEDIRS)) $(addprefix -W,$(WARNINGS)) 25LINKFLAGS := -p $(PADVALUE) 26FIXFLAGS := -v -p $(PADVALUE) -i "$(GAMEID)" -k "$(LICENSEE)" -l $(OLDLIC) -m $(MBC) -n $(VERSION) -r $(SRAMSIZE) -t $(TITLE) 27 28# https://stackoverflow.com/a/18258352 29# Make does not offer a recursive wild card function, so here's one: 30rwildcard = $(foreach d,\ 31 $(wildcard $(1:=/*)), \ 32 $(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d) \ 33) 34 35# https://stackoverflow.com/a/16151140 36# This makes it so every entry in a space-delimited list appears only once 37unique = $(if $1,\ 38 $(firstword $1) $(call unique,$(filter-out $(firstword $1),$1)) \ 39) 40 41ASMSOURCES_COLLECTED = $(call rwildcard,$(ASMDIR),*.asm) $(call rwildcard,$(LIBDIR),*.asm) 42OBJS = $(patsubst %.asm,$(OBJDIR)/%.o,$(notdir $(ASMSOURCES_COLLECTED))) $(OBJDIR)/build_date.o 43 44all: $(BINS) 45 46NEEDED_GRAPHICS = \ 47 $(GENBACKGROUNDS)/title.tilemap \ 48 $(GENBACKGROUNDS)/text-font.2bpp 49 50GRAPHICS_DIR = $(GENDIR)/graphics 51GRAPHICS_CODE = $(call rwildcard,$(GRAPHICS_DIR),*.asm) 52GRAPHICS_OBJS = $(patsubst %.asm,$(OBJDIR)/%.o,$(notdir $(GRAPHICS_CODE))) 53 54test: 55 echo 56 57$(GENSPRITES)/%.2bpp: $(RESSPRITES)/%.png | $(GENSPRITES) 58 $(GFX) -c '#fff,#cfcfcf,#686868,#000;' --columns -o $@ $< 59 60$(GENBACKGROUNDS)/%.2bpp: $(RESBACKGROUNDS)/%.png | $(GENBACKGROUNDS) 61 $(GFX) -c '#fff,#9fa29f,#545654,#000;' -o $@ $< 62 63$(GENBACKGROUNDS)/%.tilemap: $(RESBACKGROUNDS)/%.png | $(GENBACKGROUNDS) 64 $(GFX) -c '#fff,#9fa29f,#545654,#000;' \ 65 --tilemap $@ \ 66 --unique-tiles \ 67 -o $(GENBACKGROUNDS)/$*.2bpp \ 68 $< 69 70ASMSOURCES_DIRS = $(patsubst %,%%.asm,\ 71 $(call unique,$(dir $(ASMSOURCES_COLLECTED))) \ 72) 73 74define object-from-asm 75$(OBJDIR)/%.o: $1 | $(OBJDIR) $(NEEDED_GRAPHICS) 76 $$(ASM) $$(ASMFLAGS) -o $$@ $$< 77endef 78 79$(foreach i, $(ASMSOURCES_DIRS), $(eval $(call object-from-asm,$i))) 80 81$(eval $(call object-from-asm,$(GRAPHICS_DIR)/%.asm)) 82 83$(BINS): $(OBJS) $(GRAPHICS_OBJS) | $(BINDIR) 84 $(LINK) $(LINKFLAGS) -m $(@:.gb=.map) -n $(@:.gb=.sym) -o $@ $^ 85 $(FIX) $(FIXFLAGS) $@ 86 87$(OBJDIR)/build_date.o: $(SRCDIR)/assets/build_date.asm | $(OBJDIR) 88 $(ASM) $(ASMFLAGS) -o $@ $^ 89 90define ensure-directory 91$1: 92 mkdir -p $$@ 93endef 94 95PREPARE_DIRECTORIES = $(OBJDIR) $(GENSPRITES) $(GENBACKGROUNDS) $(BINDIR) 96 97$(foreach i, $(PREPARE_DIRECTORIES), $(eval $(call ensure-directory,$i))) 98 99clean: 100 rm -rfv $(PREPARE_DIRECTORIES) 101 102.PHONY: clean all test