CC			= arm-none-eabi-gcc
LD			= arm-none-eabi-gcc
OBJCOPY		= arm-none-eabi-objcopy
LKR			= arm_lib.lkr
FLAGS		= -Os -g -ggdb3 -ffixed-r9 -fpic -Wno-multichar -Wall -flto
CCFLAGS		= -I. -ffunction-sections -fdata-sections -DUSE_TRAPS=0 $(FLAGS) -DTICKS_PER_SECOND=1000
LDFLAGS		= -Wl,--gc-sections -Wl,-T $(LKR) -fpic -flto $(FLAGS)

RSRC		= amdc0000
PRC			= slot_driver.prc
SRCS		+= main.c slot.c sd.c sdUtil.c libpalmos.c librepalm.c crt.S pace.S
SLIBS		=


ifeq ($(BUILD),stm)	# 429/469/resring (based on hal id)

	SRCS			+= sdHwSTM32.c
	CCFLAGS			+= -march=armv7e-m -mcpu=cortex-m4
	LDFLAGS			+= -march=armv7e-m -mcpu=cortex-m4
	CRTGENARCH		= v7m

else ifeq ($(BUILD),AximX3)

	SRCS			+= sdHwW86L488.c
	CCFLAGS			+= -march=armv5te -mtune=xscale -marm
	LDFLAGS			+= -march=armv5te -mtune=xscale -marm
	CRTGENARCH		= v4

else ifeq ($(BUILD),RP2040_Waveshare)

	SRCS			+= sdHwRP2040-Waveshare.c
	CCFLAGS			+= -march=armv6-m -mcpu=cortex-m0 -DBUILD_FOR_THUMB_1 -isystem ../dal/kernel/hw/RP2040/
	LDFLAGS			+= -march=armv6-m -mcpu=cortex-m0
	CRTGENARCH		= v6m

else ifeq ($(BUILD),RP2040_Palmcard)

	SRCS			+= sdHwPalmcard.c
	CCFLAGS			+= -march=armv6-m -mcpu=cortex-m0 -DBUILD_FOR_THUMB_1 -isystem ../dal/kernel/hw/RP2040/
	LDFLAGS			+= -march=armv6-m -mcpu=cortex-m0
	CRTGENARCH		= v6m

else

	ERRS			+= $(error "no arch defined")
	
endif

#add SDK
CCFLAGS		+=  -I../../SDK
CCFLAGS		+=  -I../../SDK/Core
CCFLAGS		+=  -I../../SDK/Core/System
CCFLAGS		+=  -I../../SDK/Core/Hardware
CCFLAGS		+=  -I../../SDK/Core/UI
CCFLAGS		+=  -I../../SDK/Dynamic
CCFLAGS		+=  -I../../SDK/libraries

#add repalm
CCFLAGS		+=  -isystem ../dal


#resources
EXTRA_RSRCS	+= amdi0000.bin


#do not touch below
OBJS		= $(patsubst %.S,%.o,$(patsubst %.c,%.o,$(SRCS)))
INCS		= $(wildcard *.h)

$(PRC): $(RSRC).bin $(EXTRA_RSRCS) $(ERRS)
	../../tools/mkrom/mkprc SlotDriver-rePalm libs rPsd $^ > $@

$(RSRC).bin: $(RSRC).elf  Makefile
	$(OBJCOPY) -I elf32-littlearm -O binary $(RSRC).elf $(RSRC).bin -j.vec -j.text -j.rodata -j.data

$(RSRC).elf: $(OBJS) $(LKR) Makefile $(SLIBS)
	$(LD) -o $(RSRC).elf $(LDFLAGS) $(OBJS) $(SLIBS)

libpalmos.c: ../dal/libpalmos.c
	cp $< $@

librepalm.c: ../dal/librepalm.c
	cp $< $@

%.o : %.c $(INCS) Makefile
	$(CC) $(CCFLAGS) -c $< -o $@
	
%.o : %.S Makefile
	$(CC) $(CCFLAGS) -c $< -o $@

pace.S: Makefile ../../tools/libtools/PACE.libdescr
	echo "#define _ASSEMBLY\n#include \"common.h\"\n#define LIB_SLOT_IN_GLOBALS 0x10" > pace.S
	../../tools/libtools/inclgen.sh $(CRTGENARCH) ../../tools/libtools/PACE.libdescr >> pace.S

crt.S: Makefile slotdriver.libdescr
	../../tools/libtools/crtgen.sh $(CRTGENARCH) slotdriver.libdescr >crt.S

clean:
	rm -f $(OBJS) $(RSRC).bin $(RSRC).elf $(PRC) crt.S pace.S libpalmos.c librepalm.c


