.SUFFIXES:
.SECONDARY:

CC=arm-none-eabi-gcc
AS=arm-none-eabi-as
LD=arm-none-eabi-ld
ARCH=-mcpu=cortex-m0plus -march=armv6-m
CFLAGS=$(ARCH) -fno-delete-null-pointer-checks -fwrapv -Wall -Wno-main -Os
ASFLAGS=$(ARCH)

COMMON_OBJS=blink.o
SRAM_OBJS=$(COMMON_OBJS) crt0_sram.o
FL_OBJS=$(COMMON_OBJS) crt0_fl.o
XIP_OBJS=$(COMMON_OBJS) crt0_xip.o

all: blink_sram.elf blink_xip.elf blink_fl.elf

%.uf2: %.elf
	elf2uf2 $< $@

%.s: %.c
	$(CC) $(CFLAGS) -S -o $@ $<

%.o: %.s
	$(AS) $(ASFLAGS) -o $@ $< -alh=$*.lst

crt0_sram.o: crt0.s
	$(AS) $(ASFLAGS) --defsym crt0_mode=0 -o $@ $< -alh=crt0_sram.lst

crt0_fl.o: crt0.s
	$(AS) $(ASFLAGS) --defsym crt0_mode=1 -o $@ $< -alh=crt0_fl.lst

crt0_xip.o: crt0.s
	$(AS) $(ASFLAGS) --defsym crt0_mode=2 -o $@ $< -alh=crt0_xip.lst

blink_sram.elf: $(SRAM_OBJS) pico_sram.ldscript
	$(LD) -T pico_sram.ldscript -o $@ $(SRAM_OBJS)

blink_fl.elf: $(FL_OBJS) pico_fl.ldscript
	$(LD) -T pico_fl.ldscript -o $@ $(FL_OBJS)

blink_xip.elf: $(XIP_OBJS) pico_xip.ldscript
	$(LD) -T pico_xip.ldscript -o $@ $(XIP_OBJS)

clean:
	rm -f blink.s *.o *.elf *.lst
