
CROSS ?= arm-none-eabi

EMU ?= mgba

DEF_CC := gcc

ifneq ($(CROSS),)
	CC_ ?= $(CROSS)-$(DEF_CC)
	LD := $(CROSS)-$(LD)
	AS := $(CROSS)-$(AS)
else
	CC_ ?= $(DEF_CC)
endif

CC := $(CC_)

default: all

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

%/:
	mkdir -p "$@"

obj/%.s.o: %.s obj/
	$(AS) $(AFLAGS) -o "$@" -c "$<"
obj/%.S.o: %.S obj/
	$(CC) $(AFLAGS) -o "$@" -c "$<"

ASMFILES := crt0.S #$(wildcard *.s *.S)
OBJFILES := $(patsubst %,obj/%.o,$(ASMFILES))

bin/%.elf: $(OBJFILES) bin/
	$(LD) $(LFLAGS) -T"gba_$*.ld" -o "$@" $(OBJFILES) >"bin/$*.map"

bin/%.emu.gba: bin/%.elf obj/
	$(CROSS)-objcopy -O binary "$<" "$@"

bin/%.safe.gba: bin/%.emu.gba
	< "$<" python3 ./gbafix.py > "$@"
	@-wc -c "$@"

all: bin/ bin/cart.safe.gba
#bin/mb.safe.gba

clean:
	rm -rvf bin/ obj/

test-cart: all
	$(EMU) "bin/cart.emu.gba"
test-mb: all
	$(EMU) "bin/mb.emu.gba"

.PHONY: all default clean test-cart test-mb
.PRECIOUS: bin/cart.elf bin/mb.elf bin/mb.emu.gba bin/cart.emu.gba \
    $(OBJFILES)

