buildman: Create a function to handle config and build

Move this code into a _config_and_build() function, so reduce the size of
run_commit().

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2023-07-19 17:49:23 -06:00
parent ad7181c797
commit 335c1b9f81

View File

@@ -345,6 +345,64 @@ class BuilderThread(threading.Thread):
commit = 'current'
return commit
def _config_and_build(self, commit_upto, brd, work_dir, do_config,
config_only, adjust_cfg, commit, out_dir, out_rel_dir,
result):
"""Do the build, configuring first if necessary
Args:
commit_upto (int): Commit number to build (0...n-1)
brd (Board): Board to create arguments for
work_dir (str): Directory to which the source will be checked out
do_config (bool): True to run a make <board>_defconfig on the source
config_only (bool): Only configure the source, do not build it
adjust_cfg (list of str): See the cfgutil module and run_commit()
commit (Commit): Commit only being built
out_dir (str): Output directory for the build
out_rel_dir (str): Output directory relatie to the current dir
result (CommandResult): Previous result
Returns:
tuple:
result (CommandResult): Result of the build
do_config (bool): indicates whether 'make config' is needed on
the next incremental build
"""
# Set up the environment and command line
env = self.toolchain.MakeEnvironment(self.builder.full_path)
mkdir(out_dir)
args, cwd, src_dir = self._build_args(brd, out_dir, out_rel_dir,
work_dir, commit_upto)
config_args = [f'{brd.target}_defconfig']
config_out = io.StringIO()
_remove_old_outputs(out_dir)
# If we need to reconfigure, do that now
cfg_file = os.path.join(out_dir, '.config')
cmd_list = []
if do_config or adjust_cfg:
result = self._reconfigure(
commit, brd, cwd, args, env, config_args, config_out, cmd_list)
do_config = False # No need to configure next time
if adjust_cfg:
cfgutil.adjust_cfg_file(cfg_file, adjust_cfg)
# Now do the build, if everything looks OK
if result.return_code == 0:
result = self._build(commit, brd, cwd, args, env, cmd_list,
config_only)
if adjust_cfg:
errs = cfgutil.check_cfg_file(cfg_file, adjust_cfg)
if errs:
result.stderr += errs
result.return_code = 1
result.stderr = result.stderr.replace(src_dir + '/', '')
if self.builder.verbose_build:
result.stdout = config_out.getvalue() + result.stdout
result.cmd_list = cmd_list
return result, do_config
def run_commit(self, commit_upto, brd, work_dir, do_config, config_only,
force_build, force_build_failures, work_in_output,
@@ -402,42 +460,9 @@ class BuilderThread(threading.Thread):
if self.toolchain:
commit = self._checkout(commit_upto, work_dir)
# Set up the environment and command line
env = self.toolchain.MakeEnvironment(self.builder.full_path)
mkdir(out_dir)
args, cwd, src_dir = self._build_args(brd, out_dir, out_rel_dir,
work_dir, commit_upto)
config_args = [f'{brd.target}_defconfig']
config_out = io.StringIO()
_remove_old_outputs(out_dir)
# If we need to reconfigure, do that now
cfg_file = os.path.join(out_dir, '.config')
cmd_list = []
if do_config or adjust_cfg:
result = self._reconfigure(
commit, brd, cwd, args, env, config_args, config_out,
cmd_list)
do_config = False # No need to configure next time
if adjust_cfg:
cfgutil.adjust_cfg_file(cfg_file, adjust_cfg)
# Now do the build, if everything looks OK
if result.return_code == 0:
result = self._build(commit, brd, cwd, args, env, cmd_list,
config_only)
if adjust_cfg:
errs = cfgutil.check_cfg_file(cfg_file, adjust_cfg)
if errs:
result.stderr += errs
result.return_code = 1
result.stderr = result.stderr.replace(src_dir + '/', '')
if self.builder.verbose_build:
result.stdout = config_out.getvalue() + result.stdout
result.cmd_list = cmd_list
result, do_config = self._config_and_build(
commit_upto, brd, work_dir, do_config, config_only,
adjust_cfg, commit, out_dir, out_rel_dir, result)
else:
result.return_code = 1
result.stderr = f'No tool chain for {brd.arch}\n'