mzm/Makefile

141 lines
3.0 KiB
Makefile
Raw Permalink Normal View History

2022-01-24 12:18:57 +00:00
# Disable built-in rules
.SUFFIXES:
2022-01-20 17:46:10 +00:00
TARGET = mzm_us.gba
2022-05-13 07:01:23 +00:00
BASEROM = mzm_us_baserom.gba
2022-01-20 17:46:10 +00:00
SHA1FILE = mzm.sha1
2022-01-21 09:08:58 +00:00
ELF = $(TARGET:.gba=.elf)
MAP = $(TARGET:.gba=.map)
2022-01-29 12:07:22 +00:00
DUMPS = $(BASEROM:.gba=.dump) $(TARGET:.gba=.dump)
2022-01-20 17:46:10 +00:00
2022-01-21 12:28:54 +00:00
# ROM header
GAME_TITLE = ZEROMISSIONE
2022-03-23 13:21:21 +00:00
GAME_CODE = BMXE
2022-01-21 12:28:54 +00:00
MAKER_CODE = 01
GAME_REVISION = 00
2022-01-20 17:46:10 +00:00
# Binaries
2022-11-27 12:52:50 +00:00
CPP = cpp
2022-01-21 09:08:58 +00:00
TOOLCHAIN ?= arm-none-eabi-
AS = $(TOOLCHAIN)as
LD = $(TOOLCHAIN)ld
OBJCOPY = $(TOOLCHAIN)objcopy
OBJDUMP = $(TOOLCHAIN)objdump
2022-01-24 12:18:57 +00:00
CC = agbcc
2022-03-04 17:25:02 +00:00
DIFF = diff -u
2022-01-21 12:28:54 +00:00
HOSTCC = cc
MKDIR = mkdir -p
2022-01-20 17:46:10 +00:00
RM = rm -f
SHA1SUM = sha1sum
2022-01-21 09:08:58 +00:00
TAIL = tail
2022-09-24 17:37:47 +00:00
# Tools
2022-01-21 12:28:54 +00:00
GBAFIX = tools/gbafix/gbafix
2022-09-24 15:42:57 +00:00
PYTHON = python3
EXTRACTOR = tools/extractor.py
2022-09-24 17:37:47 +00:00
PREPROC = tools/preproc/preproc
2022-01-21 12:28:54 +00:00
2022-01-21 09:08:58 +00:00
# Flags
ASFLAGS = -mcpu=arm7tdmi
2023-02-03 17:52:02 +00:00
CFLAGS = -Werror -O2 -mthumb-interwork -fhex-asm -f2003-patch
2022-09-21 09:12:44 +00:00
CPPFLAGS = -nostdinc -Iinclude/
2023-10-19 23:07:21 +00:00
PREPROCFLAGS = charmap.txt
2022-01-21 09:08:58 +00:00
# Objects
2023-11-12 21:02:10 +00:00
CSRC = $(wildcard src/**.c) $(wildcard src/**/**.c) $(wildcard src/**/**/**.c) $(wildcard src/**/**/**/**.c)
2022-01-24 12:18:57 +00:00
.PRECIOUS: $(CSRC:.c=.s)
2023-11-17 12:06:43 +00:00
ASMSRC = $(CSRC:.c=.s) $(wildcard asm/*.s) $(wildcard audio/*.s) $(wildcard audio/**/*.s) $(wildcard audio/**/**/*.s)
2022-04-14 22:11:14 +00:00
OBJ = $(ASMSRC:.s=.o)
2022-01-20 17:46:10 +00:00
# Enable verbose output
ifeq ($(V),1)
Q =
MSG = @:
else
Q = @
MSG = @echo " "
endif
2022-04-14 14:24:46 +00:00
.PHONY: all
all: $(TARGET)
2022-01-20 17:46:10 +00:00
.PHONY: check
check: all
$(MSG) SHA1SUM $(SHA1FILE)
$Q$(SHA1SUM) -c $(SHA1FILE)
2022-01-21 09:08:58 +00:00
.PHONY: dump
dump: $(DUMPS)
.PHONY: diff
diff: $(DUMPS)
$(MSG) DIFF $^
$Q$(DIFF) $^
2022-01-20 17:46:10 +00:00
.PHONY: clean
clean:
$(MSG) RM $(TARGET)
2022-01-21 09:08:58 +00:00
$Q$(RM) $(TARGET) $(ELF) $(MAP)
2022-01-24 18:55:09 +00:00
$(MSG) RM \*.dump
2022-01-21 09:08:58 +00:00
$Q$(RM) $(DUMPS)
2022-01-24 18:55:09 +00:00
$(MSG) RM \*.o
2022-01-21 09:08:58 +00:00
$Q$(RM) $(OBJ)
$(MSG) RM data/*.s
$Q$(RM) $(DATA)
$(MSG) RM src/\*\*/\*.s
2022-01-24 12:18:57 +00:00
$Q$(RM) $(CSRC:.c=.s)
2022-01-21 12:28:54 +00:00
$(MSG) RM $(GBAFIX)
$Q$(RM) $(GBAFIX)
2022-09-24 20:19:02 +00:00
$(MSG) RM data/
$Q$(RM) -r data
2022-01-21 09:08:58 +00:00
.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'
2022-01-21 12:28:54 +00:00
$(TARGET): $(ELF) $(GBAFIX)
2022-01-21 09:08:58 +00:00
$(MSG) OBJCOPY $@
$Q$(OBJCOPY) -O binary --gap-fill 0xff --pad-to 0x08800000 $< $@
2022-01-21 12:28:54 +00:00
$(MSG) GBAFIX $@
$Q$(GBAFIX) $@ -t$(GAME_TITLE) -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION)
2022-01-21 09:08:58 +00:00
2022-01-23 18:12:05 +00:00
$(ELF) $(MAP): $(OBJ) linker.ld
2022-01-21 09:08:58 +00:00
$(MSG) LD $@
$Q$(LD) $(LDFLAGS) -n -T linker.ld -Map=$(MAP) -o $@
2022-01-20 17:46:10 +00:00
2022-01-21 09:08:58 +00:00
%.dump: %.gba
$(MSG) OBJDUMP $@
$Q$(OBJDUMP) -D -bbinary -marm7tdmi -Mforce-thumb $< | $(TAIL) -n+3 >$@
#--stop-address 0x8c71c
2022-01-21 09:08:58 +00:00
%.o: %.s
$(MSG) AS $@
$Q$(AS) $(ASFLAGS) $< -o $@
2022-01-21 12:28:54 +00:00
2022-01-24 12:18:57 +00:00
%.s: %.c
$(MSG) CC $@
2023-10-19 23:07:21 +00:00
$Q$(PREPROC) $< $(PREPROCFLAGS) | $(CPP) $(CPPFLAGS) | $(CC) -o $@ $(CFLAGS) && printf '\t.align 2, 0 @ dont insert nops\n' >> $@
2022-01-24 12:18:57 +00:00
src/sram/%.s: CFLAGS = -O1 -mthumb-interwork -fhex-asm
src/sram/%.s: src/sram/%.c
2022-05-19 15:38:24 +00:00
src/libgcc/%.s: CFLAGS = -O2 -fhex-asm
src/libgcc/%.s: src/libgcc/%.c
2022-08-06 14:55:58 +00:00
src/sprites_AI/%.s: CFLAGS = -O2 -mthumb-interwork -fhex-asm
src/sprites_AI/%.s: src/sram/%.c
2022-01-21 12:28:54 +00:00
tools/%: tools/%.c
$(MSG) HOSTCC $@
2022-01-24 12:18:57 +00:00
$Q$(HOSTCC) $< $(HOSTCFLAGS) $(HOSTCPPFLAGS) -o $@