#define variables

#for libopencm3
OPENCM3_DIR := ../../libopencm3
LIBDIR       = $(OPENCM3_DIR)/lib
LDSCRIPT     = stm32/f1/stm32f103x8.ld
LIBNAME	     = opencm3_stm32f1

#for the compilation
C_FLAGS	     = -msoft-float -mthumb -mcpu=cortex-m3 -Os -DSTM32F1 --specs=nosys.specs 
INC_FLAGS    += -I$(OPENCM3_DIR)/include

#for the linking
LD_FLAGS     += -L$(OPENCM3_DIR)/lib -lc -lgcc -lnosys -l$(LIBNAME) -T$(LDSCRIPT) -nostartfiles --static 

#for the tools
PREFIX		?= arm-none-eabi
CC		:= $(PREFIX)-gcc
CXX		:= $(PREFIX)-g++
LD		:= $(PREFIX)-gcc
AR		:= $(PREFIX)-ar
AS		:= $(PREFIX)-as
SIZE		:= $(PREFIX)-size
OBJCOPY		:= $(PREFIX)-objcopy
OBJDUMP		:= $(PREFIX)-objdump
GDB	        := gdb-multiarch

STFLASH         := st-flash

PROJECT         = blink

# tells make that these don't produce a file
.PHONY: clean flash lib $(PROJECT)

$(PROJECT) : $(PROJECT).elf $(PROJECT).bin $(PROJECT).hex ;

clean :
	@rm *.bin *.hex *.elf *.o

ultraclean:
	$(MAKE) -C $(OPENCM3_DIR) clean
	@rm *.bin *.hex *.elf *.o

lib:
	$(MAKE) -C $(OPENCM3_DIR) TARGETS=stm32/f1 -j `nproc`

flash : $(PROJECT).bin
	$(STFLASH) write $(PROJECT).bin 0x8000000

%.bin: %.elf
	$(OBJCOPY) -Obinary $(PROJECT).elf $(PROJECT).bin

%.hex: %.elf
	$(OBJCOPY) -Oihex $(PROJECT).elf $(PROJECT).hex

$(PROJECT).elf : $(PROJECT).o lib
	$(CC) $(C_FLAGS) -o $(PROJECT).elf $(PROJECT).o $(LD_FLAGS)

$(PROJECT).o : $(PROJECT).c
	$(CC) $(C_FLAGS) $(INC_FLAGS) -c -o $(PROJECT).o $(PROJECT).c



