diff --git a/make/defs-cpp.mk b/make/defs-cpp.mk index 7612c992..a67a8a6c 100644 --- a/make/defs-cpp.mk +++ b/make/defs-cpp.mk @@ -22,24 +22,69 @@ endif # -- build TAGGED_TMPL_TAGS cascade +TAGGED_TMPL_MAKEFILES = $(wildcard $(addsuffix .mk,$(foreach t,$(TAGGED_TMPL_DIRS),$(addprefix $(t)/,$(TAGGED_TMPL_TAGS))))) + ifneq ($(findstring st-nucleo-f103rb,$(TAGGED_TMPL_TAGS)),) TAGGED_TMPL_TAGS += cortex-m3 MCU_BOARD_MODEL ?= ST-NUCLEO-F103RB + BUILD_CPPFLAGS += -DST_NUCLEO_F103RB MCU_FLASH_OFFSET ?= 0x0000000 MCU_FLASH_SIZE ?= 0x5000 + MCU_MEM_FETCH_OFFSET ?= 0x08000000 + MCU_MEM_FETCH_SIZE ?= $(MCU_FLASH_SIZE) + #MCU_OPENOCD_CFG_NAME ?= openocd-$(MCU_BOARD_LC).cfg MODM_BSPS += modm:nucleo-f103rb -endif + MCU_FLASH_BANK_NAME ?= internal + ifneq ($(MCU_FLASH_BANK_NAME),internal) + $(error Unsupported flash bank name "$(MCU_FLASH_BANK_NAME)") + endif +else ifneq ($(findstring st-disco-f769i,$(TAGGED_TMPL_TAGS)),) + TAGGED_TMPL_TAGS += cortex-m7 + MCU_BOARD_MODEL ?= ST-DISCO-F769I + BUILD_CPPFLAGS += -DST_DISCO_F769I + MCU_OPENOCD_CFG_NAME ?= openocd-stmqspi-st-stm32f769i-disco.cfg + MCU_FLASH_BANK_NAME ?= external + ifeq ($(MCU_FLASH_BANK_NAME),external) + MCU_FLASH_OFFSET ?= 0x00000000 + MCU_FLASH_SIZE ?= 0x04000000 + MCU_MEM_FETCH_OFFSET ?= 0x90000000 + MCU_MEM_FETCH_SIZE ?= $(MCU_FLASH_SIZE) + else ifeq ($(MCU_FLASH_BANK_NAME),internal) + MCU_FLASH_OFFSET ?= 0x00000000 + MCU_FLASH_SIZE ?= 0x00200000 + MCU_MEM_FETCH_OFFSET ?= 0x08000000 + MCU_MEM_FETCH_SIZE ?= $(MCU_FLASH_SIZE) + else + $(error Unsupported flash bank name "$(MCU_FLASH_BANK_NAME)") + endif + ifeq ($(MCU_OPENOCD_CFG_NAME),openocd-stmqspi-st-stm32f769i-disco.cfg) + ifeq ($(MCU_FLASH_BANK_NAME),external) + MCU_FLASH_BANK ?= 1 + else ifeq ($(MCU_FLASH_BANK_NAME),internal) + MCU_FLASH_BANK ?= 0 + endif + else ifeq ($(MCU_OPENOCD_CFG_NAME),openocd-st-stm32f7discovery.cfg) + ifeq ($(MCU_FLASH_BANK_NAME),external) + MCU_FLASH_BANK ?= 2 + endif + endif -ifneq ($(findstring cortex-m3,$(TAGGED_TMPL_TAGS)),) - TAGGED_TMPL_TAGS += cortex-m + # modm:disco-f769ni (SIC), not disco-f769i. mbed does the same, despite the + # fact that a board of this name doesn't exist. + MODM_BSPS += modm:disco-f769ni endif ifneq ($(findstring cortex-m,$(TAGGED_TMPL_TAGS)),) - TAGGED_TMPL_TAGS += cortex + TAGGED_TMPL_TAGS += cortex-m + ifneq ($(findstring cortex-m3,$(TAGGED_TMPL_TAGS)),) + TARGET_CPU = cortex-m3 + else ifneq ($(findstring cortex-m7,$(TAGGED_TMPL_TAGS)),) + TARGET_CPU = cortex-m7 + endif endif -ifneq ($(findstring cortex-m3,$(TAGGED_TMPL_TAGS)),) - TARGET_CPU = cortex-m3 +ifneq ($(findstring cortex,$(TAGGED_TMPL_TAGS)),) + TAGGED_TMPL_TAGS += cortex endif # ----- tool chain @@ -206,10 +251,15 @@ endif ifeq ($(TARGET_TRIPLET),arm-none-eabi) - ifneq ($(findstring $(TARGET_CPU),cortex-m3),) - + ifeq ($(TARGET_CPU),cortex-m3) PROJECT_CPPFLAGS += -mcpu=cortex-m3 -mthumb PROJECT_LDFLAGS += -mcpu=cortex-m3 -mthumb + else ifeq ($(TARGET_CPU),cortex-m7) + PROJECT_CPPFLAGS += -mcpu=cortex-m7 -mthumb + PROJECT_LDFLAGS += -mcpu=cortex-m7 -mthumb + endif + + ifneq ($(findstring cortex-m,$(TARGET_CPU)),) # don't wrap error message lines #PROJECT_LDFLAGS += -fmessage-length=0 diff --git a/make/defs.mk b/make/defs.mk index cc4ad24a..19003374 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -116,7 +116,8 @@ install_local_cfg = $(INSTALL) -p -o $(CFGOWNER) -g $(CFGGROUP) -m $( cvs_files = sh $(MOD_SCRIPT_DIR)/scm.sh ls-files -f add_flavour_prefix = $(SED) "s/\([^ ][^ ]*\) *\([<>=]*\) *\([^ ]*\)/$(FLAVOUR_PREFIX)\1 \2 \3/g" beautify_lib_path = $(SED) 's/:/\n + /g' -find_file = $(firstword $(wildcard $(addsuffix /$(1),$(patsubst :, ,$(2)))) $(1)-not-found) +find_files = $(wildcard $(addsuffix /$(1),$(patsubst :, ,$(2)))) +find_file = $(firstword $(call find_files,$(1),$(2)) $(1)-not-found) ifeq ($(INCLUDE_REV_IN_VERSIONS),true) version = $(shell $(CAT) $1/VERSION | $(SED) 's/-dev//; s/[ ]*//g') diff --git a/make/mcu-defs.mk b/make/mcu-defs.mk index aa31e83c..609938e1 100644 --- a/make/mcu-defs.mk +++ b/make/mcu-defs.mk @@ -22,17 +22,33 @@ MCU_PRODUCT_TMPL_DIR ?= $(MODDIR)/tmpl/products -MCU_BOARD_MODEL_LC ?= $(shell echo $(MCU_BOARD_MODEL) | tr '[A-Z]' '[a-z]') -MCU_BOARD ?= $(MCU_BOARD_MODEL) -MCU_BOARD_LC ?= $(shell echo $(MCU_BOARD) | tr '[A-Z]' '[a-z]') +ifneq ($(TARGET_PRODUCT),) + MCU_BOARD_MODEL_LC ?= $(TARGET_PRODUCT) + MCU_BOARD ?= $(TARGET_PRODUCT) + MCU_BOARD_LC ?= $(TARGET_PRODUCT) +else + MCU_BOARD_MODEL_LC ?= $(shell echo $(MCU_BOARD_MODEL) | tr '[A-Z]' '[a-z]') + MCU_BOARD ?= $(MCU_BOARD_MODEL) + MCU_BOARD_LC ?= $(shell echo $(MCU_BOARD) | tr '[A-Z]' '[a-z]') +endif MCU_OPENOCD_CFG_NAME ?= openocd-$(MCU_BOARD_LC).cfg MCU_OPENOCD_CFG_DEFAULT_SEARCH_PATH ?= $(TOPDIR)/make MCU_OPENOCD_CFG_SEARCH_PATH ?= $(MCU_OPENOCD_CFG_DEFAULT_SEARCH_PATH) -MCU_OPENOCD_CFG_FILE ?= $(call find_file,$(MCU_OPENOCD_CFG_NAME),$(MCU_OPENOCD_CFG_SEARCH_PATH)) -MCU_OPENOCD_OPTS ?= -f $(MCU_OPENOCD_CFG_FILE) -c "echo \"Started by jw-build\"" -c "gdb_port 3333" -c "telnet_port 4444" -c "tcl_port 6666" +MCU_OPENOCD_CFG_FILE ?= $(info looking for $(MCU_OPENOCD_CFG_NAME) in $(MCU_OPENOCD_CFG_SEARCH_PATH)) $(call find_file,$(MCU_OPENOCD_CFG_NAME),$(MCU_OPENOCD_CFG_SEARCH_PATH)) +MCU_OPENOCD_TELNET_PORT ?= 4444 +MCU_OPENOCD_OPTS ?= -f $(MCU_OPENOCD_CFG_FILE) -c "echo \"Started by jw-build\"" -c "gdb_port 3333" -c "telnet_port $(MCU_OPENOCD_TELNET_PORT)" -c "tcl_port 6666" MCU_OPENOCD_BIN ?= openocd -MCU_OPENOCD ?= $(MCU_OPENOCD_BIN) $(MCU_OPENOCD_OPTS) +MCU_OPENOCD ?= $(MCU_OPENOCD_BIN) $(MCU_OPENOCD_OPTS) $(MCU_OPENOCD_EXTRA_OPTS) + +# -- direct flash access +MCU_FLASH_BANK ?= 0 +#MCU_FLASH_OFFSET ?= 0x0000000 +#MCU_FLASH_SIZE ?= 0x5000 + +MCU_FLASH_FILE_BASE ?= $(MCU_BOARD_LC)-flash-$(MCU_FLASH_BANK_NAME) +MCU_FLASH_FILE_BIN ?= $(MCU_FLASH_FILE_BASE).bin +MCU_FLASH_FILE_HEX ?= $(MCU_FLASH_FILE_BASE).hex MCU_FLASH_FETCH_BANK ?= $(MCU_FLASH_BANK) MCU_FLASH_FETCH_FILE_BIN ?= $(MCU_FLASH_FILE_BIN) @@ -46,12 +62,21 @@ MCU_FLASH_PUSH_FILE_HEX ?= $(MCU_FLASH_FILE_HEX) MCU_FLASH_PUSH_OFFSET ?= $(MCU_FLASH_OFFSET) MCU_FLASH_PUSH_SIZE ?= $(MCU_FLASH_SIZE) -MCU_FLASH_BANK ?= 0 -MCU_FLASH_FILE_BIN ?= $(TOPDIR)/bin/$(MCU_BOARD_LC).bin -MCU_FLASH_FILE_HEX ?= $(TOPDIR)/bin/$(MCU_BOARD_LC).hex -#MCU_FLASH_OFFSET ?= 0x0000000 -#MCU_FLASH_SIZE ?= 0x5000 +# -- direct memory access +MCU_MEM_FETCH_FILE_BIN ?= $(MCU_MEM_FILE_BIN) +MCU_MEM_FETCH_FILE_HEX ?= $(MCU_MEM_FILE_HEX) +MCU_MEM_FETCH_OFFSET ?= $(MCU_FLASH_OFFSET) +MCU_MEM_FETCH_SIZE ?= $(MCU_FLASH_SIZE) -ifneq ($(MCU_FLASH_FETCH_OFFSET),) - MCU_OBJCOPY_FETCH_OPTS += --change-addresses $(MCU_FLASH_FETCH_OFFSET) +MCU_MEM_PUSH_FILE_BIN ?= $(MCU_MEM_FILE_BIN) +MCU_MEM_PUSH_FILE_HEX ?= $(MCU_MEM_FILE_HEX) +MCU_MEM_PUSH_OFFSET ?= $(MCU_FLASH_OFFSET) +MCU_MEM_PUSH_SIZE ?= $(MCU_FLASH_SIZE) + +MCU_MEM_FILE_BASE ?= $(MCU_BOARD_LC)-mem-$(MCU_MEM_FETCH_OFFSET)-$(MCU_MEM_FETCH_SIZE) +MCU_MEM_FILE_BIN ?= $(MCU_MEM_FILE_BASE).bin +MCU_MEM_FILE_HEX ?= $(MCU_MEM_FILE_BASE).hex + +ifneq ($(MCU_MEM_FETCH_OFFSET),) + MCU_OBJCOPY_FETCH_OPTS += --change-addresses $(MCU_MEM_FETCH_OFFSET) endif diff --git a/make/mcu-exe.mk b/make/mcu-exe.mk index 3264968c..4fdeeea7 100644 --- a/make/mcu-exe.mk +++ b/make/mcu-exe.mk @@ -2,9 +2,9 @@ DIR_BASENAME = $(notdir $(CWD)) ifeq ($(EXE_BASENAME),) ifneq ($(DIR_BASENAME),test) - EXE_BASENAME = $(DIR_BASENAME).elf + EXE_BASENAME = $(EXE_BASENAME_PREFIX)$(DIR_BASENAME).elf else - EXE_BASENAME = test-$(notdir $(shell cd ..; $(PWD))).elf + EXE_BASENAME = $(EXE_BASENAME_PREFIX)test-$(notdir $(shell cd ..; $(PWD))).elf endif endif @@ -16,6 +16,7 @@ include $(MODDIR)/make/exe.mk include $(MODDIR)/make/mcu-flash.mk all: $(MCU_FLASH_PUSH_FILE_HEX) + clean: mcu-exe.clean mcu-exe.clean: diff --git a/make/mcu-flash.mk b/make/mcu-flash.mk index b5cb313d..19685abd 100644 --- a/make/mcu-flash.mk +++ b/make/mcu-flash.mk @@ -3,14 +3,21 @@ all: flash-fetch: $(MCU_FLASH_FETCH_FILE_HEX) +flash-fetch-mem: $(MCU_MEM_FETCH_FILE_HEX) clean: flash-clean-fetch flash-clean-fetch: rm -f $(MCU_FLASH_FETCH_FILE_BIN) $(MCU_FLASH_FETCH_FILE_HEX) *.tmp + rm -f $(MCU_MEM_FETCH_FILE_BIN) $(MCU_MEM_FETCH_FILE_HEX) flash-clean-push: rm -f $(MCU_FLASH_PUSH_FILE_BIN) $(MCU_FLASH_PUSH_FILE_HEX) *.tmp + rm -f $(MCU_MEM_PUSH_FILE_BIN) $(MCU_MEM_PUSH_FILE_HEX) +flash-clean: flash-clean-fetch flash-clean-push $(MCU_FLASH_FETCH_FILE_BIN): $(MCU_OPENOCD) -c "init" -c "reset init" -c "flash read_bank $(MCU_FLASH_FETCH_BANK) $@.tmp $(MCU_FLASH_FETCH_OFFSET) $(MCU_FLASH_FETCH_SIZE)" -c "exit" mv $@.tmp $@ +$(MCU_MEM_FETCH_FILE_BIN): + $(MCU_OPENOCD) -c "init" -c "reset init" -c "dump_image $@.tmp $(MCU_MEM_FETCH_OFFSET) $(MCU_MEM_FETCH_SIZE)" -c "exit" + mv $@.tmp $@ %.hex: %.elf $(OBJCOPY) -O ihex $< $@.tmp mv $@.tmp $@ @@ -25,3 +32,14 @@ flash-push: $(MCU_OPENOCD) -c "program $(MCU_FLASH_PUSH_FILE_HEX) verify reset exit $(MCU_FLASH_PUSH_OFFSET)" %-flash-push: MCU_FLASH_PUSH_FILE_HEX=$* make flash-push + +openocd: + $(MCU_OPENOCD) +openocd-bg: + $(MCU_OPENOCD) & +openocd-reset-bg: + $(MCU_OPENOCD) -c "init" -c "reset init" & +openocd-kill: + killall $(MCU_OPENOCD_BIN) +openocd-telnet: + telnet localhost $(MCU_OPENOCD_TELNET_PORT) diff --git a/make/platform.mk b/make/platform.mk index b95b4908..fa4f0992 100644 --- a/make/platform.mk +++ b/make/platform.mk @@ -21,6 +21,26 @@ ifndef GET_OS_SH GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh endif +# -- product + +TARGET_PRODUCTS_ARM_NONE_EABI = \ + st-nucleo-f103rb \ + st-disco-f769i + +TAGGED_TMPL_TAGS_ARM_NONE_EABI ?= $(TARGET_PRODUCTS_ARM_NONE_EABI) + +TARGET_PRODUCTS += \ + $(TARGET_PRODUCTS_ARM_NONE_EABI) +TARGET_PRODUCT = $(firstword $(foreach t,$(TAGGED_TMPL_TAGS),$(filter $(t),$(TARGET_PRODUCTS)))) + +TAGGED_TMPL_MAKEFILES = $(wildcard $(addsuffix .mk,$(foreach t,$(TAGGED_TMPL_DIRS),$(addprefix $(t)/,$(TAGGED_TMPL_TAGS))))) + +ifneq ($(foreach t,$(TAGGED_TMPL_TAGS),$(filter $(t),$(TAGGED_TMPL_TAGS_ARM_NONE_EABI))),) + TARGET_TRIPLET ?= arm-none-eabi +endif + +# -- arch, vendor, os, libc + ifeq ($(HOST_TUPLE),) HOST_TUPLE := $(shell $(GET_OS_SH) tuple) HOST_TUPLE_WORDS := $(subst -, ,$(HOST_TUPLE)) diff --git a/make/run.mk b/make/run.mk index 83c107a2..f98c71c7 100644 --- a/make/run.mk +++ b/make/run.mk @@ -8,11 +8,15 @@ include $(MODDIR)/make/defs-cpp.mk DIR_BASENAME = $(notdir $(CWD)) +ifneq ($(TARGET_PRODUCT),) + EXE_BASENAME_PREFIX ?= $(TARGET_PRODUCT)- +endif + ifeq ($(EXE_BASENAME),) ifneq ($(DIR_BASENAME),test) - EXE_BASENAME = $(DIR_BASENAME) + EXE_BASENAME = $(EXE_BASENAME_PREFIX)$(DIR_BASENAME) else - EXE_BASENAME = test-$(notdir $(shell cd ..; $(PWD))) + EXE_BASENAME = $(EXE_BASENAME_PREFIX)test-$(notdir $(shell cd ..; $(PWD))) endif endif