From: Simon Glass Date: Tue, 17 Dec 2024 13:26:16 +0000 (-0700) Subject: buildman: Add a way to build a particular target X-Git-Tag: v2025.10-rc1~118^2~69^2~83 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c3d35348069bb7a70c41e6389818bbd9a095c5db;p=thirdparty%2Fu-boot.git buildman: Add a way to build a particular target At present buildman only supports building the default target. Generally this is what is wanted, but in some cases boards erroneously have a different target for product extra files. Add a --target option to help. Also add a comment indicating which letters are free for new options. Signed-off-by: Simon Glass --- diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py index 4bea0a02b78..6538a3d296f 100644 --- a/tools/buildman/builder.py +++ b/tools/buildman/builder.py @@ -265,7 +265,7 @@ class Builder: reproducible_builds=False, force_build=False, force_build_failures=False, force_reconfig=False, in_tree=False, force_config_on_failure=False, make_func=None, - dtc_skip=False): + dtc_skip=False, build_target=None): """Create a new Builder object Args: @@ -315,6 +315,7 @@ class Builder: retrying a failed build make_func (function): Function to call to run 'make' dtc_skip (bool): True to skip building dtc and use the system one + build_target (str): Build target to use (None to use the default) """ self.toolchains = toolchains self.base_dir = base_dir @@ -363,6 +364,7 @@ class Builder: raise ValueError('Cannot find dtc') else: self.dtc = None + self.build_target = build_target if not self.squash_config_y: self.config_filenames += EXTRA_CONFIG_FILENAMES diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py index b8578d5b97b..b4cb66397bb 100644 --- a/tools/buildman/builderthread.py +++ b/tools/buildman/builderthread.py @@ -285,6 +285,8 @@ class BuilderThread(threading.Thread): """ if config_only: args.append('cfg') + elif self.builder.build_target: + args.append(self.builder.build_target) result = self.make(commit, brd, 'build', cwd, *args, env=env) cmd_list.append([self.builder.gnu_make] + args) if (result.return_code == 2 and diff --git a/tools/buildman/buildman.rst b/tools/buildman/buildman.rst index 07ecc5c110c..5fa7b277cb8 100644 --- a/tools/buildman/buildman.rst +++ b/tools/buildman/buildman.rst @@ -1329,6 +1329,10 @@ sometimes useful to have buildman wait until the others have finished. Use the --process-limit option for this: --process-limit 1 will allow only one buildman to process jobs at a time. +To build a particular target, rather than the default U-Boot target, use the +`--target` option. This is unlikely to be useful unless you are building a +single board. + Build summary ------------- diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py index 7573e5bdfe8..9236d6187cf 100644 --- a/tools/buildman/cmdline.py +++ b/tools/buildman/cmdline.py @@ -22,6 +22,7 @@ def add_upto_m(parser): This is split out to avoid having too many statements in one function """ + # Available JqzZ parser.add_argument('-a', '--adjust-cfg', type=str, action='append', help='Adjust the Kconfig settings in .config before building') parser.add_argument('-A', '--print-prefix', action='store_true', @@ -153,6 +154,8 @@ def add_after_m(parser): parser.add_argument('-T', '--threads', type=int, default=None, help='Number of builder threads to use (0=single-thread)') + parser.add_argument('--target', type=str, + default=None, help='Build target to use') parser.add_argument('-u', '--show_unknown', action='store_true', default=False, help='Show boards with unknown build result') parser.add_argument('-U', '--show-environment', action='store_true', diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 5109b1cd5ce..4c9489126c1 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -785,6 +785,9 @@ def do_buildman(args, toolchains=None, make_func=None, brds=None, args.verbose) return 0 + if args.config_only and args.target: + raise ValueError('Cannot use --config-only with --target') + # Create a new builder with the selected args builder = Builder(toolchains, output_dir, git_dir, args.threads, args.jobs, checkout=True, @@ -810,7 +813,7 @@ def do_buildman(args, toolchains=None, make_func=None, brds=None, force_build_failures = args.force_build_failures, force_reconfig = args.force_reconfig, in_tree = args.in_tree, force_config_on_failure=not args.quick, make_func=make_func, - dtc_skip=args.dtc_skip) + dtc_skip=args.dtc_skip, build_target=args.target) TEST_BUILDER = builder diff --git a/tools/buildman/func_test.py b/tools/buildman/func_test.py index b45eb95a1e6..d70849b47ab 100644 --- a/tools/buildman/func_test.py +++ b/tools/buildman/func_test.py @@ -1152,3 +1152,13 @@ CONFIG_SOC="fred" 'board': 'ARM Board 0', 'config': 'config0', 'target': 'board0'}, []), res) + + def testTarget(self): + """Test that the --target flag works""" + lines = self.check_command('--target', 'u-boot.dtb')[0] + + # It should not affect the defconfig line + self.assertNotIn(b'u-boot.dtb', lines[0]) + + # It should appear at the end of the build line + self.assertEqual(b'u-boot.dtb', lines[1].split()[-1])