summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-10-10 12:22:40 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-10-10 12:22:40 -0500
commit69484fa8da6d4c1917375a1e3ce5bbe49565408b (patch)
tree9d5efc45126b2ece6d8251ac032058df1d9e2baa /Makefile
Initial commit
Diffstat (limited to 'Makefile')
-rwxr-xr-xMakefile118
1 files changed, 118 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000..48bafa3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,118 @@
+include $(DEVKITARM)/base_tools
+export CPP := $(PREFIX)cpp
+export LD := $(PREFIX)ld
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+TITLE := POKEPIN R/S
+GAME_CODE := BPPE
+MAKER_CODE := 01
+REVISION := 0
+
+SHELL := /bin/bash -o pipefail
+
+ROM := pokepinballrs.gba
+OBJ_DIR := build/pokepinballrs
+
+ELF = $(ROM:.gba=.elf)
+MAP = $(ROM:.gba=.map)
+
+ASM_SUBDIR = asm
+DATA_ASM_SUBDIR = data
+
+ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR)
+DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
+
+ASFLAGS := -mcpu=arm7tdmi
+
+CC1 := tools/agbcc/bin/agbcc$(EXE)
+override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
+
+CPPFLAGS := -I tools/agbcc/include -I tools/agbcc -iquote include -nostdinc -undef
+
+LDFLAGS = -Map ../../$(MAP)
+
+SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
+SCANINC := tools/scaninc/scaninc$(EXE)
+FIX := tools/gbafix/gbafix$(EXE)
+
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
+
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+
+.PHONY: rom clean compare tidy
+
+$(shell mkdir -p $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR))
+
+ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
+ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
+
+DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s)
+DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS))
+
+OBJS := $(ASM_OBJS) $(DATA_ASM_OBJS)
+OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
+
+rom: $(ROM)
+
+# For contributors to make sure a change didn't affect the contents of the ROM.
+compare: $(ROM)
+ @$(SHA1) pokepinballrs.sha1
+
+clean: tidy
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
+
+tidy:
+ rm -f $(ROM) $(ELF) $(MAP)
+ rm -r build/*
+
+%.s: ;
+%.png: ;
+%.pal: ;
+%.aif: ;
+
+%.1bpp: %.png ; $(GFX) $< $@
+%.4bpp: %.png ; $(GFX) $< $@
+%.8bpp: %.png ; $(GFX) $< $@
+%.gbapal: %.pal ; $(GFX) $< $@
+%.gbapal: %.png ; $(GFX) $< $@
+%.lz: % ; $(GFX) $< $@
+%.rl: % ; $(GFX) $< $@
+
+ifeq ($(NODEP),)
+$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s)
+else
+$(ASM_BUILDDIR)/%.o: asm_dep :=
+endif
+
+$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
+ $(AS) $(ASFLAGS) -o $@ $<
+
+ifeq ($(NODEP),)
+$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s)
+else
+$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
+endif
+
+$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
+ $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
+
+$(OBJ_DIR)/ld_script.ld: ld_script.ld
+ cp $< $@
+
+$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
+ cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL)
+
+$(ROM): $(ELF)
+ $(OBJCOPY) -O binary $< $@
+ $(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent