mzm/Makefile
2023-11-17 13:06:43 +01:00

141 lines
3.0 KiB
Makefile

# Disable built-in rules
.SUFFIXES:
TARGET = mzm_us.gba
BASEROM = mzm_us_baserom.gba
SHA1FILE = mzm.sha1
ELF = $(TARGET:.gba=.elf)
MAP = $(TARGET:.gba=.map)
DUMPS = $(BASEROM:.gba=.dump) $(TARGET:.gba=.dump)
# ROM header
GAME_TITLE = ZEROMISSIONE
GAME_CODE = BMXE
MAKER_CODE = 01
GAME_REVISION = 00
# Binaries
CPP = cpp
TOOLCHAIN ?= arm-none-eabi-
AS = $(TOOLCHAIN)as
LD = $(TOOLCHAIN)ld
OBJCOPY = $(TOOLCHAIN)objcopy
OBJDUMP = $(TOOLCHAIN)objdump
CC = agbcc
DIFF = diff -u
HOSTCC = cc
MKDIR = mkdir -p
RM = rm -f
SHA1SUM = sha1sum
TAIL = tail
# Tools
GBAFIX = tools/gbafix/gbafix
PYTHON = python3
EXTRACTOR = tools/extractor.py
PREPROC = tools/preproc/preproc
# Flags
ASFLAGS = -mcpu=arm7tdmi
CFLAGS = -Werror -O2 -mthumb-interwork -fhex-asm -f2003-patch
CPPFLAGS = -nostdinc -Iinclude/
PREPROCFLAGS = charmap.txt
# Objects
CSRC = $(wildcard src/**.c) $(wildcard src/**/**.c) $(wildcard src/**/**/**.c) $(wildcard src/**/**/**/**.c)
.PRECIOUS: $(CSRC:.c=.s)
ASMSRC = $(CSRC:.c=.s) $(wildcard asm/*.s) $(wildcard audio/*.s) $(wildcard audio/**/*.s) $(wildcard audio/**/**/*.s)
OBJ = $(ASMSRC:.s=.o)
# Enable verbose output
ifeq ($(V),1)
Q =
MSG = @:
else
Q = @
MSG = @echo " "
endif
.PHONY: all
all: $(TARGET)
.PHONY: check
check: all
$(MSG) SHA1SUM $(SHA1FILE)
$Q$(SHA1SUM) -c $(SHA1FILE)
.PHONY: dump
dump: $(DUMPS)
.PHONY: diff
diff: $(DUMPS)
$(MSG) DIFF $^
$Q$(DIFF) $^
.PHONY: clean
clean:
$(MSG) RM $(TARGET)
$Q$(RM) $(TARGET) $(ELF) $(MAP)
$(MSG) RM \*.dump
$Q$(RM) $(DUMPS)
$(MSG) RM \*.o
$Q$(RM) $(OBJ)
$(MSG) RM data/*.s
$Q$(RM) $(DATA)
$(MSG) RM src/\*\*/\*.s
$Q$(RM) $(CSRC:.c=.s)
$(MSG) RM $(GBAFIX)
$Q$(RM) $(GBAFIX)
$(MSG) RM data/
$Q$(RM) -r data
.PHONY: help
help:
@echo 'Targets:'
@echo ' all: build the ROM'
@echo ' check: checksum the ROM'
@echo ' dump: dump the ROMs'
@echo ' diff: compare the ROM with the original'
@echo ' clean: remove the ROM and intermediate files'
@echo ' help: show this message'
@echo ''
@echo 'Flags:'
@echo ' V=1: enable verbose output'
$(TARGET): $(ELF) $(GBAFIX)
$(MSG) OBJCOPY $@
$Q$(OBJCOPY) -O binary --gap-fill 0xff --pad-to 0x08800000 $< $@
$(MSG) GBAFIX $@
$Q$(GBAFIX) $@ -t$(GAME_TITLE) -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION)
$(ELF) $(MAP): $(OBJ) linker.ld
$(MSG) LD $@
$Q$(LD) $(LDFLAGS) -n -T linker.ld -Map=$(MAP) -o $@
%.dump: %.gba
$(MSG) OBJDUMP $@
$Q$(OBJDUMP) -D -bbinary -marm7tdmi -Mforce-thumb $< | $(TAIL) -n+3 >$@
#--stop-address 0x8c71c
%.o: %.s
$(MSG) AS $@
$Q$(AS) $(ASFLAGS) $< -o $@
%.s: %.c
$(MSG) CC $@
$Q$(PREPROC) $< $(PREPROCFLAGS) | $(CPP) $(CPPFLAGS) | $(CC) -o $@ $(CFLAGS) && printf '\t.align 2, 0 @ dont insert nops\n' >> $@
src/sram/%.s: CFLAGS = -O1 -mthumb-interwork -fhex-asm
src/sram/%.s: src/sram/%.c
src/libgcc/%.s: CFLAGS = -O2 -fhex-asm
src/libgcc/%.s: src/libgcc/%.c
src/sprites_AI/%.s: CFLAGS = -O2 -mthumb-interwork -fhex-asm
src/sprites_AI/%.s: src/sram/%.c
tools/%: tools/%.c
$(MSG) HOSTCC $@
$Q$(HOSTCC) $< $(HOSTCFLAGS) $(HOSTCPPFLAGS) -o $@