From cf584c3bd62fa71c28af727bfa0e42dd08fe17a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 4 Jul 2022 22:37:25 +0200 Subject: [PATCH] [tools] Fix link2bin with long command line --- builder/utils/env.py | 3 +++ tools/link2bin.py | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/builder/utils/env.py b/builder/utils/env.py index 2955525..d999d23 100644 --- a/builder/utils/env.py +++ b/builder/utils/env.py @@ -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 diff --git a/tools/link2bin.py b/tools/link2bin.py index 7fd04ce..3f9c624 100644 --- a/tools/link2bin.py +++ b/tools/link2bin.py @@ -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,