From 757df8c8ab5d6afa5e1f62e65f09e8847bf818e1 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 11 Mar 2016 16:01:24 +0200 Subject: [PATCH] Fix multiple definition errors for ST STM32 development platform and mbed framework // Resolve #571 --- HISTORY.rst | 3 +++ platformio/__init__.py | 2 +- platformio/builder/scripts/frameworks/mbed.py | 27 ++++++++++++------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 2d32a4f1..f13fd3bd 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -9,6 +9,9 @@ PlatformIO 2.0 * Launched `PlatformIO Community Forums `_ (`issue #530 `_) +* Fixed multiple definition errors for ST STM32 development platform and mbed + framework + (`issue #571 `_) 2.8.5 (2016-03-07) ~~~~~~~~~~~~~~~~~~ diff --git a/platformio/__init__.py b/platformio/__init__.py index 710fdf6a..e43f5cf6 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (2, 8, 5) +VERSION = (2, 8, "6.dev0") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/builder/scripts/frameworks/mbed.py b/platformio/builder/scripts/frameworks/mbed.py index 4bfc53cc..cb97a4c5 100644 --- a/platformio/builder/scripts/frameworks/mbed.py +++ b/platformio/builder/scripts/frameworks/mbed.py @@ -195,18 +195,27 @@ def get_build_flags(data): return flags -def _mbed_whole_archive_hook(flags): - if (not isinstance(flags, list) or +def _mbed_whole_archive_hook(libs): + if (not isinstance(libs, list) or env.get("BOARD_OPTIONS", {}).get("platform") != "ststm32"): - return flags + return libs - for pos, flag in enumerate(flags[:]): - if isinstance(flag, basestring): - continue - flags.insert(pos, "-Wl,-whole-archive") - flags.insert(pos + 2, "-Wl,-no-whole-archive") + _dynlibs = [] + _stlibs = [] + for l in libs: + if isinstance(l, basestring): + _stlibs.append(l) + else: + _dynlibs.append(l) - return flags + libs = [] + if _dynlibs: + libs.append("-Wl,-whole-archive") + libs.extend(_dynlibs) + libs.append("-Wl,-no-whole-archive") + libs.extend(_stlibs) + + return libs board_type = env.subst("$BOARD")