diff --git a/.travis.yml b/.travis.yml index 3b399804e3..14595ddeb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -99,7 +99,7 @@ jobs: - make ${MAKEOPTS} -C ports/stm32 submodules - git submodule update --init lib/btstack - make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_F091RC - - make ${MAKEOPTS} -C ports/stm32 BOARD=PYBV11 MICROPY_PY_WIZNET5K=5200 MICROPY_PY_CC3K=1 + - make ${MAKEOPTS} -C ports/stm32 BOARD=PYBV11 MICROPY_PY_WIZNET5K=5200 MICROPY_PY_CC3K=1 USER_C_MODULES=../../examples/usercmodule CFLAGS_EXTRA="-DMODULE_CEXAMPLE_ENABLED=1 -DMODULE_CPPEXAMPLE_ENABLED=1" - make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF2 - make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF6 NANBOX=1 MICROPY_BLUETOOTH_NIMBLE=0 MICROPY_BLUETOOTH_BTSTACK=1 - make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_H743ZI CFLAGS_EXTRA='-DMICROPY_PY_THREAD=1' diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index cf3a589ca9..61da9cc980 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -138,6 +138,13 @@ else COPT += -Os -DNDEBUG endif +# Flags for optional C++ source code +CXXFLAGS += $(filter-out -Wmissing-prototypes -Wold-style-definition -std=gnu99,$(CFLAGS)) +CXXFLAGS += $(CXXFLAGS_MOD) +ifneq ($(SRC_CXX)$(SRC_MOD_CXX),) +LDFLAGS += -L$(dir $(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)) +endif + # Options for mpy-cross MPY_CROSS_FLAGS += -march=armv7m @@ -330,6 +337,9 @@ SRC_C += \ adc.c \ $(wildcard $(BOARD_DIR)/*.c) +SRC_CXX += \ + $(SRC_MOD_CXX) + SRC_O += \ $(STARTUP_FILE) \ $(SYSTEM_FILE) @@ -511,6 +521,7 @@ OBJ += $(LIBM_O) OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) +OBJ += $(addprefix $(BUILD)/, $(SRC_CXX:.cpp=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_O)) OBJ += $(addprefix $(BUILD)/, $(SRC_HAL:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_USBDEV:.c=.o)) @@ -644,7 +655,7 @@ GEN_CDCINF_FILE = $(HEADER_BUILD)/pybcdc.inf GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h # List of sources for qstr extraction -SRC_QSTR += $(SRC_C) $(SRC_MOD) $(LIB_SRC_C) $(EXTMOD_SRC_C) +SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SRC_MOD) $(LIB_SRC_C) $(EXTMOD_SRC_C) # Append any auto-generated sources that are needed by sources listed in # SRC_QSTR SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER) diff --git a/ports/stm32/boards/common_extratext_data_in_flash.ld b/ports/stm32/boards/common_extratext_data_in_flash.ld index e5f25a3c6f..eb9b86f49d 100644 --- a/ports/stm32/boards/common_extratext_data_in_flash.ld +++ b/ports/stm32/boards/common_extratext_data_in_flash.ld @@ -1,5 +1,13 @@ /* This linker script fragment is intended to be included in SECTIONS. */ +/* For C++ exception handling */ +.ARM : +{ + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; +} >FLASH + /* Used by the start-up code to initialise data */ _sidata = LOADADDR(.data); diff --git a/ports/stm32/boards/common_extratext_data_in_flash_app.ld b/ports/stm32/boards/common_extratext_data_in_flash_app.ld index 8230f8f9b2..aba6bf57c8 100644 --- a/ports/stm32/boards/common_extratext_data_in_flash_app.ld +++ b/ports/stm32/boards/common_extratext_data_in_flash_app.ld @@ -1,5 +1,13 @@ /* This linker script fragment is intended to be included in SECTIONS. */ +/* For C++ exception handling */ +.ARM : +{ + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; +} >FLASH_APP + /* Used by the start-up code to initialise data */ _sidata = LOADADDR(.data); diff --git a/ports/stm32/boards/common_extratext_data_in_flash_text.ld b/ports/stm32/boards/common_extratext_data_in_flash_text.ld index 526d2519f7..5a29e47307 100644 --- a/ports/stm32/boards/common_extratext_data_in_flash_text.ld +++ b/ports/stm32/boards/common_extratext_data_in_flash_text.ld @@ -1,5 +1,13 @@ /* This linker script fragment is intended to be included in SECTIONS. */ +/* For C++ exception handling */ +.ARM : +{ + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; +} >FLASH_TEXT + /* Used by the start-up code to initialise data */ _sidata = LOADADDR(.data); diff --git a/ports/stm32/main.c b/ports/stm32/main.c index b5dbfa50fd..f19dac0e79 100644 --- a/ports/stm32/main.c +++ b/ports/stm32/main.c @@ -133,6 +133,10 @@ void nlr_jump_fail(void *val) { __fatal_error(""); } +void abort(void) { + __fatal_error("abort"); +} + #ifndef NDEBUG void MP_WEAK __assert_func(const char *file, int line, const char *func, const char *expr) { (void)func;