make: Improve flash-fetch targets

- Add support MCU_FLASH_BANK_NAME to support multiple banks
- Prefix binaries with TARGET_PRODUCT, if defined
- Fix flash data for stm32f769i-disco

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2019-03-29 13:32:16 +00:00
commit 9c773838c7
7 changed files with 145 additions and 26 deletions

View file

@ -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

View file

@ -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')

View file

@ -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

View file

@ -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:

View file

@ -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)

View file

@ -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))

View file

@ -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