[PATCH v4 80/83] buildman: Add a way to print the architecture for a board

Simon Glass sjg at chromium.org
Thu Jul 20 01:49:28 CEST 2023


This is useful for some tools and is easily available for buildman. Add
a new --print-arch option.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

(no changes since v2)

Changes in v2:
- Add new patch to print the architecture for a board

 tools/buildman/cmdline.py   |  2 ++
 tools/buildman/control.py   | 24 ++++++++++++++++++++++++
 tools/buildman/func_test.py |  7 +++++++
 3 files changed, 33 insertions(+)

diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py
index e218c8ffae76..047cd1a39eab 100644
--- a/tools/buildman/cmdline.py
+++ b/tools/buildman/cmdline.py
@@ -122,6 +122,8 @@ def add_after_m(parser):
           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',
+          default=False, help="Print the architecture for a board (ARCH=)")
     parser.add_argument('-r', '--reproducible-builds', action='store_true',
           help='Set SOURCE_DATE_EPOCH=0 to suuport a reproducible build')
     parser.add_argument('-R', '--regen-board-list', type=str,
diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index e6c20d6d3b6e..c96018252a57 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -140,6 +140,26 @@ def show_toolchain_prefix(brds, toolchains):
     tchain = tc_set.pop()
     print(tchain.GetEnvArgs(toolchain.VAR_CROSS_COMPILE))
 
+def show_arch(brds):
+    """Show information about a the architecture used by one or more boards
+
+    The function checks that all boards use the same architecture, then prints
+    the correct value for ARCH.
+
+    Args:
+        boards: Boards object containing selected boards
+
+    Return:
+        None on success, string error message otherwise
+    """
+    board_selected = brds.get_selected_dict()
+    arch_set = set()
+    for brd in board_selected.values():
+        arch_set.add(brd.arch)
+    if len(arch_set) != 1:
+        sys.exit('Supplied boards must share one arch')
+    print(arch_set.pop())
+
 def get_allow_missing(opt_allow, opt_no_allow, num_selected, has_branch):
     """Figure out whether to allow external blobs
 
@@ -605,6 +625,10 @@ def do_buildman(args, toolchains=None, make_func=None, brds=None,
         show_toolchain_prefix(brds, toolchains)
         return 0
 
+    if args.print_arch:
+        show_arch(brds)
+        return 0
+
     series = determine_series(selected, col, git_dir, args.count,
                               args.branch, args.work_in_output)
 
diff --git a/tools/buildman/func_test.py b/tools/buildman/func_test.py
index 126ea9e11f00..58a9bf33ab3b 100644
--- a/tools/buildman/func_test.py
+++ b/tools/buildman/func_test.py
@@ -1060,3 +1060,10 @@ endif
 
         self._RunControl('--boards', 'board1,board2', '--boards', 'board4')
         self.assertEqual(3, self._builder.count)
+
+    def test_print_arch(self):
+        """Test that we can print the board architecture"""
+        with test_util.capture_sys_output() as (stdout, stderr):
+            result = self._RunControl('--print-arch', 'board0')
+        self.assertEqual('arm\n', stdout.getvalue())
+        self.assertEqual('', stderr.getvalue())
-- 
2.41.0.487.g6d72f3e995-goog



More information about the U-Boot mailing list