From f15f4fb76fc83f5176f17fbfce05cb5b761a2fac Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Sun, 12 Jun 2016 01:10:57 +0100 Subject: [PATCH] Only allow one thread on unsafe standard libs When using a standard library which does not support multi-threading allow only one thread to be used. This allows the code to remain safe. This also pulls up on the mbed library to use this change: https://github.com/mbedmicro/mbed/compare/df0c855df97688074545693f66bcca5cf9f42111...5acdad9fd7b334a5a2fbe2f927f0a091ae0a914e --- mbed.lib | 2 +- tools/toolchains/arm.py | 4 ++++ tools/toolchains/gcc.py | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mbed.lib b/mbed.lib index 5d4b3928f6..ff0438e019 100644 --- a/mbed.lib +++ b/mbed.lib @@ -1 +1 @@ -https://github.com/mbedmicro/mbed/#df0c855df97688074545693f66bcca5cf9f42111 +https://github.com/mbedmicro/mbed/#5acdad9fd7b334a5a2fbe2f927f0a091ae0a914e diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 5be4487c4b..11b6564dfa 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -242,6 +242,10 @@ class ARM_MICRO(ARM): self.cppc += ["-D__MICROLIB", "--library_type=microlib"] self.ld += ["--library_type=microlib"] + # Only allow a single thread + self.cc += ["-DMBED_RTOS_SINGLE_THREAD"] + self.cppc += ["-DMBED_RTOS_SINGLE_THREAD"] + # We had to patch microlib to add C++ support # In later releases this patch should have entered mainline if ARM_MICRO.PATCHED_LIBRARY: diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index 2dfc03e24a..aa71e1360e 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -252,8 +252,22 @@ class GCC_ARM(GCC): GCC.__init__(self, target, options, notify, macros, silent, GCC_ARM_PATH, extra_verbose=extra_verbose) # Use latest gcc nanolib - if "thread-safe" not in self.options: + if "big-build" in self.options: + use_nano = False + elif "small-build" in self.options: + use_nano = True + elif target.default_build == "standard": + use_nano = False + elif target.default_build == "small": + use_nano = True + else: + use_nano = False + + if use_nano: self.ld.append("--specs=nano.specs") + self.cc += ["-DMBED_RTOS_SINGLE_THREAD"] + self.cppc += ["-DMBED_RTOS_SINGLE_THREAD"] + if target.name in ["LPC1768", "LPC4088", "LPC4088_DM", "LPC4330", "UBLOX_C027", "LPC2368"]: self.ld.extend(["-u _printf_float", "-u _scanf_float"]) elif target.name in ["RZ_A1H", "VK_RZ_A1H", "ARCH_MAX", "DISCO_F407VG", "DISCO_F429ZI", "DISCO_F469NI", "NUCLEO_F401RE", "NUCLEO_F410RB", "NUCLEO_F411RE", "NUCLEO_F446RE", "ELMO_F411RE", "MTS_MDOT_F411RE", "MTS_DRAGONFLY_F411RE", "DISCO_F746NG"]: