From 6a3fc91ea7fdf3f6e35c92eb02c9c73fb9f42d04 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 5 Dec 2019 15:59:12 -0700 Subject: buildman: Ask genboardscfg to be quiet Now that this tool has a 'quiet' flag, use it. Signed-off-by: Simon Glass --- tools/buildman/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/buildman/control.py') diff --git a/tools/buildman/control.py b/tools/buildman/control.py index c55a65d0c30..3b41d7b26a0 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -205,7 +205,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, os.makedirs(options.output_dir) board_file = os.path.join(options.output_dir, 'boards.cfg') genboardscfg = os.path.join(options.git, 'tools/genboardscfg.py') - status = subprocess.call([genboardscfg, '-o', board_file]) + status = subprocess.call([genboardscfg, '-q', '-o', board_file]) if status != 0: sys.exit("Failed to generate boards.cfg") -- cgit v1.2.3 From 7c66ead45267122c48bc854d1d5bd0d9a99bf943 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 5 Dec 2019 15:59:13 -0700 Subject: buildman: Figure out boards before commits At present buildman looks at toolchains, then commits and then boards. Move the board processing up above the commit processing, since it relates to the toolchain code. This will make it easier to check the toolchains needed for a board without processing commits first. Signed-off-by: Simon Glass --- tools/buildman/control.py | 59 +++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 30 deletions(-) (limited to 'tools/buildman/control.py') diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 3b41d7b26a0..a9c5022e48f 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -170,35 +170,6 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, print() return 0 - # Work out how many commits to build. We want to build everything on the - # branch. We also build the upstream commit as a control so we can see - # problems introduced by the first commit on the branch. - count = options.count - has_range = options.branch and '..' in options.branch - if count == -1: - if not options.branch: - count = 1 - else: - if has_range: - count, msg = gitutil.CountCommitsInRange(options.git_dir, - options.branch) - else: - count, msg = gitutil.CountCommitsInBranch(options.git_dir, - options.branch) - if count is None: - sys.exit(col.Color(col.RED, msg)) - elif count == 0: - sys.exit(col.Color(col.RED, "Range '%s' has no commits" % - options.branch)) - if msg: - print(col.Color(col.YELLOW, msg)) - count += 1 # Build upstream commit also - - if not count: - str = ("No commits found to process in branch '%s': " - "set branch's upstream or use -c flag" % options.branch) - sys.exit(col.Color(col.RED, str)) - # Work out what subset of the boards we are building if not boards: if not os.path.exists(options.output_dir): @@ -217,7 +188,6 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, for arg in options.exclude: exclude += arg.split(',') - if options.boards: requested_boards = [] for b in options.boards: @@ -230,6 +200,35 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, if not len(selected): sys.exit(col.Color(col.RED, 'No matching boards found')) + # Work out how many commits to build. We want to build everything on the + # branch. We also build the upstream commit as a control so we can see + # problems introduced by the first commit on the branch. + count = options.count + has_range = options.branch and '..' in options.branch + if count == -1: + if not options.branch: + count = 1 + else: + if has_range: + count, msg = gitutil.CountCommitsInRange(options.git_dir, + options.branch) + else: + count, msg = gitutil.CountCommitsInBranch(options.git_dir, + options.branch) + if count is None: + sys.exit(col.Color(col.RED, msg)) + elif count == 0: + sys.exit(col.Color(col.RED, "Range '%s' has no commits" % + options.branch)) + if msg: + print(col.Color(col.YELLOW, msg)) + count += 1 # Build upstream commit also + + if not count: + str = ("No commits found to process in branch '%s': " + "set branch's upstream or use -c flag" % options.branch) + sys.exit(col.Color(col.RED, str)) + # Read the metadata from the commits. First look at the upstream commit, # then the ones in the branch. We would like to do something like # upstream/master~..branch but that isn't possible if upstream/master is -- cgit v1.2.3 From 57cb9d52397c9051d7b3d27bd107cce04a16846f Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 5 Dec 2019 15:59:14 -0700 Subject: buildman: Add options to get the arch and toolchain info Sometimes it is useful for external tools to use buildman to provide the toolchain information. Add an -a option which shows the value to use for the ARCH environment variable, and -A which does the same for CROSS_COMPILE Signed-off-by: Simon Glass --- tools/buildman/control.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tools/buildman/control.py') diff --git a/tools/buildman/control.py b/tools/buildman/control.py index a9c5022e48f..969d866547a 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -107,6 +107,34 @@ def CheckOutputDir(output_dir): break path = parent +def ShowToolchainInfo(boards, toolchains, print_arch, print_prefix): + """Show information about a the tool chain used by one or more boards + + The function checks that all boards use the same toolchain. + + Args: + boards: Boards object containing selected boards + toolchains: Toolchains object containing available toolchains + print_arch: True to print ARCH value + print_prefix: True to print CROSS_COMPILE value + + Return: + None on success, string error message otherwise + """ + boards = boards.GetSelectedDict() + tc_set = set() + for brd in boards.values(): + tc_set.add(toolchains.Select(brd.arch)) + if len(tc_set) != 1: + return 'Supplied boards must share one toolchain' + return False + tc = tc_set.pop() + if print_arch: + print(tc.GetEnvArgs(toolchain.VAR_ARCH)) + if print_prefix: + print(tc.GetEnvArgs(toolchain.VAR_CROSS_COMPILE)) + return None + def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, clean_dir=False): """The main control code for buildman @@ -200,6 +228,13 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None, if not len(selected): sys.exit(col.Color(col.RED, 'No matching boards found')) + if options.print_arch or options.print_prefix: + err = ShowToolchainInfo(boards, toolchains, options.print_arch, + options.print_prefix) + if err: + sys.exit(col.Color(col.RED, err)) + return 0 + # Work out how many commits to build. We want to build everything on the # branch. We also build the upstream commit as a control so we can see # problems introduced by the first commit on the branch. -- cgit v1.2.3