mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07:14 +02:00
Merge branch 'hotfix/v3.5.4' into develop
* hotfix/v3.5.4: Isolate build environment for "BuildSources" nodes Append a main LD script at the beginning Bump version to 3.5.4a1 Fixed issue with invalid LD script if path contains space Don't export ``CPPPATH`` of project dependent libraries to frameworks // Resolve #1665 YAPF # Conflicts: # HISTORY.rst # platformio/__init__.py # platformio/builder/tools/pioupload.py
This commit is contained in:
@ -15,6 +15,13 @@ PlatformIO 3.0
|
|||||||
- Check maximum allowed "program" and "data" sizes before uploading/programming
|
- Check maximum allowed "program" and "data" sizes before uploading/programming
|
||||||
(`issue #1412 <https://github.com/platformio/platformio-core/issues/1412>`_)
|
(`issue #1412 <https://github.com/platformio/platformio-core/issues/1412>`_)
|
||||||
|
|
||||||
|
3.5.4 (2018-??-??)
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Don't export ``CPPPATH`` of project dependent libraries to frameworks
|
||||||
|
(`issue #1665 <https://github.com/platformio/platformio-core/issues/1665>`_)
|
||||||
|
* Fixed issue with invalid LD script if path contains space
|
||||||
|
|
||||||
3.5.3 (2018-06-01)
|
3.5.3 (2018-06-01)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
2
docs
2
docs
Submodule docs updated: 4941b95550...63bb3e4420
@ -821,7 +821,7 @@ def BuildProjectLibraries(env):
|
|||||||
title = "<%s>" % lb.name
|
title = "<%s>" % lb.name
|
||||||
vcs_info = lb.vcs_info
|
vcs_info = lb.vcs_info
|
||||||
if lb.version:
|
if lb.version:
|
||||||
title += " v%s" % lb.version
|
title += " %s" % lb.version
|
||||||
if vcs_info and vcs_info.get("version"):
|
if vcs_info and vcs_info.get("version"):
|
||||||
title += " #%s" % vcs_info.get("version")
|
title += " #%s" % vcs_info.get("version")
|
||||||
sys.stdout.write("%s|-- %s" % (margin, title))
|
sys.stdout.write("%s|-- %s" % (margin, title))
|
||||||
@ -836,7 +836,6 @@ def BuildProjectLibraries(env):
|
|||||||
print_deps_tree(lb, level + 1)
|
print_deps_tree(lb, level + 1)
|
||||||
|
|
||||||
project = ProjectAsLibBuilder(env, "$PROJECT_DIR")
|
project = ProjectAsLibBuilder(env, "$PROJECT_DIR")
|
||||||
project.env = env
|
|
||||||
ldf_mode = LibBuilderBase.lib_ldf_mode.fget(project)
|
ldf_mode = LibBuilderBase.lib_ldf_mode.fget(project)
|
||||||
|
|
||||||
print "Library Dependency Finder -> http://bit.ly/configure-pio-ldf"
|
print "Library Dependency Finder -> http://bit.ly/configure-pio-ldf"
|
||||||
@ -858,7 +857,8 @@ def BuildProjectLibraries(env):
|
|||||||
else:
|
else:
|
||||||
print "No dependencies"
|
print "No dependencies"
|
||||||
|
|
||||||
return project.build()
|
libs = project.build()
|
||||||
|
return dict(LIBS=libs, CPPPATH=project.env.get("CPPPATH"))
|
||||||
|
|
||||||
|
|
||||||
def exists(_):
|
def exists(_):
|
||||||
|
@ -231,14 +231,25 @@ def GetActualLDScript(env):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
script = None
|
script = None
|
||||||
|
script_in_next = False
|
||||||
for f in env.get("LINKFLAGS", []):
|
for f in env.get("LINKFLAGS", []):
|
||||||
if f.startswith("-Wl,-T"):
|
raw_script = None
|
||||||
script = env.subst(f[6:].replace('"', "").strip())
|
if f == "-T":
|
||||||
if isfile(script):
|
script_in_next = True
|
||||||
return script
|
continue
|
||||||
path = _lookup_in_ldpath(script)
|
elif script_in_next:
|
||||||
if path:
|
script_in_next = False
|
||||||
return path
|
raw_script = f
|
||||||
|
elif f.startswith("-Wl,-T"):
|
||||||
|
raw_script = f[6:]
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
script = env.subst(raw_script.replace('"', "").strip())
|
||||||
|
if isfile(script):
|
||||||
|
return script
|
||||||
|
path = _lookup_in_ldpath(script)
|
||||||
|
if path:
|
||||||
|
return path
|
||||||
|
|
||||||
if script:
|
if script:
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
@ -295,9 +306,6 @@ def ProcessTest(env):
|
|||||||
src_filter.append("+<%s%s>" % (env['PIOTEST'], sep))
|
src_filter.append("+<%s%s>" % (env['PIOTEST'], sep))
|
||||||
env.Replace(PIOTEST_SRC_FILTER=src_filter)
|
env.Replace(PIOTEST_SRC_FILTER=src_filter)
|
||||||
|
|
||||||
return env.CollectBuildFiles("$BUILDTEST_DIR", "$PROJECTTEST_DIR",
|
|
||||||
"$PIOTEST_SRC_FILTER")
|
|
||||||
|
|
||||||
|
|
||||||
def GetExtraScripts(env, scope):
|
def GetExtraScripts(env, scope):
|
||||||
items = []
|
items = []
|
||||||
|
@ -22,7 +22,7 @@ from os.path import basename, dirname, isdir, join, realpath
|
|||||||
|
|
||||||
from SCons import Builder, Util
|
from SCons import Builder, Util
|
||||||
from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild,
|
from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild,
|
||||||
DefaultEnvironment, SConscript)
|
DefaultEnvironment, Export, SConscript)
|
||||||
|
|
||||||
from platformio.util import glob_escape, pioversion_to_intstr
|
from platformio.util import glob_escape, pioversion_to_intstr
|
||||||
|
|
||||||
@ -41,6 +41,35 @@ def scons_patched_match_splitext(path, suffixes=None):
|
|||||||
return tokens
|
return tokens
|
||||||
|
|
||||||
|
|
||||||
|
def _build_project_deps(env):
|
||||||
|
deps = env.BuildProjectLibraries()
|
||||||
|
# prepend dependent libs before built-in
|
||||||
|
env.Prepend(LIBS=deps['LIBS'])
|
||||||
|
|
||||||
|
if "__test" in COMMAND_LINE_TARGETS:
|
||||||
|
env.ProcessTest()
|
||||||
|
projenv = env.Clone()
|
||||||
|
projenv.BuildSources("$BUILDTEST_DIR", "$PROJECTTEST_DIR",
|
||||||
|
"$PIOTEST_SRC_FILTER")
|
||||||
|
else:
|
||||||
|
projenv = env.Clone()
|
||||||
|
projenv.BuildSources("$BUILDSRC_DIR", "$PROJECTSRC_DIR",
|
||||||
|
env.get("SRC_FILTER"))
|
||||||
|
|
||||||
|
# CPPPATH from dependencies
|
||||||
|
projenv.PrependUnique(CPPPATH=deps['CPPPATH'])
|
||||||
|
# extra build flags from `platformio.ini`
|
||||||
|
projenv.ProcessFlags(env.get("SRC_BUILD_FLAGS"))
|
||||||
|
|
||||||
|
if not env.get("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)
|
||||||
|
|
||||||
|
Export("projenv")
|
||||||
|
|
||||||
|
|
||||||
def BuildProgram(env):
|
def BuildProgram(env):
|
||||||
|
|
||||||
def _append_pio_macros():
|
def _append_pio_macros():
|
||||||
@ -62,6 +91,7 @@ def BuildProgram(env):
|
|||||||
# process extra flags from board
|
# process extra flags from board
|
||||||
if "BOARD" in env and "build.extra_flags" in env.BoardConfig():
|
if "BOARD" in env and "build.extra_flags" in env.BoardConfig():
|
||||||
env.ProcessFlags(env.BoardConfig().get("build.extra_flags"))
|
env.ProcessFlags(env.BoardConfig().get("build.extra_flags"))
|
||||||
|
|
||||||
# apply user flags
|
# apply user flags
|
||||||
env.ProcessFlags(env.get("BUILD_FLAGS"))
|
env.ProcessFlags(env.get("BUILD_FLAGS"))
|
||||||
|
|
||||||
@ -74,37 +104,19 @@ def BuildProgram(env):
|
|||||||
# remove specified flags
|
# remove specified flags
|
||||||
env.ProcessUnFlags(env.get("BUILD_UNFLAGS"))
|
env.ProcessUnFlags(env.get("BUILD_UNFLAGS"))
|
||||||
|
|
||||||
# build dependent libs; place them before built-in libs
|
# build project with dependencies
|
||||||
env.Prepend(LIBS=env.BuildProjectLibraries())
|
_build_project_deps(env)
|
||||||
|
|
||||||
# append specified LD_SCRIPT
|
# append into the beginning a main LD script
|
||||||
if ("LDSCRIPT_PATH" in env
|
if (env.get("LDSCRIPT_PATH")
|
||||||
and not any("-Wl,-T" in f for f in env['LINKFLAGS'])):
|
and not any("-Wl,-T" in f for f in env['LINKFLAGS'])):
|
||||||
env.Append(LINKFLAGS=['-Wl,-T"$LDSCRIPT_PATH"'])
|
env.Prepend(LINKFLAGS=["-T", "$LDSCRIPT_PATH"])
|
||||||
|
|
||||||
# enable "cyclic reference" for linker
|
# enable "cyclic reference" for linker
|
||||||
if env.get("LIBS") and env.GetCompilerType() == "gcc":
|
if env.get("LIBS") and env.GetCompilerType() == "gcc":
|
||||||
env.Prepend(_LIBFLAGS="-Wl,--start-group ")
|
env.Prepend(_LIBFLAGS="-Wl,--start-group ")
|
||||||
env.Append(_LIBFLAGS=" -Wl,--end-group")
|
env.Append(_LIBFLAGS=" -Wl,--end-group")
|
||||||
|
|
||||||
# Handle SRC_BUILD_FLAGS
|
|
||||||
env.ProcessFlags(env.get("SRC_BUILD_FLAGS"))
|
|
||||||
|
|
||||||
if "__test" in COMMAND_LINE_TARGETS:
|
|
||||||
env.Append(PIOBUILDFILES=env.ProcessTest())
|
|
||||||
else:
|
|
||||||
env.Append(
|
|
||||||
PIOBUILDFILES=env.CollectBuildFiles(
|
|
||||||
"$BUILDSRC_DIR",
|
|
||||||
"$PROJECTSRC_DIR",
|
|
||||||
src_filter=env.get("SRC_FILTER")))
|
|
||||||
|
|
||||||
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(
|
program = env.Program(
|
||||||
join("$BUILD_DIR", env.subst("$PROGNAME")), env['PIOBUILDFILES'])
|
join("$BUILD_DIR", env.subst("$PROGNAME")), env['PIOBUILDFILES'])
|
||||||
env.Replace(PIOMAINPROG=program)
|
env.Replace(PIOMAINPROG=program)
|
||||||
@ -276,7 +288,7 @@ def BuildFrameworks(env, frameworks):
|
|||||||
env.ConvertInoToCpp()
|
env.ConvertInoToCpp()
|
||||||
|
|
||||||
if f in board_frameworks:
|
if f in board_frameworks:
|
||||||
SConscript(env.GetFrameworkScript(f))
|
SConscript(env.GetFrameworkScript(f), exports="env")
|
||||||
else:
|
else:
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
"Error: This board doesn't support %s framework!\n" % f)
|
"Error: This board doesn't support %s framework!\n" % f)
|
||||||
@ -290,8 +302,9 @@ def BuildLibrary(env, variant_dir, src_dir, src_filter=None):
|
|||||||
|
|
||||||
|
|
||||||
def BuildSources(env, variant_dir, src_dir, src_filter=None):
|
def BuildSources(env, variant_dir, src_dir, src_filter=None):
|
||||||
|
nodes = env.CollectBuildFiles(variant_dir, src_dir, src_filter)
|
||||||
DefaultEnvironment().Append(
|
DefaultEnvironment().Append(
|
||||||
PIOBUILDFILES=env.CollectBuildFiles(variant_dir, src_dir, src_filter))
|
PIOBUILDFILES=[env.Object(node) for node in nodes])
|
||||||
|
|
||||||
|
|
||||||
def exists(_):
|
def exists(_):
|
||||||
|
@ -29,8 +29,9 @@ build_flags = %s
|
|||||||
""" % " ".join([f[0] for f in build_flags]))
|
""" % " ".join([f[0] for f in build_flags]))
|
||||||
|
|
||||||
tmpdir.join("extra.py").write("""
|
tmpdir.join("extra.py").write("""
|
||||||
Import("env")
|
Import("projenv")
|
||||||
env.Append(CPPDEFINES="POST_SCRIPT_MACRO")
|
|
||||||
|
projenv.Append(CPPDEFINES="POST_SCRIPT_MACRO")
|
||||||
""")
|
""")
|
||||||
|
|
||||||
tmpdir.mkdir("src").join("main.cpp").write("""
|
tmpdir.mkdir("src").join("main.cpp").write("""
|
||||||
|
Reference in New Issue
Block a user