## ## spreadspace stm8 utils ## ## ## Copyright (C) 2017 Christian Pointner ## ## This file is part of spreadspace stm8 utils. ## ## spreadspace stm8 utils is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## any later version. ## ## spreadspace stm8 utils is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with spreadspace stm8 utils. If not, see . ## ifndef SPREADSTM8_PATH SPREADSTM8_PATH := .. endif include $(SPREADSTM8_PATH)/defines.mk ifndef MCU $(error Unknown board: '$(BOARD_TYPE)') endif ## project-specific objects SRC := $(OBJ:%.rel=%.c) DEP := $(SRC:%.c=%.d) OBJ_LIB := $(LIBS:%=lib-%.rel) SRC_LIB := $(LIBS:%=$(LIB_DIR)/%.c) DEP_LIB := $(LIBS:%=lib-%.d) .PHONY: prepare clean clean-external distclean clean-spl program erase flash reset run ELFFILE := $(NAME).elf HEXFILE := $(NAME).hex all: prepare $(HEXFILE) ## external Libs LDFLAGS += -L./ ifdef SPL_PATH CFLAGS += -D$(SPL_MCU) ifdef F_XTAL CFLAGS += -DHSE_VALUE="((uint32_t)$(F_XTAL))" endif CFLAGS += -I./ CFLAGS += -I$(SPL_PATH)/Libraries/STM8S_StdPeriph_Driver/inc endif prepare: $(EXTERNAL_LIBS:%=build-%) clean-external: $(EXTERNAL_LIBS:%=clean-%) export build-spl: spl.lib spl.lib: Makefile @echo "" @echo "****************************************************" @echo "* building external STM8S StdPeriph lib ($(SPL_PATH))" @echo "" make -f $(SPREADSTM8_PATH)/spl.mk spl.lib make -f $(SPREADSTM8_PATH)/spl.mk clean @echo "" @echo "****************************************************" clean-spl: @echo "" @echo "****************************************************" @echo "cleaning external STM8S StdPeriph lib ($(SPL_PATH))" @echo "" make -f $(SPREADSTM8_PATH)/spl.mk clean rm -f spl.lib @echo "" @echo "****************************************************" ## project-specific objects %.d: %.c Makefile @set -e; rm -f $@; \ $(CC) -MM $(CFLAGS) -E $< > $@.$$$$; \ sed 's,\($*\)\.rel[ :]*,\1.rel $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$; echo '(re)building $@' lib-%.d: $(LIB_DIR)/%.c Makefile @set -e; rm -f $@; \ $(CC) -MM $(CFLAGS) -E $< > $@.$$$$; \ sed 's,\($*\)\.rel[ :]*,lib-\1.rel $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$; echo '(re)building $@' ifneq ($(MAKECMDGOALS),distclean) -include $(DEP) -include $(DEP_LIB) endif %.rel: %.c Makefile $(CC) $(CFLAGS) -c $< -o $@ lib-%.rel: $(LIB_DIR)/%.c Makefile $(CC) $(CFLAGS) -c $< -o $@ $(HEXFILE): $(OBJ_LIB) $(EXTERNAL_LIBS:%=%.lib) $(OBJ) $(CC) $(LDFLAGS) --out-fmt-ihx $(OBJ) $(OBJ_LIB) $(EXTERNAL_LIBS:%=-l%) -o $@ @echo "" clean: rm -f *.cdb rm -f *.d rm -f *.d.* rm -f *.rel rm -f *.rst rm -f *.lst rm -f *.sym rm -f *.asm rm -f *.lk rm -f *.map rm -f $(HEXFILE) distclean: clean-external clean ### stlink define stlink/erase endef define stlink/flash $(stm8flash) -c stlink -p $(MCU) -w $1 endef define stlink/run endef ### stlinkv2 define stlinkv2/erase endef define stlinkv2/flash $(stm8flash) -c stlinkv2 -p $(MCU) -w $1 endef define stlinkv2/run endef ### stm8gal define stm8gal/erase endef define stm8gal/flash $(stm8gal) -p $(UPLOAD_PORT) -b $(UPLOAD_RATE) -w $1 -Q endef define stm8gal/run endef ### Program Targets program: reset erase flash run erase: $(call $(PROG)/$@,) flash: $(HEXFILE) $(call $(PROG)/$@,$(HEXFILE)) run: $(call $(PROG)/$@,) reset: @if [ -n "$(RESET_FUNC)" ]; then \ if [ -x "$(RESET_FUNC)" ]; then \ eval $(RESET_FUNC) $(RESET_PARAM); \ else \ echo "WARNING: ignoring non-existing or non-executable reset script"; \ fi \ fi