mzm/Makefile

124 lines
2.2 KiB
Makefile
Raw 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
BASEROM = baserom_us.gba
SHA1FILE = mzm.sha1
2022-01-21 09:08:58 +00:00
ELF = $(TARGET:.gba=.elf)
MAP = $(TARGET:.gba=.map)
DUMPS = $(TARGET:.gba=.dump) $(BASEROM:.gba=.dump)
2022-01-20 17:46:10 +00:00
2022-01-21 12:28:54 +00:00
# ROM header
GAME_TITLE = ZEROMISSIONE
GAME_CODE= BMXE
MAKER_CODE = 01
GAME_REVISION = 00
2022-01-20 17:46:10 +00:00
# Binaries
2022-01-21 09:08:58 +00:00
TOOLCHAIN ?= arm-none-eabi-
AS = $(TOOLCHAIN)as
2022-01-24 12:18:57 +00:00
CPP = $(TOOLCHAIN)cpp
2022-01-21 09:08:58 +00:00
LD = $(TOOLCHAIN)ld
OBJCOPY = $(TOOLCHAIN)objcopy
OBJDUMP = $(TOOLCHAIN)objdump
2022-01-24 12:18:57 +00:00
CC = agbcc
2022-01-21 09:08:58 +00:00
DIFF = diff -u
2022-01-21 12:28:54 +00:00
HOSTCC = cc
2022-01-20 17:46:10 +00:00
RM = rm -f
SHA1SUM = sha1sum
2022-01-21 09:08:58 +00:00
TAIL = tail
2022-01-21 12:28:54 +00:00
GBAFIX = tools/gbafix/gbafix
2022-01-21 09:08:58 +00:00
# Flags
ASFLAGS = -mcpu=arm7tdmi
2022-01-24 12:18:57 +00:00
CFLAGS = -O2 -mthumb-interwork
CPPFLAGS = -nostdinc
2022-01-21 09:08:58 +00:00
# Objects
CSRC = $(wildcard src/*.c)
2022-01-24 12:18:57 +00:00
.PRECIOUS: $(CSRC:.c=.s)
ASMSRC = $(CSRC:.c=.s) $(wildcard asm/*.s)
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
.PHONY: all
all: $(TARGET)
.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)
2022-01-24 18:55:09 +00:00
$(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-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 $@ $(OBJ)
2022-01-20 17:46:10 +00:00
2022-01-21 09:08:58 +00:00
%.dump: %.gba
$(MSG) OBJDUMP $@
2022-01-23 16:48:38 +00:00
$Q$(OBJDUMP) -D -bbinary -marm7tdmi -Mforce-thumb $< | $(TAIL) -n+3 > $@
2022-01-20 17:46:10 +00:00
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 $@
$Q$(CPP) $(CPPFLAGS) $< | $(CC) -o $@ $(CFLAGS)
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 $@