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

ANAME = libh523zi.a
LinkScript = STM32H523xx_FLASH.ld
USE_ASM = arm

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 \
  -fno-common -Wall -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

loc_obj_PHAT=obj

export AS LD CC RANLIB CFLAGS ASFLAGS LDFLAGS ARFLAGS CPU loc_obj_PHAT CPPFLAGS

include lib/Mobj
include lib/math/Mobj
include lib/xlibc/Mobj

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

include Mobj

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

SUBDIRS = lib lib/math lib/xlibc


OBJL = $(addprefix $(loc_obj_PHAT)/,$(OBJS))
#SLIBS = $(loc_obj_PHAT)/$(ANAME) $(loc_obj_PHAT)/libxc.a

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}

$(loc_obj_PHAT)/libxc.a: $(nxOBJL)
	@${RM} $@
	@echo "	AR $@"
	@cd $(loc_obj_PHAT); ${AR} ${ARFLAGS} libxc.a ${nxOBJ}

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

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