#CROSS=../../../gcc-arm-none-eabi-4_7-2013q3/bin/arm-none-eabi-
CROSS=../../../gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-
CC=$(CROSS)gcc
LD=$(CROSS)gcc
AR=$(CROSS)ar
CP=$(CROSS)objcopy
OD=$(CROSS)objdump
READELF=$(CROSS)readelf
STRIP=$(CROSS)strip

RAINBOW_VERSION=`cat build_number`

MCFLAGS = -O1 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=gnu99 -nostartfiles -mfloat-abi=hard  -mfpu=fpv4-sp-d16  -mfp16-format=ieee
#MCFLAGS = -g -O1 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=gnu99 -nostartfiles 
#MCFLAGS = -O1 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=gnu99 -nostartfiles -fpic -mno-pic-data-is-text-relative 
#MCFLAGS = -O0 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=c99 -nostartfiles -fpic -mno-pic-data-is-text-relative 
#MCFLAGS = -O0 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=c99 -nostartfiles -fpic -mno-pic-data-is-text-relative 
#MCFLAGS = -O0 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=c99 -nostartfiles  -mno-pic-data-is-text-relative 
#MCFLAGS = -O0 -mcpu=cortex-m4 -mthumb -mthumb-interwork -std=c99 -nostartfiles -fpic -mno-pic-data-is-text-relative 
# -msingle-pic-base - uses R9 as pointer to data section

VPATH	= ./


STM32_INCLUDES = -I../../Libraries/CMSIS/Device/ST/STM32F4xx/Include/ \
	-I../../Libraries/CMSIS/Include/ \
	-I../../Libraries/STM32F4xx_StdPeriph_Driver/inc/ \
	-I../../Libraries/STM32_USB_OTG_Driver/inc \
	-I../../Libraries/STM32_USB_Device_Library/Core/inc \
	-I../../Libraries/STM32_USB_Device_Library/Class/cdc/inc
	

INCLUDES = $(STM32_INCLUDES) -I./ 

STATIC_LIBS = libc_g.a stm32f4.a 

DEFS = 	-DUSE_STDPERIPH_DRIVER -DSTM32F4XX \
	-DHAVE_CONFIG_H \
	-DHSE_VALUE=8000000 \
	-DUSE_USB_OTG_FS \
	-DDEVICE_VERSION=0xA1 \
	-DRAINBOW_VERSION=$(RAINBOW_VERSION)+1 

CFLAGS	= $(MCFLAGS) $(DEFS) $(INCLUDES)
LDFLAGS = -lnosys -Wl,-T,grovex_c1_module.ld -Wl,-nmagic 

SRC = demo.c font_6x8.c

STM32_SRC =  \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/misc.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dac.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c  \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c \
	../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c

	#../../Libraries/STM32_USB_Device_Library/Class/cdc/src/usbd_cdc_core.c \
	#../../Libraries/STM32_USB_Device_Library/Core/src/usbd_req.c \
	#../../Libraries/STM32_USB_Device_Library/Core/src/usbd_core.c \
	#../../Libraries/STM32_USB_Device_Library/Core/src/usbd_ioreq.c \
	#../../Libraries/STM32_USB_OTG_Driver/src/usb_dcd.c \
	#../../Libraries/STM32_USB_OTG_Driver/src/usb_core.c \
	#../../Libraries/STM32_USB_OTG_Driver/src/usb_dcd_int.c \

	#../../Libraries/STM32_USB_OTG_Driver/src/usb_core.c \
	#../../Libraries/STM32_USB_OTG_Driver/src/usb_otg.c 
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c 
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_tdes.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_sha1.c 
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c \
	#../../Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c 

STM32_OBJ     =$(STM32_SRC:.c=.o)


all: demo.elf fonts

fonts: font_6x8.fnt font_12x16.fnt

font_6x8.fnt: font_6x8.c
	$(CC) -c $< -o $@ 
	$(CP) -O binary -S -j.rodata $@ $@

font_12x16.fnt: font_12x16.c
	$(CC) -c $< -o $@ 
	$(CP) -O binary -S -j.rodata $@ $@

demo.hex: demo.elf
	$(CP) -O ihex $^ $@

demo.elf: $(SRC) $(STATIC_LIBS)  
	@expr $(RAINBOW_VERSION) + 1 > build_number
	$(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@
	$(STRIP) $@

strip: demo.elf
	$(STRIP) $^

$(STM32_OBJ): %.o:%.c
	$(CC) -c $(CFLAGS) $< -o $@


stm32f4.a: $(STM32_OBJ)
	$(AR) rcs $@ $^ 


clean:
	rm -f *.su *.hex *.o *.elf stm32f4.a  *.fnt

disassm: demo.elf
	$(OD) -l -S  $^

readelf: demo.elf
	$(READELF) -a $^


