mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 01:44:34 +00:00
Revert "buildman: Always use the full path in CROSS_COMPILE"
There are operations in buildman that result in running the cross-tools
(such as performing size checks) and now that we have not modified PATH
to know where our tools are, these operations fail.
This reverts commit 6c0a3cf75f
.
Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
036e33cffb
commit
e13fcae3fc
7 changed files with 23 additions and 92 deletions
|
@ -31,9 +31,6 @@ def setup(fname=''):
|
|||
def add_file(data):
|
||||
settings.read_file(io.StringIO(data))
|
||||
|
||||
def add_section(name):
|
||||
settings.add_section(name)
|
||||
|
||||
def get_items(section):
|
||||
"""Get the items from a section of the config.
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@ class Builder:
|
|||
|
||||
def __init__(self, toolchains, base_dir, git_dir, num_threads, num_jobs,
|
||||
gnu_make='make', checkout=True, show_unknown=True, step=1,
|
||||
no_subdirs=False, verbose_build=False,
|
||||
no_subdirs=False, full_path=False, verbose_build=False,
|
||||
mrproper=False, fallback_mrproper=False,
|
||||
per_board_out_dir=False, config_only=False,
|
||||
squash_config_y=False, warnings_as_errors=False,
|
||||
|
@ -279,6 +279,8 @@ class Builder:
|
|||
step: 1 to process every commit, n to process every nth commit
|
||||
no_subdirs: Don't create subdirectories when building current
|
||||
source for a single board
|
||||
full_path: Return the full path in CROSS_COMPILE and don't set
|
||||
PATH
|
||||
verbose_build: Run build with V=1 and don't use 'make -s'
|
||||
mrproper: Always run 'make mrproper' when configuring
|
||||
fallback_mrproper: Run 'make mrproper' and retry on build failure
|
||||
|
@ -335,6 +337,7 @@ class Builder:
|
|||
self._step = step
|
||||
self._error_lines = 0
|
||||
self.no_subdirs = no_subdirs
|
||||
self.full_path = full_path
|
||||
self.verbose_build = verbose_build
|
||||
self.config_only = config_only
|
||||
self.squash_config_y = squash_config_y
|
||||
|
|
|
@ -406,7 +406,7 @@ class BuilderThread(threading.Thread):
|
|||
the next incremental build
|
||||
"""
|
||||
# Set up the environment and command line
|
||||
env = self.toolchain.MakeEnvironment()
|
||||
env = self.toolchain.MakeEnvironment(self.builder.full_path)
|
||||
mkdir(out_dir)
|
||||
|
||||
args, cwd, src_dir = self._build_args(brd, out_dir, out_rel_dir,
|
||||
|
@ -574,7 +574,7 @@ class BuilderThread(threading.Thread):
|
|||
outf.write(f'{result.return_code}')
|
||||
|
||||
# Write out the image and function size information and an objdump
|
||||
env = result.toolchain.MakeEnvironment()
|
||||
env = result.toolchain.MakeEnvironment(self.builder.full_path)
|
||||
with open(os.path.join(build_dir, 'out-env'), 'wb') as outf:
|
||||
for var in sorted(env.keys()):
|
||||
outf.write(b'%s="%s"' % (var, env[var]))
|
||||
|
|
|
@ -123,6 +123,8 @@ def add_after_m(parser):
|
|||
help="Override host toochain to use for sandbox (e.g. 'clang-7')")
|
||||
parser.add_argument('-Q', '--quick', action='store_true',
|
||||
default=False, help='Do a rough build, with limited warning resolution')
|
||||
parser.add_argument('-p', '--full-path', action='store_true',
|
||||
default=False, help="Use full toolchain path in CROSS_COMPILE")
|
||||
parser.add_argument('-P', '--per-board-out-dir', action='store_true',
|
||||
default=False, help="Use an O= (output) directory per board rather than per thread")
|
||||
parser.add_argument('--print-arch', action='store_true',
|
||||
|
|
|
@ -788,8 +788,10 @@ def do_buildman(args, toolchains=None, make_func=None, brds=None,
|
|||
builder = Builder(toolchains, output_dir, git_dir,
|
||||
args.threads, args.jobs, checkout=True,
|
||||
show_unknown=args.show_unknown, step=args.step,
|
||||
no_subdirs=args.no_subdirs, verbose_build=args.verbose_build,
|
||||
mrproper=args.mrproper, fallback_mrproper=args.fallback_mrproper,
|
||||
no_subdirs=args.no_subdirs, full_path=args.full_path,
|
||||
verbose_build=args.verbose_build,
|
||||
mrproper=args.mrproper,
|
||||
fallback_mrproper=args.fallback_mrproper,
|
||||
per_board_out_dir=args.per_board_out_dir,
|
||||
config_only=args.config_only,
|
||||
squash_config_y=not args.preserve_config_y,
|
||||
|
|
|
@ -148,7 +148,6 @@ class TestBuild(unittest.TestCase):
|
|||
self.toolchains.Add('arm-linux-gcc', test=False)
|
||||
self.toolchains.Add('sparc-linux-gcc', test=False)
|
||||
self.toolchains.Add('powerpc-linux-gcc', test=False)
|
||||
self.toolchains.Add('/path/to/aarch64-linux-gcc', test=False)
|
||||
self.toolchains.Add('gcc', test=False)
|
||||
|
||||
# Avoid sending any output
|
||||
|
@ -869,80 +868,6 @@ class TestBuild(unittest.TestCase):
|
|||
self.assertEqual([4, 5], control.read_procs(tmpdir))
|
||||
self.assertEqual(self.finish_time, self.cur_time)
|
||||
|
||||
def call_make_environment(self, tchn, in_env=None):
|
||||
"""Call Toolchain.MakeEnvironment() and process the result
|
||||
|
||||
Args:
|
||||
tchn (Toolchain): Toolchain to use
|
||||
in_env (dict): Input environment to use, None to use current env
|
||||
|
||||
Returns:
|
||||
tuple:
|
||||
dict: Changes that MakeEnvironment has made to the environment
|
||||
key: Environment variable that was changed
|
||||
value: New value (for PATH this only includes components
|
||||
which were added)
|
||||
str: Full value of the new PATH variable
|
||||
"""
|
||||
env = tchn.MakeEnvironment(env=in_env)
|
||||
|
||||
# Get the original environment
|
||||
orig_env = dict(os.environb if in_env is None else in_env)
|
||||
orig_path = orig_env[b'PATH'].split(b':')
|
||||
|
||||
# Find new variables
|
||||
diff = dict((k, env[k]) for k in env if orig_env.get(k) != env[k])
|
||||
|
||||
# Find new / different path components
|
||||
diff_path = None
|
||||
new_path = None
|
||||
if b'PATH' in diff:
|
||||
new_path = diff[b'PATH'].split(b':')
|
||||
diff_paths = [p for p in new_path if p not in orig_path]
|
||||
diff_path = b':'.join(p for p in new_path if p not in orig_path)
|
||||
if diff_path:
|
||||
diff[b'PATH'] = diff_path
|
||||
else:
|
||||
del diff[b'PATH']
|
||||
return diff, new_path
|
||||
|
||||
def test_toolchain_env(self):
|
||||
"""Test PATH and other environment settings for toolchains"""
|
||||
# Use a toolchain which has a path
|
||||
tchn = self.toolchains.Select('aarch64')
|
||||
|
||||
# Normal case
|
||||
diff = self.call_make_environment(tchn)[0]
|
||||
self.assertEqual(
|
||||
{b'CROSS_COMPILE': b'/path/to/aarch64-linux-', b'LC_ALL': b'C'},
|
||||
diff)
|
||||
|
||||
# When overriding the toolchain, only LC_ALL should be set
|
||||
tchn.override_toolchain = True
|
||||
diff = self.call_make_environment(tchn)[0]
|
||||
self.assertEqual({b'LC_ALL': b'C'}, diff)
|
||||
|
||||
# Test that virtualenv is handled correctly
|
||||
tchn.override_toolchain = False
|
||||
sys.prefix = '/some/venv'
|
||||
env = dict(os.environb)
|
||||
env[b'PATH'] = b'/some/venv/bin:other/things'
|
||||
tchn.path = '/my/path'
|
||||
diff, diff_path = self.call_make_environment(tchn, env)
|
||||
|
||||
self.assertNotIn(b'PATH', diff)
|
||||
self.assertEqual(None, diff_path)
|
||||
self.assertEqual(
|
||||
{b'CROSS_COMPILE': b'/my/path/aarch64-linux-', b'LC_ALL': b'C'},
|
||||
diff)
|
||||
|
||||
# Handle a toolchain wrapper
|
||||
tchn.path = ''
|
||||
bsettings.add_section('toolchain-wrapper')
|
||||
bsettings.set_item('toolchain-wrapper', 'my-wrapper', 'fred')
|
||||
diff = self.call_make_environment(tchn)[0]
|
||||
self.assertEqual(
|
||||
{b'CROSS_COMPILE': b'fred aarch64-linux-', b'LC_ALL': b'C'}, diff)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -90,7 +90,7 @@ class Toolchain:
|
|||
if self.arch == 'sandbox' and override_toolchain:
|
||||
self.gcc = override_toolchain
|
||||
|
||||
env = self.MakeEnvironment()
|
||||
env = self.MakeEnvironment(False)
|
||||
|
||||
# As a basic sanity check, run the C compiler with --version
|
||||
cmd = [fname, '--version']
|
||||
|
@ -172,7 +172,7 @@ class Toolchain:
|
|||
else:
|
||||
raise ValueError('Unknown arg to GetEnvArgs (%d)' % which)
|
||||
|
||||
def MakeEnvironment(self, env=None):
|
||||
def MakeEnvironment(self, full_path):
|
||||
"""Returns an environment for using the toolchain.
|
||||
|
||||
This takes the current environment and adds CROSS_COMPILE so that
|
||||
|
@ -188,23 +188,25 @@ class Toolchain:
|
|||
569-570: surrogates not allowed
|
||||
|
||||
Args:
|
||||
env (dict of bytes): Original environment, used for testing
|
||||
|
||||
full_path: Return the full path in CROSS_COMPILE and don't set
|
||||
PATH
|
||||
Returns:
|
||||
Dict containing the (bytes) environment to use. This is based on the
|
||||
current environment, with changes as needed to CROSS_COMPILE and
|
||||
LC_ALL.
|
||||
current environment, with changes as needed to CROSS_COMPILE, PATH
|
||||
and LC_ALL.
|
||||
"""
|
||||
env = dict(env or os.environb)
|
||||
|
||||
env = dict(os.environb)
|
||||
wrapper = self.GetWrapper()
|
||||
|
||||
if self.override_toolchain:
|
||||
# We'll use MakeArgs() to provide this
|
||||
pass
|
||||
else:
|
||||
elif full_path:
|
||||
env[b'CROSS_COMPILE'] = tools.to_bytes(
|
||||
wrapper + os.path.join(self.path, self.cross))
|
||||
else:
|
||||
env[b'CROSS_COMPILE'] = tools.to_bytes(wrapper + self.cross)
|
||||
env[b'PATH'] = tools.to_bytes(self.path) + b':' + env[b'PATH']
|
||||
|
||||
env[b'LC_ALL'] = b'C'
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue