aboutsummaryrefslogtreecommitdiff
path: root/tools/buildman/control.py
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-08-05 13:22:44 -0400
committerTom Rini <trini@konsulko.com>2022-08-05 13:22:44 -0400
commit56edbb5eafc53cd7b34cd231ec11c7e5eb576c9f (patch)
tree2dd1ae00ca6f61d0efda20d930c2f33bdbb23457 /tools/buildman/control.py
parent46b5c8ed017958fc387ab86c71ae6c90abb6793c (diff)
parentff75d6e03ee4346bbe9614f10949649bb704a7e9 (diff)
Merge branch '2022-08-05-buildman-integrate-boardscfg'
To quote Simon: This series drops the need for the genboardscfg.py script, so that the boards.cfg file is produced (and consumed) entirely within buildman. The file is not entirely removed since it does have some uses and we need some sort of cache for the information. The genboardscfg.py script is effectively incorporated in buildman. It also improves operation from an IDE with a new -I option and fixes up some of the pylint warnings in buildman. Finally, this series also fixes a bug which allows use to drop support for CONFIG_SYS_EXTRA_OPTIONS which is long-standing desire. It also fixes a minor bug that causes 'Invalid line' spam when checking for function bloat with the -B option.
Diffstat (limited to 'tools/buildman/control.py')
-rw-r--r--tools/buildman/control.py56
1 files changed, 25 insertions, 31 deletions
diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index 8f4810bc3e..0c75466fbd 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -8,7 +8,7 @@ import shutil
import subprocess
import sys
-from buildman import board
+from buildman import boards
from buildman import bsettings
from buildman import cfgutil
from buildman import toolchain
@@ -87,7 +87,7 @@ def ShowActions(series, why_selected, boards_selected, builder, options,
for warning in board_warnings:
print(col.build(col.YELLOW, warning))
-def ShowToolchainPrefix(boards, toolchains):
+def ShowToolchainPrefix(brds, toolchains):
"""Show information about a the tool chain used by one or more boards
The function checks that all boards use the same toolchain, then prints
@@ -100,9 +100,9 @@ def ShowToolchainPrefix(boards, toolchains):
Return:
None on success, string error message otherwise
"""
- boards = boards.GetSelectedDict()
+ board_selected = brds.get_selected_dict()
tc_set = set()
- for brd in boards.values():
+ for brd in board_selected.values():
tc_set.add(toolchains.Select(brd.arch))
if len(tc_set) != 1:
return 'Supplied boards must share one toolchain'
@@ -111,7 +111,7 @@ def ShowToolchainPrefix(boards, toolchains):
print(tc.GetEnvArgs(toolchain.VAR_CROSS_COMPILE))
return None
-def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
+def DoBuildman(options, args, toolchains=None, make_func=None, brds=None,
clean_dir=False, test_thread_exceptions=False):
"""The main control code for buildman
@@ -124,7 +124,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
to execute 'make'. If this is None, the normal function
will be used, which calls the 'make' tool with suitable
arguments. This setting is useful for tests.
- board: Boards() object to use, containing a list of available
+ brds: Boards() object to use, containing a list of available
boards. If this is None it will be created and scanned.
clean_dir: Used for tests only, indicates that the existing output_dir
should be removed before starting the build
@@ -176,32 +176,25 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
print()
return 0
- if options.incremental:
- print(col.build(col.RED,
- 'Warning: -I has been removed. See documentation'))
if not options.output_dir:
if options.work_in_output:
sys.exit(col.build(col.RED, '-w requires that you specify -o'))
options.output_dir = '..'
# Work out what subset of the boards we are building
- if not boards:
+ if not brds:
if not os.path.exists(options.output_dir):
os.makedirs(options.output_dir)
board_file = os.path.join(options.output_dir, 'boards.cfg')
- our_path = os.path.dirname(os.path.realpath(__file__))
- genboardscfg = os.path.join(our_path, '../genboardscfg.py')
- if not os.path.exists(genboardscfg):
- genboardscfg = os.path.join(options.git, 'tools/genboardscfg.py')
- status = subprocess.call([genboardscfg, '-q', '-o', board_file])
- if status != 0:
- # Older versions don't support -q
- status = subprocess.call([genboardscfg, '-o', board_file])
- if status != 0:
- sys.exit("Failed to generate boards.cfg")
-
- boards = board.Boards()
- boards.ReadBoards(board_file)
+
+ brds = boards.Boards()
+ ok = brds.ensure_board_list(board_file,
+ options.threads or multiprocessing.cpu_count(),
+ force=options.regen_board_list,
+ quiet=not options.verbose)
+ if options.regen_board_list:
+ return 0 if ok else 2
+ brds.read_boards(board_file)
exclude = []
if options.exclude:
@@ -214,14 +207,14 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
requested_boards += b.split(',')
else:
requested_boards = None
- why_selected, board_warnings = boards.SelectBoards(args, exclude,
- requested_boards)
- selected = boards.GetSelected()
+ why_selected, board_warnings = brds.select_boards(args, exclude,
+ requested_boards)
+ selected = brds.get_selected()
if not len(selected):
sys.exit(col.build(col.RED, 'No matching boards found'))
if options.print_prefix:
- err = ShowToolchainPrefix(boards, toolchains)
+ err = ShowToolchainPrefix(brds, toolchains)
if err:
sys.exit(col.build(col.RED, err))
return 0
@@ -352,7 +345,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
builder.in_tree = options.in_tree
# Work out which boards to build
- board_selected = boards.GetSelectedDict()
+ board_selected = brds.get_selected_dict()
if series:
commits = series.commits
@@ -362,8 +355,9 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
else:
commits = None
- tprint(GetActionSummary(options.summary, commits, board_selected,
- options))
+ if not options.ide:
+ tprint(GetActionSummary(options.summary, commits, board_selected,
+ options))
# We can't show function sizes without board details at present
if options.show_bloat:
@@ -372,7 +366,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
options.show_errors, options.show_sizes, options.show_detail,
options.show_bloat, options.list_error_boards, options.show_config,
options.show_environment, options.filter_dtb_warnings,
- options.filter_migration_warnings)
+ options.filter_migration_warnings, options.ide)
if options.summary:
builder.ShowSummary(commits, board_selected)
else: