[PATCH 3/3] binman: Allow resolving host-specific tools from env vars
Simon Glass
sjg at chromium.org
Sat Sep 5 18:37:01 CEST 2020
On Sat, 5 Sep 2020 at 08:44, Alper Nebi Yasak <alpernebiyasak at gmail.com> wrote:
>
> This patch lets tools.Run() use host-specific versions with the
> for_host keyword argument, based on the host-specific environment
> variables (HOSTCC, HOSTOBJCOPY, HOSTSTRIP, etc.).
>
> Signed-off-by: Alper Nebi Yasak <alpernebiyasak at gmail.com>
> ---
> Not sure if this patch will ever be useful, but it complements the
> previous patch very well.
Yes, agreed.
>
> tools/patman/tools.py | 32 +++++++++++++++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
Reviewed-by: Simon Glass <sjg at chromium.org>
Please see below.
Also please add a mention of the CROSS_COMPILE thing in binman's README.
>
> diff --git a/tools/patman/tools.py b/tools/patman/tools.py
> index ee8b70d0cc..6d539fe594 100644
> --- a/tools/patman/tools.py
> +++ b/tools/patman/tools.py
> @@ -188,6 +188,31 @@ def PathHasFile(path_spec, fname):
> return True
> return False
>
> +def GetHostCompileTool(name):
> + """Get the host-specific version for a compile tool
> +
> + This checks the environment variables that specify which version of
> + the tool should be used.
Can you please expand the comment to mention the environment variables
it checks?
> +
> + Args:
> + name: Command name to run
> +
> + Returns:
> + host_name: Exact command name to run instead
> + extra_args: List of extra arguments to pass
> + """
> + host_name = None
> + extra_args = []
> + if name in ('as', 'ld', 'cc', 'cpp', 'ar', 'nm', 'ldr', 'strip',
> + 'objcopy', 'objdump', 'dtc'):
> + host_name, *host_args = env.get('HOST' + name.upper(), '').split(' ')
> + elif name == 'c++':
> + host_name, *host_args = env.get('HOSTCXX', '').split(' ')
> +
> + if host_name:
> + return host_name, extra_args
> + return name, []
> +
> def GetTargetCompileTool(name, cross_compile=None):
> """Get the target-specific version for a compile tool
>
> @@ -250,6 +275,7 @@ def Run(name, *args, **kwargs):
> Args:
> name: Command name to run
> args: Arguments to the tool
> + for_host: True to resolve the command to the version for the host
> for_target: False to run the command as-is, without resolving it
> to the version for the compile target
>
> @@ -258,7 +284,8 @@ def Run(name, *args, **kwargs):
> """
> try:
> binary = kwargs.get('binary')
> - for_target = kwargs.get('for_target', True)
> + for_host = kwargs.get('for_host', False)
> + for_target = kwargs.get('for_target', not for_host)
> env = None
> if tool_search_paths:
> env = dict(os.environ)
> @@ -266,6 +293,9 @@ def Run(name, *args, **kwargs):
> if for_target:
> name, extra_args = GetTargetCompileTool(name)
> args = tuple(extra_args) + args
> + elif for_host:
> + name, extra_args = GetHostCompileTool(name)
> + args = tuple(extra_args) + args
> all_args = (name,) + args
> result = command.RunPipe([all_args], capture=True, capture_stderr=True,
> env=env, raise_on_error=False, binary=binary)
> --
> 2.28.0
>
More information about the U-Boot
mailing list