[PATCH 1/1] buildman: allow specifying configuration fragments

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Fri Dec 20 01:21:55 CET 2024


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.

    tools/buildman/buildman \
    -o build \
    -k qemu-riscv64_smode \
    --fragments acpi.config

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
 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 cbf1345281b..28a25e965ce 100644
--- a/tools/buildman/builder.py
+++ b/tools/buildman/builder.py
@@ -1783,7 +1783,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=''):
         """Build all commits for a list of boards
 
         Args:
@@ -1821,6 +1821,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 b5afee61aff..090388940f8 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):
         """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
@@ -697,7 +701,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:
@@ -708,7 +712,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
@@ -754,14 +758,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 55d4d770c5c..a668783b4d4 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)
         if excs:
             return 102
         if fail:
-- 
2.47.1



More information about the U-Boot mailing list