diff options
author | Christian Pointner <equinox@spreadspace.org> | 2017-08-26 00:12:55 +0200 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2017-08-26 00:12:55 +0200 |
commit | fd1895848012bc5b7f39969aea3759326dbd3ce5 (patch) | |
tree | 20e7eddb2f427e9e18baddfbee90e724b8fdb36a /include.mk |
initial commit
Diffstat (limited to 'include.mk')
-rw-r--r-- | include.mk | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/include.mk b/include.mk new file mode 100644 index 0000000..f782fc9 --- /dev/null +++ b/include.mk @@ -0,0 +1,156 @@ +## +## spreadspace stm8 utils +## +## +## Copyright (C) 2017 Christian Pointner <equinox@spreadspace.org> +## +## 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 <http://www.gnu.org/licenses/>. +## + +ifndef SPREADSTM8_PATH +SPREADSTM8_PATH := .. +endif +include $(SPREADSTM8_PATH)/defines.mk + +## 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-stdperiph program erase flash reset run + +ELFFILE := $(NAME).elf +HEXFILE := $(NAME).hex + +all: prepare $(HEXFILE) + + +## external Libs +LDFLAGS += -L./ + +ifdef STDPERIPH_PATH +CFLAGS += -D$(STDPERIPH_MCU) +CFLAGS += -I./ +CFLAGS += -I$(STDPERIPH_PATH)/Libraries/STM8S_StdPeriph_Driver/inc +endif + +prepare: $(EXTERNAL_LIBS:%=build-%) +clean-external: $(EXTERNAL_LIBS:%=clean-%) + +export + +build-stdperiph: libstdperiph.a + +libstdperiph.a: Makefile + @echo "" + @echo "****************************************************" + @echo "* building external STM8S StdPeriph lib ($(STDPERIPH_PATH))" + @echo "" + make -f $(SPREADSTM8_PATH)/stdperiph.mk libstdperiph.a + make -f $(SPREADSTM8_PATH)/stdperiph.mk clean + @echo "" + @echo "****************************************************" + +clean-stdperiph: + @echo "" + @echo "****************************************************" + @echo "cleaning external STM8S StdPeriph lib ($(STDPERIPH_PATH))" + @echo "" + make -f $(SPREADSTM8_PATH)/stdperiph.mk clean + rm -f libstdperiph.a + @echo "" + @echo "****************************************************" + + + +## project-specific objects +%.d: %.c Makefile + @set -e; rm -f $@; \ + $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.rel[ :]*,\1.rel $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$; echo '(re)building $@' + +lib-%.d: $(LIB_DIR)/%.c Makefile + @set -e; rm -f $@; \ + $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ + 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) $(OBJ) + $(CC) $(LDFLAGS) --out-fmt-ihx $(OBJ) $(OBJ_LIB) -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 + +### stm8flash +define stm8flash/erase +endef + +define stm8flash/flash + $(stm8flash) -c stlink -p $(MCU) -w $1 +endef + +define stm8flash/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 |