#define variables

#for libopencm3
OPENCM3_DIR := ../../libopencm3
LHPLIB_DIR   = ../../libLHP
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 -I$(LHPLIB_DIR)/inc

#for the linking
LD_FLAGS     += -L$(OPENCM3_DIR)/lib -L$(LHPLIB_DIR)/ -lc -lgcc -lnosys -llhp -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

LHPLIB_FLAGS    := -DUSING_D1W_ASYNC
STFLASH         := st-flash

PROJECT         = 1w_mitm

export LHPLIB_FLAGS

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

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

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

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

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

lib:
	$(MAKE) -C $(OPENCM3_DIR) TARGETS=stm32/f1 -j `nproc`
	$(MAKE) -C $(LHPLIB_DIR) -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).o : $(PROJECT).c
	$(CC) $(C_FLAGS) $(INC_FLAGS) -c -o $(PROJECT).o $(PROJECT).c

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

$(PROJECT).elf : lib $(PROJECT).o m31820.o
	$(CC) $(C_FLAGS) -o $(PROJECT).elf $(PROJECT).o m31820.o $(LD_FLAGS)
	@echo
	@echo 'scale=10;(' `arm-none-eabi-size 1w_mitm.elf |grep elf|tr "\t" ' ' |tr -s ' '|cut -d' ' -f2,3 | tr ' ' '+'|bc` "/(64*1024))*100" |bc | tr -d '\n'
	@echo ' % occupied'
	@echo		
