################################################################################
#                                                                              #
#  Makefile for STM32F405xG						       #
#                                                                              #
#  (c) 2015-2019 Joerg Wolfram (joerg@jcwolfram.de)                            #
#                                                                              #
################################################################################

myNAME=gtmicro

################################################################################

DEVICE=stm32f405xg
PDEVICE=STM32F4xx-1024k

TOOLPREFIX=/usr/local/toolchain/arm-none-eabi/bin/arm-none-eabi

CC=$(TOOLPREFIX)-gcc
AS=$(TOOLPREFIX)-as
AR=$(TOOLPREFIX)-ar
LD=$(TOOLPREFIX)-gcc
OC=$(TOOLPREFIX)-objcopy
OD=$(TOOLPREFIX)-objdump
SZ=$(TOOLPREFIX)-size

CFLAGS=-Wall -O3 -mthumb -mcpu=cortex-m4 -fno-builtin -fno-common -nostartfiles -nostdlib -fshort-double
CFLAGS+=-I./inc

LDOPTS=-Wl,-script=inc/$(DEVICE).x
LDOPTS+=-nostartfiles -nostdlib
OCFLAGS=-O srec
OC1FLAGS=-O ihex
ODFLAGS=-S -D -xdC
ARFLAGS=rcs

ASOURCES     := $(shell find -L ./src/ -type f -name *.s)
AOBJECTS     := $(patsubst ./%,build/%,$(ASOURCES:.s=.o))

################################################################################

bin:	dir $(AOBJECTS)
	$(LD) $(LDOPTS)  -o $(myNAME).elf $(COBJECTS) $(AOBJECTS) $(LDFLAGS) $(LIBS)
	$(OC) $(OCFLAGS) $(myNAME).elf $(myNAME).s39
	$(OD) $(ODFLAGS) $(myNAME).elf > $(myNAME).lst
	$(SZ) $(myNAME).elf
	@dos2unix $(myNAME).s39

build/%.o: ./%.s
	mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -o $@ $<

dir:	
	mkdir -p build

prog:	clean bin
	uprog2 $(PDEVICE) -empm $(myNAME).s39

start:	prog
	uprog2 $(PDEVICE) -st

clean:
	@rm -rf build
	@rm -f $(myNAME).elf
	@rm -f $(myNAME).s39
	@rm -f $(myNAME).a
