PROJECT=main

#ProgramPath
TOP=./
PP=$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/User/

EXECUTABLE=$(PROJECT).elf
BIN_IMAGE=$(PROJECT).bin
HEX_IMAGE=$(PROJECT).hex
LIST_FILE=$(PROJECT).lst


CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy
AR=arm-none-eabi-ar

CFLAGS= -Os -mlittle-endian -mthumb
CFLAGS+=-mcpu=cortex-m4 -mfpu=fpv4-sp-d16
CFLAGS+=-ffreestanding -nostdlib

# to run from FLASH
CFLAGS+=-Wl,-T,$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/TrueSTUDIO/STM324xG-EVAL/STM32F407IG_FLASH.ld
CFLAGS+=-I$(TOP)
CFLAGS+=-I$(PP)

CFLAGS+=-DVECT_TAB_FLASH
CFLAGS+=-DUSE_STDPERIPH_DRIVER
CFLAGS+=-DSTM32F4XX
CFLAGS+=-std=gnu99


#STM32F4xx_StdPeriph_Driver
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32F4xx_StdPeriph_Driver/inc

#Project 
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Config
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/Devices/STM32F4xx
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/Graphics
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/Lib
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/Mod_manager

#Modules
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/System
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Audio_Player
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Ethernet
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Common

#FreeRTOS
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Utilities/Third_Party/FreeRTOS/Source/include
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Utilities/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F


#ff
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Utilities/Third_Party/fat_fs/inc

#Utilities
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Utilities/STM32_EVAL/STM3240_41_G_EVAL
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Utilities/STM32_EVAL/Common

#Libs
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/Embedded_GUI_HAL/inc
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32F4x7_ETH_Driver/inc
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/Embedded_GUI_Library/inc
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32_USB_HOST_Library/Core/inc
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32_USB_OTG_Driver/inc
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32_USB_HOST_Library/Class/MSC/inc

#CMSIS
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Include/
CFLAGS+=-I$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/CMSIS/Include/

all: clean libSTM32F4xx_StdPeriph_Driver.a libCore_Graphics.a $(BIN_IMAGE)
 

$(BIN_IMAGE): $(EXECUTABLE)
	$(OBJCOPY) -O binary $^ $@
	$(OBJCOPY) -O ihex $^ $(HEX_IMAGE)
	arm-none-eabi-objdump -h -S -D $(EXECUTABLE) > $(PROJECT).lst
	arm-none-eabi-size $(EXECUTABLE)
	
$(EXECUTABLE): 	$(PP)main.c  \
	$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f4xx.s \
	$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
	$(CC) $(CFLAGS) $^ -o $@  -lSTM32F4xx_StdPeriph_Driver -lCore_Graphics

libSTM32F4xx_StdPeriph_Driver.a: 
	$(CC) $(CFLAGS) -c \
			-I../inc \
			$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Libraries/STM32F4xx_StdPeriph_Driver/src/*.c
	@$(AR) cr $@ $(TOP)*.o 
	rm -rf $(TOP)*.o
	
libCore_Graphics.a:	
	$(CC) $(CFLAGS) -c \
			-I../inc \
			$(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Core/Graphics/*.c
	@$(AR) cr $@ $(TOP)*.o 
	rm -rf $(TOP)*.o

	
#-D"assert_param(expr)=((void)0)" \

clean:
	rm -rf $(EXECUTABLE)
	rm -rf $(BIN_IMAGE)
	rm -rf $(HEX_IMAGE)
	rm -rf *.{lst,a}
	

.PHONY: all clean
