##########################################################################
# User configuration and firmware specific object files	
##########################################################################
#
#  Makefile for gcc
#
ROOT_PATH = .

VPATH = . ./src
OBJS  = 

# C++ files
OBJS  += main.o
OBJS  += gpio.o
OBJS  += usart1.o
OBJS  += print.o
OBJS  += adcirq.o
OBJS  += filter.o
# C files
OBJS  += startup.o
OBJS  += csystem.o

##########################################################################
# GNU GCC compiler flags
##########################################################################
INCLUDE_PATHS  = -I.
INCLUDE_PATHS += -I$(ROOT_PATH)/inc
INCLUDE_PATHS += -I$(ROOT_PATH)/lib/inc

##########################################################################
# GNU GCC compiler prefix and location
##########################################################################

#CC = clang -ccc-gcc-name arm-none-eabi-g++ -target arm -mfloat-abi=soft
#CCP = clang++ -ccc-gcc-name arm-none-eabi-g++ -target arm -mfloat-abi=soft

CROSS_COMPILE = arm-none-eabi-
AS  = $(CROSS_COMPILE)gcc
CC  = $(CROSS_COMPILE)gcc
LD  = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
SIZE = $(CROSS_COMPILE)size
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
OUTFILE = Hdo

##########################################################################
# Startup files
##########################################################################

LD_PATH   = $(ROOT_PATH)/lib/
#LD_SCRIPT = stm32_ram.ld
LD_SCRIPT = stm32_flash.ld


CPU_TYPE = cortex-m0

##########################################################################
# Compiler settings, parameters and flags
##########################################################################
MFLAGS  = -mthumb -mcpu=$(CPU_TYPE)

CFLAGS  = $(MFLAGS)
CFLAGS += -c -Os $(INCLUDE_PATHS) -Wall -g

ASFLAGS:= $(CFLAGS)
ASFLAGS+= -D__ASSEMBLY__ -x assembler-with-cpp

CFLAGS += -ffunction-sections -fdata-sections -fmessage-length=0
CFLAGS += -fno-short-enums
#CFLAGS += -Wa,-adhlns=$(subst $(suffix $<),.lst,$(<F))

LDFLAGS = $(MFLAGS)
LDFLAGS+= -nostartfiles
LDFLAGS+= -Wl,--gc-sections
#LDFLAGS+= -Wl,-Map=$(OUTFILE).map,--cref
LDLIBS  = -L $(LD_PATH) -T $(LD_SCRIPT)
LDLIBS += -laeabi-cortexm0
#LDLIBS += -lc -lnosys -lstdc++
OCFLAGS = --strip-unneeded

CPFLAGS = $(CFLAGS)
CPFLAGS+= -fno-rtti -fno-exceptions

all: $(OUTFILE).elf calculate

calculate: ./calc/coef.c
	gcc -Os -o calculate ./calc/coef.c -lm

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

%.o : %.cpp
	$(CC) $(CPFLAGS) -o $@ $<

%.o : %.s
	$(AS) $(ASFLAGS) -o $@ $<

$(OUTFILE).elf: $(OBJS)
	$(LD) $(LDFLAGS) -o $(OUTFILE).elf $(OBJS) $(LDLIBS)
	-@echo "Project size :"
	$(SIZE) $(OUTFILE).elf
	-@echo ""
	$(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin
#	$(OBJCOPY) $(OCFLAGS) -O ihex $(OUTFILE).elf $(OUTFILE).hex
#	$(OBJDUMP) -h -S $(OUTFILE).elf > $(OUTFILE).lst
#	-@echo ""

clean:
	rm -f $(OBJS) $(LD_TEMP) $(OUTFILE).elf # $(OUTFILE).bin $(OUTFILE).hex
	rm -f $(OUTFILE).map *~ *.lst
	$(foreach XPATH, $(VPATH), rm -f $(XPATH)/*~ )
	rm -f  $(ROOT_PATH)/inc/*~ calculate
