mirror of
https://xff.cz/git/u-boot/
synced 2025-09-30 15:01:27 +02:00
buildman: Support disabling LTO
This cuts down build performance considerably and is not always needed, when checking for build errors, etc. Add a flag to disable it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -194,6 +194,7 @@ class Builder:
|
|||||||
work_in_output: Use the output directory as the work directory and
|
work_in_output: Use the output directory as the work directory and
|
||||||
don't write to a separate output directory.
|
don't write to a separate output directory.
|
||||||
thread_exceptions: List of exceptions raised by thread jobs
|
thread_exceptions: List of exceptions raised by thread jobs
|
||||||
|
no_lto (bool): True to set the NO_LTO flag when building
|
||||||
|
|
||||||
Private members:
|
Private members:
|
||||||
_base_board_dict: Last-summarised Dict of boards
|
_base_board_dict: Last-summarised Dict of boards
|
||||||
@@ -253,7 +254,7 @@ class Builder:
|
|||||||
config_only=False, squash_config_y=False,
|
config_only=False, squash_config_y=False,
|
||||||
warnings_as_errors=False, work_in_output=False,
|
warnings_as_errors=False, work_in_output=False,
|
||||||
test_thread_exceptions=False, adjust_cfg=None,
|
test_thread_exceptions=False, adjust_cfg=None,
|
||||||
allow_missing=False):
|
allow_missing=False, no_lto=False):
|
||||||
"""Create a new Builder object
|
"""Create a new Builder object
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -292,6 +293,7 @@ class Builder:
|
|||||||
C=val to set the value of C (val must have quotes if C is
|
C=val to set the value of C (val must have quotes if C is
|
||||||
a string Kconfig
|
a string Kconfig
|
||||||
allow_missing: Run build with BINMAN_ALLOW_MISSING=1
|
allow_missing: Run build with BINMAN_ALLOW_MISSING=1
|
||||||
|
no_lto (bool): True to set the NO_LTO flag when building
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.toolchains = toolchains
|
self.toolchains = toolchains
|
||||||
@@ -331,6 +333,7 @@ class Builder:
|
|||||||
self.adjust_cfg = adjust_cfg
|
self.adjust_cfg = adjust_cfg
|
||||||
self.allow_missing = allow_missing
|
self.allow_missing = allow_missing
|
||||||
self._ide = False
|
self._ide = False
|
||||||
|
self.no_lto = no_lto
|
||||||
|
|
||||||
if not self.squash_config_y:
|
if not self.squash_config_y:
|
||||||
self.config_filenames += EXTRA_CONFIG_FILENAMES
|
self.config_filenames += EXTRA_CONFIG_FILENAMES
|
||||||
|
@@ -255,6 +255,8 @@ class BuilderThread(threading.Thread):
|
|||||||
args.append('KCFLAGS=-Werror')
|
args.append('KCFLAGS=-Werror')
|
||||||
if self.builder.allow_missing:
|
if self.builder.allow_missing:
|
||||||
args.append('BINMAN_ALLOW_MISSING=1')
|
args.append('BINMAN_ALLOW_MISSING=1')
|
||||||
|
if self.builder.no_lto:
|
||||||
|
args.append('NO_LTO=1')
|
||||||
config_args = ['%s_defconfig' % brd.target]
|
config_args = ['%s_defconfig' % brd.target]
|
||||||
config_out = ''
|
config_out = ''
|
||||||
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
||||||
|
@@ -1123,6 +1123,20 @@ toolchain. For example:
|
|||||||
buildman -O clang-7 --board sandbox
|
buildman -O clang-7 --board sandbox
|
||||||
|
|
||||||
|
|
||||||
|
Building without LTO
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Link-time optimisation (LTO) is designed to reduce code size by globally
|
||||||
|
optimising the U-Boot build. Unfortunately this can dramatically slow down
|
||||||
|
builds. This is particularly noticeable when running a lot of builds.
|
||||||
|
|
||||||
|
Use the -L (--no-lto) flag to disable LTO.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
buildman -L --board sandbox
|
||||||
|
|
||||||
|
|
||||||
Doing a simple build
|
Doing a simple build
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
@@ -71,6 +71,8 @@ def ParseArgs():
|
|||||||
default=False, help="Don't convert y to 1 in configs")
|
default=False, help="Don't convert y to 1 in configs")
|
||||||
parser.add_option('-l', '--list-error-boards', action='store_true',
|
parser.add_option('-l', '--list-error-boards', action='store_true',
|
||||||
default=False, help='Show a list of boards next to each error/warning')
|
default=False, help='Show a list of boards next to each error/warning')
|
||||||
|
parser.add_option('-L', '--no-lto', action='store_true',
|
||||||
|
default=False, help='Disable Link-time Optimisation (LTO) for builds')
|
||||||
parser.add_option('--list-tool-chains', action='store_true', default=False,
|
parser.add_option('--list-tool-chains', action='store_true', default=False,
|
||||||
help='List available tool chains (use -v to see probing detail)')
|
help='List available tool chains (use -v to see probing detail)')
|
||||||
parser.add_option('-m', '--mrproper', action='store_true',
|
parser.add_option('-m', '--mrproper', action='store_true',
|
||||||
|
@@ -351,7 +351,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, brds=None,
|
|||||||
work_in_output=options.work_in_output,
|
work_in_output=options.work_in_output,
|
||||||
test_thread_exceptions=test_thread_exceptions,
|
test_thread_exceptions=test_thread_exceptions,
|
||||||
adjust_cfg=adjust_cfg,
|
adjust_cfg=adjust_cfg,
|
||||||
allow_missing=allow_missing)
|
allow_missing=allow_missing, no_lto=options.no_lto)
|
||||||
builder.force_config_on_failure = not options.quick
|
builder.force_config_on_failure = not options.quick
|
||||||
if make_func:
|
if make_func:
|
||||||
builder.do_make = make_func
|
builder.do_make = make_func
|
||||||
|
@@ -724,15 +724,32 @@ Some images are invalid'''
|
|||||||
self.assertEqual(False,
|
self.assertEqual(False,
|
||||||
control.get_allow_missing(False, True, 2, True))
|
control.get_allow_missing(False, True, 2, True))
|
||||||
|
|
||||||
def testCmdFile(self):
|
def check_command(self, *extra_args):
|
||||||
"""Test that the -cmd-out file is produced"""
|
"""Run a command with the extra arguments and return the commands used
|
||||||
self._RunControl('-o', self._output_dir)
|
|
||||||
|
Args:
|
||||||
|
extra_args (list of str): List of extra arguments
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list of str: Lines returned in the out-cmd file
|
||||||
|
"""
|
||||||
|
self._RunControl('-o', self._output_dir, *extra_args)
|
||||||
board0_dir = os.path.join(self._output_dir, 'current', 'board0')
|
board0_dir = os.path.join(self._output_dir, 'current', 'board0')
|
||||||
self.assertTrue(os.path.exists(os.path.join(board0_dir, 'done')))
|
self.assertTrue(os.path.exists(os.path.join(board0_dir, 'done')))
|
||||||
cmd_fname = os.path.join(board0_dir, 'out-cmd')
|
cmd_fname = os.path.join(board0_dir, 'out-cmd')
|
||||||
self.assertTrue(os.path.exists(cmd_fname))
|
self.assertTrue(os.path.exists(cmd_fname))
|
||||||
data = tools.read_file(cmd_fname)
|
data = tools.read_file(cmd_fname)
|
||||||
lines = data.splitlines()
|
return data.splitlines()
|
||||||
|
|
||||||
|
def testCmdFile(self):
|
||||||
|
"""Test that the -cmd-out file is produced"""
|
||||||
|
lines = self.check_command()
|
||||||
self.assertEqual(2, len(lines))
|
self.assertEqual(2, len(lines))
|
||||||
self.assertRegex(lines[0], b'make O=/.*board0_defconfig')
|
self.assertRegex(lines[0], b'make O=/.*board0_defconfig')
|
||||||
self.assertRegex(lines[0], b'make O=/.*-s.*')
|
self.assertRegex(lines[0], b'make O=/.*-s.*')
|
||||||
|
|
||||||
|
def testNoLto(self):
|
||||||
|
"""Test that the --no-lto flag works"""
|
||||||
|
lines = self.check_command('-L')
|
||||||
|
self.assertIn(b'NO_LTO=1', lines[0])
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user