PATH := /cross/arm_m10/bin:$(PATH)
export PATH

USE_LIBGCC = 
USE_LIBC = 
DEBUG_CONSOLE = 

ANAME = libh523zi.a
LinkScript = STM32H523xx_FLASH.ld
TOP = $(PWD)
XLIBC = $(PWD)/../xlibc

loc_obj_PHAT = $(TOP)/obj
USE_ASM = y

ifeq (,$(wildcard ${loc_obj_PHAT}))
  ${shell mkdir ${loc_obj_PHAT}}
endif

export USE_LIBGCC USE_LIBC TOP XLIBC loc_obj_PHAT USE_ASM

TARGET = arm-none-eabi-

AS = $(TARGET)as
LD = $(TARGET)gcc
CC = $(TARGET)gcc
OBJCOPY = $(TARGET)objcopy
RANLIB = $(TARGET)ranlib


CPU_CFLAGS = -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb

CFLAGS = -Os $(CPU_CFLAGS) -fsingle-precision-constant \
 -Wall -Wundef -fno-common -fno-builtin -ffunction-sections -fdata-sections
#  -ffast-math
ARFLAGS = cru

LDFLAGS = -nostdlib -Xlinker --gc-sections \
 -Xlinker -print-memory-usage  -Xlinker -Map -Xlinker main.map \
 -T $(LinkScript)
# -u _printf_float -u _scanf_float


CPPFLAGS = -DSTM32H523xx -DNO_USB_HS -DUSE_DPK02

ifdef USE_LIBGCC
CPPFLAGS += -DUSE_LIBGCC
LIBRARY += -lgcc
endif
ifdef USE_LIBC
CPPFLAGS += -DUSE_LIBC
LIBRARY += -lc
endif
ifdef DEBUG_CONSOLE
CPPFLAGS += -DDEBUG_CONSOLE
endif

export AS LD CC RANLIB CFLAGS ASFLAGS LDFLAGS ARFLAGS CPU CPPFLAGS

include lib/Mobj

SLIBS = $(loc_obj_PHAT)/$(ANAME) $(loc_obj_PHAT)/libxc.a

nOBJL = $(addprefix $(loc_obj_PHAT)/,$(nOBJ))
nxOBJL = $(addprefix $(loc_obj_PHAT)/,$(nxOBJ))

include Mobj

SUBDIRS = $(XLIBC) lib

OBJL = $(addprefix $(loc_obj_PHAT)/,$(OBJS))

vpath %.o $(loc_obj_PHAT)

all: $(SUBDIRS) $(loc_obj_PHAT)/$(ANAME) $(OBJS) main.elf

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
	@$(MAKE) -C $@

.c.o:
	@echo "	CC $<"
	@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCL) -c $< -o $(loc_obj_PHAT)/$@
.S.o:
	@echo "	CC $<"
	@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCL) -c $< -o $(loc_obj_PHAT)/$@
.s.o:
	@echo "	CC $<"
	@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCL) -c $< -o $(loc_obj_PHAT)/$@

$(OBJS): Makefile $(DEPH) Mobj

$(loc_obj_PHAT)/$(ANAME): $(nOBJL)
	@${RM} $(loc_obj_PHAT)/$(ANAME)
	@echo "	AR $@"
	@cd $(loc_obj_PHAT); ${AR} ${ARFLAGS} $(ANAME) ${nOBJ}

main.elf: Makefile $(OBJS) $(DEPH)  $(SLIBS) $(LinkScript)
	@echo "	LD "$(patsubst %.elf,%,$@)
	@$(LD) $(LDFLAGS) $(CPU_CFLAGS) -o main.elf $(OBJL) $(SLIBS) $(LIBRARY)
	@$(TARGET)size main.elf
	@$(OBJCOPY) -O ihex main.elf main.hex

clean:
	${RM} *.o $(loc_obj_PHAT)/*.o $(loc_obj_PHAT)/*.a
