#------------------------------------------------------------------------------
#
# Makefile, accelerometr
#
#------------------------------------------------------------------------------
#
# 
#
#------------------------------------------------------------------------------

# Исполняемый файл помещается в директорию build
# Сборка прошивки с внешним сторожевым таймером
# make all
# Сборка прошивки с внутренним сторожевым таймером
# make all CFLAGS='-DUSE_IWDG'
# Прошивка исполняемого файла в устройство
# make install

TARGET=Accelerometr

ifeq ($(origin CC),default) 
CC = sdcc
endif
AS=sdasstm8
LD=sdldstm8
FLASHER=stlinkv2

MCU=stm8
DEVICE=stm8l101f3

SIZE=stm8-size

override CFLAGS +=-V --opt-code-size -c -D__SDCC__
ASFLAGS=-plosgffw
LDFLAGS = -f ld.lk
OUT_O_DIR ?= build

SRC_LIB_DIR = Libraries/STM8L10x_StdPeriph_Driver

COMMONINC += -I./inc 
COMMONINC += -I$(SRC_LIB_DIR)/inc

ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

override CFLAGS += $(COMMONINC)

CSRC = main.c watchdog.c lis3dh.c eeprom.c
CSRC += $(SRC_LIB_DIR)/src/stm8l10x_spi.c $(SRC_LIB_DIR)/src/stm8l10x_clk.c 
CSRC += $(SRC_LIB_DIR)/src/stm8l10x_gpio.c $(SRC_LIB_DIR)/src/stm8l10x_exti.c 
CSRC += $(SRC_LIB_DIR)/src/stm8l10x_tim2.c $(SRC_LIB_DIR)/src/stm8l10x_tim3.c 
CSRC += $(SRC_LIB_DIR)/src/stm8l10x_tim4.c $(SRC_LIB_DIR)/src/stm8l10x_itc.c 
CSRC += $(SRC_LIB_DIR)/src/stm8l10x_flash.c $(SRC_LIB_DIR)/src/stm8l10x_iwdg.c

ASRC += asmSDCC.s

# reproducing source tree in object tree
COBJ := $(addprefix $(OUT_O_DIR)/,$(CSRC:.c=.rel))
ASMOBJ := $(addprefix $(OUT_O_DIR)/,$(ASRC:.s=.rel))

%.rel:	%.s
	$(AS) $(ASFLAGS)  $<

.PHONY: all
all: $(OUT_O_DIR)/$(TARGET).ihx

$(OUT_O_DIR)/$(TARGET).ihx: $(COBJ) $(ASMOBJ) $(LIB)
	$(LD) $(LDFLAGS) -i $@ $^
#	$(SIZE) $@

# static pattern rule to not redefine generic one
$(COBJ) : $(OUT_O_DIR)/%.rel : %.c | $(OUT_O_DIR)
	-@mkdir $(subst /,\,$(@D))
	$(CC) -m$(MCU) $(CFLAGS) -o "$(@D)"/ $<
# $(CC) -m$(MCU) $(CFLAGS) -o "$(OUT_O_DIR)"/ $<

# static pattern rule to not redefine generic one
$(ASMOBJ) : $(OUT_O_DIR)/%.rel : %.s | $(OUT_O_DIR)
	-@mkdir $(subst /,\,$(@D))
	$(AS) $(ASFLAGS) -o $@ $<

$(OUT_O_DIR):
	mkdir $@

.PHONY: info
info:;echo $(LIB)

.PHONY: rebuild
rebuild:
	make clean
	make all

.PHONY: clean
clean:
	del /S /Q build\*
#	@rm -rf $(COBJ) $(OUT_O_DIR)/*.ihx $(OUT_O_DIR)/*.log

.PHONY: install
install:
	stm8flash -c $(FLASHER) -p $(DEVICE) -w $(TARGET).ihx
