###
### Project
###

PROJECT = gcc-6.3.1-test

###
### Directories
###

SRCDIR = src
STMDIR = stm32
OBJDIR = obj
BUILD  = .build

###
### Connections
###

PORT_FLASH = /dev/ttyUSB0

###
### Sources
###

SRC  = $(OBJDIR)/startup_stm32f10x_md.s
SRC += $(STMDIR)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
SRC += $(STMDIR)/Libraries/STM32F10x_StdPeriph_Driver/src/misc.c
SRC += $(STMDIR)/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c
SRC += $(STMDIR)/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c
SRC += $(wildcard $(SRCDIR)/*.c)

###
### Compiler options
###

CFLAGS  = -g -O0 -Wall
CFLAGS += -mcpu=cortex-m3
CFLAGS += -mthumb
CFLAGS += -mno-thumb-interwork
CFLAGS += -std=c99
CFLAGS += -mfix-cortex-m3-ldrd
CFLAGS += -DUSE_STDPERIPH_DRIVER
CFLAGS += -DSTM32F10X_MD
CFLAGS += -I$(SRCDIR)
CFLAGS += -I$(STMDIR)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/
CFLAGS += -I$(STMDIR)/Libraries/CMSIS/CM3/CoreSupport
CFLAGS += -I$(STMDIR)/Libraries/STM32F10x_StdPeriph_Driver/inc

###
### Linker options
###

LDFLAGS  = -mcpu=cortex-m3
LDFLAGS += -mthumb
LDFLAGS += -T$(OBJDIR)/stm32_flash.ld
LDFLAGS += --specs=nosys.specs


###
### Compiler binaries
###

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

###
### Targets
###

.PHONY: all clean hex bin dump flash-via-serial

all: build bin

build:
	@mkdir -p $(BUILD)
	$(CC) $(CFLAGS) $(LDFLAGS) $(SRC) -o $(BUILD)/$(PROJECT).elf
	@chmod 644 $(BUILD)/$(PROJECT).elf
	arm-none-eabi-size $(BUILD)/$(PROJECT).elf

clean:
	@rm -rvf $(BUILD)

hex:
	$(OBJCOPY) -O ihex $(BUILD)/$(PROJECT).elf $(BUILD)/$(PROJECT).hex
	@chmod 644 $(BUILD)/$(PROJECT).hex

dump:
	$(OBJDUMP) -S --disassemble $(BUILD)/$(PROJECT).elf > $(BUILD)/$(PROJECT).dump
	@chmod 644 $(BUILD)/$(PROJECT).dump

bin:
	$(OBJCOPY) -O binary $(BUILD)/$(PROJECT).elf $(BUILD)/$(PROJECT).bin
	@chmod 644 $(BUILD)/$(PROJECT).bin

flash-via-serial:
	stm32flash -w $(BUILD)/$(PROJECT).bin $(PORT_FLASH)
