summaryrefslogtreecommitdiff
path: root/include.mk
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2017-08-26 00:12:55 +0200
committerChristian Pointner <equinox@spreadspace.org>2017-08-26 00:12:55 +0200
commitfd1895848012bc5b7f39969aea3759326dbd3ce5 (patch)
tree20e7eddb2f427e9e18baddfbee90e724b8fdb36a /include.mk
initial commit
Diffstat (limited to 'include.mk')
-rw-r--r--include.mk156
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