From bff590e2072fa373af6fa5143822159d2a87c22b Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 15 Dec 2017 21:48:20 +0200 Subject: [PATCH] Search for libraries used in test // Resolve #953 --- HISTORY.rst | 2 ++ platformio/builder/tools/piolib.py | 3 ++ platformio/builder/tools/platformio.py | 45 +++++++++++++------------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index aa6a3730..71849c69 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -17,6 +17,8 @@ PlatformIO 3.0 Dropped support for ``*_stage`` dev/platforms. Use VCS URL instead. * Improvements to `Library Dependency Finder (LDF) `__: + - Search for libraries used in test + (`issue #953 `_) - Parse library source file in pair with a header when they have the same name (`issue #1175 `_) - Handle library dependencies defined as VCS or SemVer in diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index 8751499b..3d9b5f60 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -618,6 +618,9 @@ class ProjectAsLibBuilder(LibBuilderBase): inc_dirs.append(self.env.subst("$PROJECTINCLUDE_DIR")) return inc_dirs + def get_src_files(self): + return self.env['PIOBUILDFILES'] + @property def lib_ldf_mode(self): mode = LibBuilderBase.lib_ldf_mode.fget(self) diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 5d905b0a..14361742 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -42,12 +42,28 @@ def BuildProgram(env): _append_pio_macros() - # fix ASM handling under non-casitive OS - if not case_sensitive_suffixes(".s", ".S"): - env.Replace(AS="$CC", ASCOM="$ASPPCOM") + env.Append( + LIBPATH=["$BUILD_DIR"], + PIOBUILDFILES=env.CollectBuildFiles( + "$BUILDSRC_DIR", + "$PROJECTSRC_DIR", + src_filter=env.get("SRC_FILTER"), + duplicate=False)) if "__debug" in COMMAND_LINE_TARGETS: env.ProcessDebug() + if "__test" in COMMAND_LINE_TARGETS: + env.Append(PIOBUILDFILES=env.ProcessTest()) + + if not env['PIOBUILDFILES'] and not COMMAND_LINE_TARGETS: + sys.stderr.write( + "Error: Nothing to build. Please put your source code files " + "to '%s' folder\n" % env.subst("$PROJECTSRC_DIR")) + env.Exit(1) + + # fix ASM handling under non-casitive OS + if not case_sensitive_suffixes(".s", ".S"): + env.Replace(AS="$CC", ASCOM="$ASPPCOM") # process extra flags from board if "BOARD" in env and "build.extra_flags" in env.BoardConfig(): @@ -57,13 +73,14 @@ def BuildProgram(env): # apply user flags env.ProcessFlags(env.get("BUILD_FLAGS")) + # process framework scripts env.BuildFrameworks(env.get("PIOFRAMEWORK")) # restore PIO macros if it was deleted by framework _append_pio_macros() # build dependent libs - deplibs = env.BuildProjectLibraries() + env.Append(LIBS=env.BuildProjectLibraries()) # append specified LD_SCRIPT if ("LDSCRIPT_PATH" in env @@ -71,31 +88,13 @@ def BuildProgram(env): env.Append(LINKFLAGS=['-Wl,-T"$LDSCRIPT_PATH"']) # enable "cyclic reference" for linker - if env.get("LIBS", deplibs) and env.GetCompilerType() == "gcc": + if env.get("LIBS") and env.GetCompilerType() == "gcc": env.Prepend(_LIBFLAGS="-Wl,--start-group ") env.Append(_LIBFLAGS=" -Wl,--end-group") # Handle SRC_BUILD_FLAGS env.ProcessFlags(env.get("SRC_BUILD_FLAGS")) - env.Append( - LIBS=deplibs, - LIBPATH=["$BUILD_DIR"], - PIOBUILDFILES=env.CollectBuildFiles( - "$BUILDSRC_DIR", - "$PROJECTSRC_DIR", - src_filter=env.get("SRC_FILTER"), - duplicate=False)) - - if "__test" in COMMAND_LINE_TARGETS: - env.Append(PIOBUILDFILES=env.ProcessTest()) - - if not env['PIOBUILDFILES'] and not COMMAND_LINE_TARGETS: - sys.stderr.write( - "Error: Nothing to build. Please put your source code files " - "to '%s' folder\n" % env.subst("$PROJECTSRC_DIR")) - env.Exit(1) - program = env.Program( join("$BUILD_DIR", env.subst("$PROGNAME")), env['PIOBUILDFILES'])