Create LDSCRIPT_PATH Scons env variable

This commit is contained in:
Valeriy Koval
2015-02-18 20:03:49 +02:00
parent eb4756360a
commit 86260a48ba
3 changed files with 25 additions and 16 deletions

View File

@ -89,6 +89,13 @@ if "BOARD" in env:
if "UPLOAD_SPEED" not in env:
env.Replace(
UPLOAD_SPEED="${BOARD_OPTIONS['upload'].get('speed', None)}")
if "ldscript" in env.get("BOARD_OPTIONS", {}).get("build", {}):
env.Replace(
LDSCRIPT_PATH=join(
"$PIOHOME_DIR", "packages", "ldscripts",
"${BOARD_OPTIONS['build']['ldscript']}"
)
)
if "IGNORE_LIBS" in env:
env['IGNORE_LIBS'] = [l.strip() for l in env['IGNORE_LIBS'].split(",")]

View File

@ -154,8 +154,10 @@ merge_ld_scripts(ldscript_path)
generate_nvic_files()
# override ldscript by opencm3
assert "-T" in env['LINKFLAGS']
env['LINKFLAGS'][env['LINKFLAGS'].index("-T") + 1] = ldscript_path
assert "LDSCRIPT_PATH" in env
env.Replace(
LDSCRIPT_PATH=ldscript_path
)
libs = []
env.VariantDir(

View File

@ -15,20 +15,13 @@ from platformio.util import get_serialports
def ProcessGeneral(env):
corelibs = []
# specific linker script
if "ldscript" in env.get("BOARD_OPTIONS", {}).get("build", {}):
env.Append(
LINKFLAGS=["-T", join(
"$PIOHOME_DIR", "packages", "ldscripts",
"${BOARD_OPTIONS['build']['ldscript']}")]
)
if "extra_flags" in env.get("BOARD_OPTIONS", {}).get("build", {}):
env.MergeFlags(env.subst("${BOARD_OPTIONS['build']['extra_flags']}"))
if "BUILD_FLAGS" in env:
env.MergeFlags(env['BUILD_FLAGS'])
corelibs = []
if "FRAMEWORK" in env:
if env['FRAMEWORK'] in ("arduino", "energia"):
env.ConvertInoToCpp()
@ -49,20 +42,27 @@ def BuildFirmware(env, corelibs):
# build dependent libs
deplibs = firmenv.BuildDependentLibraries(join("$PROJECT_DIR", "src"))
if deplibs:
firmenv.Prepend(
_LIBFLAGS="-Wl,--start-group "
)
# append specified LD_SCRIPT
if "LDSCRIPT_PATH" in firmenv:
firmenv.Append(
_LIBFLAGS=" -Wl,--end-group "
LINKFLAGS=["-T", "$LDSCRIPT_PATH"]
)
# enable "cyclic reference" for linker
firmenv.Prepend(
_LIBFLAGS="-Wl,--start-group ",
)
firmenv.Append(
_LIBFLAGS=" -Wl,--end-group"
)
firmenv.MergeFlags(getenv("PIOSRCBUILD_FLAGS", "$SRCBUILD_FLAGS"))
return firmenv.Program(
join("$BUILD_DIR", "firmware"),
[firmenv.GlobCXXFiles(vdir) for vdir in vdirs],
LIBS=deplibs + corelibs,
LIBS=corelibs + deplibs,
LIBPATH="$BUILD_DIR",
PROGSUFFIX=".elf"
)