PROJECT=Blink

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

#ProgramPath
TOP=$(shell readlink -f "$(dir $(lastword $(MAKEFILE_LIST)))")
PP=$(TOP)/STM32F4-Discovery_FW_V1.1.0/Project/Blink/

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

CFLAGS=-g -O2 -mlittle-endian -mthumb
CFLAGS+=-mcpu=cortex-m4
CFLAGS+=-ffreestanding -nostdlib

# to run from FLASH
CFLAGS+=-Wl,-T,$(TOP)/STM32F4-Discovery_FW_V1.1.0/Project/Demonstration/TrueSTUDIO/STM32F4-Discovery_Demo/stm32_flash.ld

CFLAGS+=-I$(TOP)/
CFLAGS+=-I$(PP)

CFLAGS+=-DVECT_TAB_FLASH
CFLAGS+=-DUSE_STDPERIPH_DRIVER

# stm32f4_discovery lib
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/device_support
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/core_support

#STM32_USB_Device_Library
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32_USB_Device_Library/Class/hid/inc
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32_USB_Device_Library/Core/inc

#STM32F4xx_StdPeriph_Driver\inc
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc

#Utilities
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Utilities/STM32F4-Discovery

#CMSIS
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Include
CFLAGS+=-I$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/Include

all: libSTM32F4xx_StdPeriph_Driver.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)/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f4xx.s \
	$(CC) $(CFLAGS) $^ -o $@  -L$(TOP) -lSTM32F4xx_StdPeriph_Driver
	
libSTM32F4xx_StdPeriph_Driver.a: 
	$(CC) $(CFLAGS) -c \
			-D"assert_param(expr)=((void)0)" \
			-I../inc \
			$(TOP)/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/*.c
	@$(AR) cr $@ $(TOP)/*.o 
	rm -rf $(TOP)/*.o


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

.PHONY: all libSTM32F4xx_StdPeriph_Driver.a clean
