diff --git a/HISTORY.rst b/HISTORY.rst index 10b921bc..9adb24f5 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,7 +7,10 @@ PlatformIO 3.0 3.5.4 (2018-??-??) ~~~~~~~~~~~~~~~~~~ -* Don't export ``CPPPATH`` of project dependent libraries to frameworks +* Export ``LIBS``, ``LIBPATH``, and ``LINKFLAGS`` data from project dependent + libraries to the global build environment +* Don't export ``CPPPATH`` data of project dependent libraries to framework's + build environment (`issue #1665 `_) * Handle "architectures" data from "library.properties" manifest in `lib_compat_mode = strict `__ diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index 2523287e..787b3bdf 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -824,7 +824,7 @@ def GetLibBuilders(env): # pylint: disable=too-many-branches return items -def BuildProjectLibraries(env): +def ConfigureProjectLibBuilder(env): def correct_found_libs(lib_builders): # build full dependency graph @@ -879,8 +879,7 @@ def BuildProjectLibraries(env): else: print "No dependencies" - libs = project.build() - return dict(LIBS=libs, CPPPATH=project.env.get("CPPPATH")) + return project def exists(_): @@ -889,5 +888,5 @@ def exists(_): def generate(env): env.AddMethod(GetLibBuilders) - env.AddMethod(BuildProjectLibraries) + env.AddMethod(ConfigureProjectLibBuilder) return env diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index e60e41aa..ac3dda2b 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -42,9 +42,16 @@ def scons_patched_match_splitext(path, suffixes=None): def _build_project_deps(env): - deps = env.BuildProjectLibraries() - # prepend dependent libs before built-in - env.Prepend(LIBS=deps['LIBS']) + project_lib_builder = env.ConfigureProjectLibBuilder() + + # append project libs to the beginning of list + env.Prepend(LIBS=project_lib_builder.build()) + # append extra linker related options from libs + env.AppendUnique( + **{ + key: project_lib_builder.env.get(key) + for key in ("LIBS", "LIBPATH", "LINKFLAGS") + }) if "__test" in COMMAND_LINE_TARGETS: env.ProcessTest() @@ -57,7 +64,7 @@ def _build_project_deps(env): env.get("SRC_FILTER")) # CPPPATH from dependencies - projenv.PrependUnique(CPPPATH=deps['CPPPATH']) + projenv.PrependUnique(CPPPATH=project_lib_builder.env.get("CPPPATH")) # extra build flags from `platformio.ini` projenv.ProcessFlags(env.get("SRC_BUILD_FLAGS"))