buildman: make board selector argument a regex

A common use-case is to build all boards for a particular SoC. This can
be achieved by:

./tools/buildman/buildman -b mainline_dev tegra20

However, when the SoC is a member of a family of SoCs, and each SoC has
a different name, it would be even more useful to build all boards for
every SoC in that family. This currently isn't possible since buildman's
board selection command-line arguments are compared to board definitions
using pure string equality.

To enable this, compare using a regex match instead. This matches
MAKEALL's handling of command-line arguments. This enables:

(all Tegra)
./tools/buildman/buildman -b mainline_dev tegra

(all Tegra)
./tools/buildman/buildman -b mainline_dev '^tegra.*$'

(all Tegra20, Tegra30 boards, but not Tegra114)
./tools/buildman/buildman -b mainline_dev 'tegra[23]'

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Stephen Warren 2013-10-10 10:00:20 -06:00 committed by Simon Glass
parent 61242ac5f9
commit 8426d8b089
2 changed files with 21 additions and 5 deletions

View file

@ -89,10 +89,16 @@ a few commits or boards, it will be pretty slow. As a tip, if you don't
plan to use your machine for anything else, you can use -T to increase the
number of threads beyond the default.
Buildman lets you build all boards, or a subset. Specify the subset using
the board name, architecture name, SOC name, or anything else in the
boards.cfg file. So 'at91' will build all AT91 boards (arm), powerpc will
build all PowerPC boards.
Buildman lets you build all boards, or a subset. Specify the subset by passing
command-line arguments that list the desired board name, architecture name,
SOC name, or anything else in the boards.cfg file. Multiple arguments are
allowed. Each argument will be interpreted as a regular expression, so
behaviour is a superset of exact or substring matching. Examples are:
* 'tegra20' All boards with a Tegra20 SoC
* 'tegra' All boards with any Tegra Soc (Tegra20, Tegra30, Tegra114...)
* '^tegra[23]0$' All boards with either Tegra20 or Tegra30 SoC
* 'powerpc' All PowerPC boards
Buildman does not store intermediate object files. It optionally copies
the binary output into a directory when a build is successful. Size

View file

@ -3,6 +3,8 @@
# SPDX-License-Identifier: GPL-2.0+
#
import re
class Board:
"""A particular board that we can build"""
def __init__(self, status, arch, cpu, soc, vendor, board_name, target, options):
@ -135,14 +137,22 @@ class Boards:
due to each argument, arranged by argument.
"""
result = {}
argres = {}
for arg in args:
result[arg] = 0
argres[arg] = re.compile(arg)
result['all'] = 0
for board in self._boards:
if args:
for arg in args:
if arg in board.props:
argre = argres[arg]
match = False
for prop in board.props:
match = argre.match(prop)
if match:
break
if match:
if not board.build_it:
board.build_it = True
result[arg] += 1