CC = arm-none-eabi-gcc
CP = arm-none-eabi-objcopy
OD = arm-none-eabi-objdump
  
INC_PATH = StdPeriphLib/inc
SRC_PATH = StdPeriphLib/src
BUILD_PATH = Build
SCRIPT_PATH = Scripts
SOURCES = $(wildcard $(SRC_PATH)/*.c)
OBJECTS = $(patsubst $(SRC_PATH)/%.c, $(BUILD_PATH)/%.o, $(SOURCES))

CFLAGS  =  -I./ -I$(INC_PATH) -ggdb -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb --specs=nano.specs --specs=rdimon.specs
LFLAGS  = -Tstm32f103_flash.ld -nostartfiles --specs=nano.specs --specs=nosys.specs -Wl,-Map -Wl,$(BUILD_PATH)/main.map
CPFLAGS = -Obinary
ODFLAGS	= -S

all: create_folder build_all

create_folder:
	-mkdir $(BUILD_PATH)

clean:
	-rm -rf $(BUILD_PATH)
	
erase:	
	perl ./$(SCRIPT_PATH)/do_erase.pl ../$(BUILD_PATH)/main.bin

flash:  
	perl ./$(SCRIPT_PATH)/do_flash.pl ../$(BUILD_PATH)/main.bin

debug: 
	perl ./$(SCRIPT_PATH)/do_debug.pl ../$(BUILD_PATH)/main.bin

build_all: $(BUILD_PATH)/main.out
	@ echo ".....copying"
	$(CP) $(CPFLAGS) $(BUILD_PATH)/main.out $(BUILD_PATH)/main.bin
	$(OD) $(ODFLAGS) $(BUILD_PATH)/main.out > $(BUILD_PATH)/main.list

$(BUILD_PATH)/main.out: $(OBJECTS) $(BUILD_PATH)/main.o $(BUILD_PATH)/system.o stm32f103_flash.ld 
	@ echo "....linking"
	$(CC) $(LFLAGS) -o $(BUILD_PATH)/main.out $(BUILD_PATH)/main.o $(BUILD_PATH)/system.o $(OBJECTS) 

$(OBJECTS): $(BUILD_PATH)/%.o: $(SRC_PATH)/%.c
	@ echo "...compiling"
	$(CC) $(CFLAGS) $< -o $@

$(BUILD_PATH)/system.o:
	@ echo "...compiling"
	$(CC) $(CFLAGS) system.c -o $(BUILD_PATH)/system.o
	 
$(BUILD_PATH)/main.o: main.c
	@ echo "...compiling"
	$(CC) $(CFLAGS) main.c -o $(BUILD_PATH)/main.o
