#********************************************************************************
#
# @file    Makefile
# @brief   This file is for arm-none-eabi-gcc
#
# @version V1.0
# @date    02 Jan 2020
# @author  AE Team
# @note
#
# Copyright (C) Shanghai Eastsoft Microelectronics Co. Ltd. All rights reserved.
#
#********************************************************************************

CC      := arm-none-eabi-gcc
LD      := arm-none-eabi-ld --gc-sections
AS      := arm-none-eabi-as
OBJCOPY := arm-none-eabi-objcopy
SIZE    := arm-none-eabi-size
RM      := rm -rf
ECHO    := echo
SED     := sed
DONE    := done

INCS := -I../Inc/
INCS += -I../../../../Drivers/ALD/ES32F3553GLTE/Include/
INCS += -I../../../../Drivers/CMSIS/Include/
INCS += -I../../../../Drivers/CMSIS/Device/EastSoft/ES32F3553GLTE/Include/

MACROS := -DUSE_ASSERT
CFLAGS := -mthumb -mcpu=cortex-m3 -Wall $(MACROS) $(INCS) -std=c99 -O0 --specs=nosys.specs --specs=nano.specs
TARGET := image
SRCDIR := ../Src ../../../../Drivers/ALD/ES32F3553GLTE/Source/
OBJDIR := ../obj
VPATH  := $(SRCDIR)


SOURCE := $(foreach i, $(SRCDIR), $(wildcard $(i)/*.c))
SOURCE := $(notdir $(SOURCE))
SRC_SD := ../../../../Drivers/CMSIS/Device/EastSoft/ES32F3553GLTE/Startup/gcc
SRC_S  := ../../../../Drivers/CMSIS/Device/EastSoft/ES32F3553GLTE/Startup/gcc/startup_es32f3553glte.s
FLDS   := es32f3553g.ld

OBJS   := $(patsubst %.c, %.o, $(SOURCE))
OBJS   := $(OBJS) $(patsubst %.s, %.o, $(SRC_S))
OBJS   := $(addprefix $(OBJDIR)/, $(OBJS))
DOBJ   := $(patsubst %.o, %.d, $(OBJS))

all : $(TARGET)
$(TARGET) : $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ -T $(FLDS) -L $(LIBDIR) -Wl,-gc-sections -Wl,-Map,image.map
	$(OBJCOPY) $(TARGET) -O binary $(TARGET).bin
	$(OBJCOPY) $(TARGET) -O ihex $(TARGET).hex
	@$(SIZE) $@
	@$(ECHO) $(DONE)

sinclude $(SOURCE:.c=.d)

$(OBJDIR)/%.o : %.c $(OBJDIR)/%.d
	$(CC) $(CFLAGS) --function-sections -c $< -o $@

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

-include $(DOBJ)

$(OBJDIR)/%.d : %.c
	$(CC) -M $(CFLAGS) $< > $@.$$$$; \
	$(SED) 's,\($*\)\.o[:]*,\1.o $@:,g'<$@.$$$$>$@;\
	$(RM) $@.$$$$

.PHONY : clean
clean:
	$(RM) $(OBJDIR)/*.o $(OBJDIR)/*.d $(TARGET)
	$(RM) *.bin *.hex *.map
	$(RM) $(SRC_SD)/*.o
