
CROSS ?= arm-none-eabi
EMU ?= mgba
GBAFIX ?= gbafix

CC_CROSS ?= $(CROSS)-gcc
LD_CROSS ?= $(CROSS)-ld
AS_CROSS ?= $(CROSS)-as
OBJCOPY_CROSS ?= $(CROSS)-objcopy

LZ77C := lz77c/bin/lz77c

TITLE := MerryXmas!
GAME  := 2021
MAKER := K2

default: all

GBAFIXFLAGS := "-t$(TITLE)" "-c$(GAME)" "-m$(MAKER)"

AFLAGS += -mcpu=arm7tdmi -mthumb-interwork
LFLAGS += --gc-sections -M -Lld --print-gc-sections

%/:
	mkdir -p "$@"

$(LZ77C):
	$(MAKE) -C lz77c/

obj/crt0-%.S.o: crt0-%.S obj/payload.lz77 obj/
	$(CC_CROSS) $(AFLAGS) -o "$@" -c "$<"
obj/intro.S.o: intro.S obj/
	$(CC_CROSS) $(AFLAGS) -o "$@" -c "$<"

bin/payload.elf: obj/intro.S.o bin/
	$(LD_CROSS) $(LFLAGS) -T"gba_payload.ld" -o "$@" "$<" >"bin/payload.map"

obj/payload.bin: bin/payload.elf obj/
	$(OBJCOPY_CROSS) -O binary "$<" "$@"
	@-wc -c "$@"

obj/payload.lz77: obj/payload.bin $(LZ77C) obj/
	$(LZ77C) "$<" "$@"

bin/uncompr.elf: obj/crt0-uncompr.S.o obj/payload.bin bin/
	$(LD_CROSS) $(LFLAGS) -T"gba_cart.ld" -o "$@" "$<" >"bin/uncompr.map"
bin/compr.elf: obj/crt0-compr.S.o obj/payload.lz77 bin/
	$(LD_CROSS) $(LFLAGS) -T"gba_cart.ld" -o "$@" "$<" >"bin/compr.map"
bin/unsafe.elf: obj/crt0-unsafe.S.o bin/
	$(LD_CROSS) $(LFLAGS) -T"gba_cart.ld" -o "$@" "$<" >"bin/unsafe.map"

bin/uncompr.gba: bin/uncompr.elf bin/
	$(OBJCOPY_CROSS) -O binary "$<" "$@"
	$(GBAFIX) $(GBAFIXFLAGS) "$@"
	@-wc -c "$@"
bin/compr.gba: bin/compr.elf bin/
	$(OBJCOPY_CROSS) -O binary "$<" "$@"
	@-wc -c "$@"
bin/unsafe.gba: bin/unsafe.elf bin/
	$(OBJCOPY_CROSS) -O binary "$<" "$@"
	@-wc -c "$@"

all: bin/ bin/compr.gba bin/uncompr.gba bin/unsafe.gba

clean:
	$(RM) -rv bin/* obj/*
distclean: clean
	$(MAKE) -C lz77c/ clean

.PHONY: all default clean distclean $(LZ77C)

