[tools] Fix link2bin with long command line

This commit is contained in:
Kuba Szczodrzyński
2022-07-04 22:37:25 +02:00
parent 4744351964
commit cf584c3bd6
2 changed files with 17 additions and 2 deletions

View File

@@ -40,6 +40,9 @@ def env_add_defaults(env, platform, board):
LINK2BIN='"${PYTHONEXE}" "${LT_DIR}/tools/link2bin.py"',
UF2OTA_PY='"${PYTHONEXE}" "${LT_DIR}/tools/uf2ota/uf2ota.py"',
UF2UPLOAD_PY='"${PYTHONEXE}" "${LT_DIR}/tools/upload/uf2upload.py"',
# Fix for link2bin to get tmpfile name in argv
LINKCOM="${LINK} ${LINKARGS}",
LINKARGS="${TEMPFILE('-o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS', '$LINKCOMSTR')}",
)
env.Replace(**vars)
# Store family parameters as environment variables

View File

@@ -5,6 +5,7 @@ from os.path import dirname, join
sys.path.append(join(dirname(__file__), ".."))
import shlex
from argparse import ArgumentParser
from enum import Enum
from os import stat, unlink
@@ -13,7 +14,7 @@ from shutil import copyfile
from subprocess import PIPE, Popen
from typing import IO, Dict, List, Tuple
from tools.util.fileio import chext, isnewer
from tools.util.fileio import chext, isnewer, readtext
from tools.util.models import Family
from tools.util.obj import get
from tools.util.platform import get_board_manifest, get_family
@@ -194,7 +195,7 @@ if __name__ == "__main__":
parser = ArgumentParser(
prog="link2bin",
description="Link to BIN format",
prefix_chars="@",
prefix_chars="#",
)
parser.add_argument("board", type=str, help="Target board name")
parser.add_argument("ota1", type=str, help=".LD file OTA1 pattern")
@@ -218,6 +219,17 @@ if __name__ == "__main__":
if not args.args:
print(f"Linker arguments must not be empty")
exit(1)
try:
while True:
i = next(i for i, a in enumerate(args.args) if a.startswith("@"))
arg = args.args.pop(i)
argv = readtext(arg[1:])
argv = shlex.split(argv)
args.args = args.args[0:i] + argv + args.args[i:]
except StopIteration:
pass
link2bin(
soc,
family,