mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
binman: Allow resolving host-specific tools from env vars
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@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
1e4687aa47
commit
29cc091842
1 changed files with 49 additions and 1 deletions
|
@ -188,6 +188,49 @@ 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 (e.g. ${HOSTCC}).
|
||||
|
||||
The following table lists the host-specific versions of the tools
|
||||
this function resolves to:
|
||||
|
||||
Compile Tool | Host version
|
||||
--------------+----------------
|
||||
as | ${HOSTAS}
|
||||
ld | ${HOSTLD}
|
||||
cc | ${HOSTCC}
|
||||
cpp | ${HOSTCPP}
|
||||
c++ | ${HOSTCXX}
|
||||
ar | ${HOSTAR}
|
||||
nm | ${HOSTNM}
|
||||
ldr | ${HOSTLDR}
|
||||
strip | ${HOSTSTRIP}
|
||||
objcopy | ${HOSTOBJCOPY}
|
||||
objdump | ${HOSTOBJDUMP}
|
||||
dtc | ${HOSTDTC}
|
||||
|
||||
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
|
||||
|
||||
|
@ -269,6 +312,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
|
||||
|
||||
|
@ -277,7 +321,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)
|
||||
|
@ -285,6 +330,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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue