Hi Heinrich, On Wed, 16 Apr 2025 at 16:40, Heinrich Schuchardt <heinrich.schucha...@canonical.com> wrote: > > Currently we are no able to build with configuration fragments in our CI. > With this patch buildman gets a new argument --fragments for passing a > comma separated list of configuration fragments to add to the board > defconfigs, e.g. > > tools/buildman/buildman \ > -o build \ > -k qemu-riscv64_smode \ > --fragments acpi.config > > Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> > --- > v2: > no change > --- > tools/buildman/builder.py | 3 ++- > tools/buildman/builderthread.py | 18 +++++++++++------- > tools/buildman/cmdline.py | 2 ++ > tools/buildman/control.py | 2 +- > 4 files changed, 16 insertions(+), 9 deletions(-) > > diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py > index 4bea0a02b78..2aa882d77ec 100644 > --- a/tools/buildman/builder.py > +++ b/tools/buildman/builder.py > @@ -1784,7 +1784,7 @@ class Builder: > shutil.rmtree(dirname) > terminal.print_clear() > > - def build_boards(self, commits, board_selected, keep_outputs, verbose): > + def build_boards(self, commits, board_selected, keep_outputs, verbose, > fragments=''):
I think it might be better to change the code to always pass fragments. Also please document params in the Args: below. > """Build all commits for a list of boards > > Args: > @@ -1822,6 +1822,7 @@ class Builder: > job.keep_outputs = keep_outputs > job.work_in_output = self.work_in_output > job.adjust_cfg = self.adjust_cfg > + job.fragments = fragments > job.step = self._step > if self.num_threads: > self.queue.put(job) > diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py > index b8578d5b97b..de9346327d6 100644 > --- a/tools/buildman/builderthread.py > +++ b/tools/buildman/builderthread.py > @@ -383,7 +383,7 @@ class BuilderThread(threading.Thread): > > def _config_and_build(self, commit_upto, brd, work_dir, do_config, > mrproper, > config_only, adjust_cfg, commit, out_dir, > out_rel_dir, > - result): > + fragments, result): > """Do the build, configuring first if necessary > > Args: > @@ -397,6 +397,7 @@ class BuilderThread(threading.Thread): > 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 > + fragments (str): config fragments add to defconfig > result (CommandResult): Previous result > > Returns: > @@ -412,6 +413,8 @@ class BuilderThread(threading.Thread): > args, cwd, src_dir = self._build_args(brd, out_dir, out_rel_dir, > work_dir, commit_upto) > config_args = [f'{brd.target}_defconfig'] > + if fragments != None: > + config_args.extend(fragments.split(',')) > config_out = io.StringIO() > > _remove_old_outputs(out_dir) > @@ -450,7 +453,7 @@ class BuilderThread(threading.Thread): > > def run_commit(self, commit_upto, brd, work_dir, do_config, mrproper, > config_only, force_build, force_build_failures, > - work_in_output, adjust_cfg): > + work_in_output, adjust_cfg, fragments): again, please check that you add comments for args on every function. > """Build a particular commit. > > If the build is already done, and we are not forcing a build, we skip > @@ -475,6 +478,7 @@ class BuilderThread(threading.Thread): > ~C to disable C > C=val to set the value of C (val must have quotes if C > is > a string Kconfig > + fragments (str): config fragments add to defconfig > > Returns: > tuple containing: > @@ -504,7 +508,7 @@ class BuilderThread(threading.Thread): > result, do_config = self._config_and_build( > commit_upto, brd, work_dir, do_config, mrproper, > config_only, adjust_cfg, commit, out_dir, out_rel_dir, > - result) > + fragments, result) > result.already_done = False > > result.toolchain = self.toolchain > @@ -702,7 +706,7 @@ class BuilderThread(threading.Thread): > self.builder.config_only, > force_build or self.builder.force_build, > self.builder.force_build_failures, > - job.work_in_output, job.adjust_cfg) > + job.work_in_output, job.adjust_cfg, job.fragments) > failed = result.return_code or result.stderr > did_config = do_config > if failed and not do_config and not self.mrproper: > @@ -713,7 +717,7 @@ class BuilderThread(threading.Thread): > brd, work_dir, True, > self.mrproper or self.builder.fallback_mrproper, > False, True, False, job.work_in_output, > - job.adjust_cfg) > + job.adjust_cfg, job.fragments) > did_config = True > if not self.builder.force_reconfig: > do_config = request_config > @@ -759,14 +763,14 @@ class BuilderThread(threading.Thread): > result, request_config = self.run_commit(None, brd, work_dir, > True, > self.mrproper, self.builder.config_only, True, > self.builder.force_build_failures, > job.work_in_output, > - job.adjust_cfg) > + job.adjust_cfg, job.fragments) > failed = result.return_code or result.stderr > if failed and not self.mrproper: > result, request_config = self.run_commit(None, brd, work_dir, > True, self.builder.fallback_mrproper, > self.builder.config_only, True, > self.builder.force_build_failures, > - job.work_in_output, job.adjust_cfg) > + job.work_in_output, job.adjust_cfg, > job.fragments) > > result.commit_upto = 0 > self._write_result(result, job.keep_outputs, job.work_in_output) > diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py > index 7573e5bdfe8..38ea7f9f335 100644 > --- a/tools/buildman/cmdline.py > +++ b/tools/buildman/cmdline.py > @@ -62,6 +62,8 @@ def add_upto_m(parser): > help="Fetch a toolchain for architecture FETCH_ARCH ('list' to > list)." > ' You can also fetch several toolchains separate by comma, or' > " 'all' to download all") > + parser.add_argument('--fragments', type=str, > + help="Comma separated list of configuration fragments to be > applied") > parser.add_argument( > '--full-check', action='store_true', > help='Check maintainer entries and TARGET configs') > diff --git a/tools/buildman/control.py b/tools/buildman/control.py > index 5109b1cd5ce..1a95aa47fc5 100644 > --- a/tools/buildman/control.py > +++ b/tools/buildman/control.py > @@ -561,7 +561,7 @@ def run_builder(builder, commits, board_selected, args): > builder.show_summary(commits, board_selected) > else: > fail, warned, excs = builder.build_boards( > - commits, board_selected, args.keep_outputs, args.verbose) > + commits, board_selected, args.keep_outputs, args.verbose, > args.fragments) long line? > if excs: > return 102 > if fail: > -- > 2.48.1 > REgards, Simon