mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 03:15:00 +00:00
buildman: Support a tilde to represent the home directory
It is convenient to use ~ to represent the home directory in the settings file. Add support for this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
eae1eb0e86
commit
e2ca257287
3 changed files with 73 additions and 11 deletions
|
@ -933,12 +933,18 @@ a set of (tag, value) pairs.
|
|||
For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc'
|
||||
and CROSS_COMPILE will be set to powerpc-linux- when using it.
|
||||
|
||||
The tilde character ``~`` is supported in paths, to represent the home
|
||||
directory.
|
||||
|
||||
'[toolchain-prefix]' section
|
||||
This can be used to provide the full toolchain-prefix for one or more
|
||||
architectures. The full CROSS_COMPILE prefix must be provided. These
|
||||
typically have a higher priority than matches in the '[toolchain]', due to
|
||||
this prefix.
|
||||
|
||||
The tilde character ``~`` is supported in paths, to represent the home
|
||||
directory.
|
||||
|
||||
'[toolchain-alias]' section
|
||||
This converts toolchain architecture names to U-Boot names. For example,
|
||||
if an x86 toolchains is called i386-linux-gcc it will not normally be
|
||||
|
|
|
@ -46,6 +46,16 @@ main: /usr/sbin
|
|||
wrapper = ccache
|
||||
'''
|
||||
|
||||
settings_data_homedir = '''
|
||||
# Buildman settings file
|
||||
|
||||
[toolchain]
|
||||
main = ~/mypath
|
||||
|
||||
[toolchain-prefix]
|
||||
x86 = ~/mypath-x86-
|
||||
'''
|
||||
|
||||
migration = '''===================== WARNING ======================
|
||||
This board does not use CONFIG_DM. CONFIG_DM will be
|
||||
compulsory starting with the v2020.01 release.
|
||||
|
@ -1030,6 +1040,46 @@ class TestBuild(unittest.TestCase):
|
|||
finally:
|
||||
os.environ['PATH'] = old_path
|
||||
|
||||
def testHomedir(self):
|
||||
"""Test using ~ in a toolchain or toolchain-prefix section"""
|
||||
# Add some test settings
|
||||
bsettings.setup(None)
|
||||
bsettings.add_file(settings_data_homedir)
|
||||
|
||||
# Set up the toolchains
|
||||
home = os.path.expanduser('~')
|
||||
toolchains = toolchain.Toolchains()
|
||||
toolchains.GetSettings()
|
||||
self.assertEqual([f'{home}/mypath'], toolchains.paths)
|
||||
|
||||
# Check scanning
|
||||
with test_util.capture_sys_output() as (stdout, _):
|
||||
toolchains.Scan(verbose=True, raise_on_error=False)
|
||||
lines = iter(stdout.getvalue().splitlines() + ['##done'])
|
||||
self.assertEqual('Scanning for tool chains', next(lines))
|
||||
self.assertEqual(f" - scanning prefix '{home}/mypath-x86-'",
|
||||
next(lines))
|
||||
self.assertEqual(
|
||||
f"Error: No tool chain found for prefix '{home}/mypath-x86-gcc'",
|
||||
next(lines))
|
||||
self.assertEqual(f" - scanning path '{home}/mypath'", next(lines))
|
||||
self.assertEqual(f" - looking in '{home}/mypath/.'", next(lines))
|
||||
self.assertEqual(f" - looking in '{home}/mypath/bin'", next(lines))
|
||||
self.assertEqual(f" - looking in '{home}/mypath/usr/bin'",
|
||||
next(lines))
|
||||
self.assertEqual('##done', next(lines))
|
||||
|
||||
# Check adding a toolchain
|
||||
with test_util.capture_sys_output() as (stdout, _):
|
||||
toolchains.Add('~/aarch64-linux-gcc', test=True, verbose=True)
|
||||
lines = iter(stdout.getvalue().splitlines() + ['##done'])
|
||||
self.assertEqual('Tool chain test: BAD', next(lines))
|
||||
self.assertEqual(f'Command: {home}/aarch64-linux-gcc --version',
|
||||
next(lines))
|
||||
self.assertEqual('', next(lines))
|
||||
self.assertEqual('', next(lines))
|
||||
self.assertEqual('##done', next(lines))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -65,12 +65,13 @@ class Toolchain:
|
|||
"""Create a new toolchain object.
|
||||
|
||||
Args:
|
||||
fname: Filename of the gcc component
|
||||
fname: Filename of the gcc component, possibly with ~ or $HOME in it
|
||||
test: True to run the toolchain to test it
|
||||
verbose: True to print out the information
|
||||
priority: Priority to use for this toolchain, or PRIORITY_CALC to
|
||||
calculate it
|
||||
"""
|
||||
fname = os.path.expanduser(fname)
|
||||
self.gcc = fname
|
||||
self.path = os.path.dirname(fname)
|
||||
self.override_toolchain = override_toolchain
|
||||
|
@ -109,7 +110,7 @@ class Toolchain:
|
|||
self.priority))
|
||||
else:
|
||||
print('BAD')
|
||||
print('Command: ', cmd)
|
||||
print(f"Command: {' '.join(cmd)}")
|
||||
print(result.stdout)
|
||||
print(result.stderr)
|
||||
else:
|
||||
|
@ -296,10 +297,11 @@ class Toolchains:
|
|||
|
||||
paths = []
|
||||
for name, value in toolchains:
|
||||
fname = os.path.expanduser(value)
|
||||
if '*' in value:
|
||||
paths += glob.glob(value)
|
||||
paths += glob.glob(fname)
|
||||
else:
|
||||
paths.append(value)
|
||||
paths.append(fname)
|
||||
return paths
|
||||
|
||||
def GetSettings(self, show_warning=True):
|
||||
|
@ -373,7 +375,7 @@ class Toolchains:
|
|||
pathname_list.append(pathname)
|
||||
return pathname_list
|
||||
|
||||
def Scan(self, verbose):
|
||||
def Scan(self, verbose, raise_on_error=True):
|
||||
"""Scan for available toolchains and select the best for each arch.
|
||||
|
||||
We look for all the toolchains we can file, figure out the
|
||||
|
@ -385,11 +387,12 @@ class Toolchains:
|
|||
"""
|
||||
if verbose: print('Scanning for tool chains')
|
||||
for name, value in self.prefixes:
|
||||
if verbose: print(" - scanning prefix '%s'" % value)
|
||||
if os.path.exists(value):
|
||||
self.Add(value, True, verbose, PRIORITY_FULL_PREFIX, name)
|
||||
fname = os.path.expanduser(value)
|
||||
if verbose: print(" - scanning prefix '%s'" % fname)
|
||||
if os.path.exists(fname):
|
||||
self.Add(fname, True, verbose, PRIORITY_FULL_PREFIX, name)
|
||||
continue
|
||||
fname = value + 'gcc'
|
||||
fname += 'gcc'
|
||||
if os.path.exists(fname):
|
||||
self.Add(fname, True, verbose, PRIORITY_PREFIX_GCC, name)
|
||||
continue
|
||||
|
@ -397,8 +400,11 @@ class Toolchains:
|
|||
for f in fname_list:
|
||||
self.Add(f, True, verbose, PRIORITY_PREFIX_GCC_PATH, name)
|
||||
if not fname_list:
|
||||
raise ValueError("No tool chain found for prefix '%s'" %
|
||||
value)
|
||||
msg = f"No tool chain found for prefix '{fname}'"
|
||||
if raise_on_error:
|
||||
raise ValueError(msg)
|
||||
else:
|
||||
print(f'Error: {msg}')
|
||||
for path in self.paths:
|
||||
if verbose: print(" - scanning path '%s'" % path)
|
||||
fnames = self.ScanPath(path, verbose)
|
||||
|
|
Loading…
Add table
Reference in a new issue