mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +00:00
buildman: Implement an option to exclude boards from the build
Some boards are known to be broken and it is convenient to be able to exclude them from the build. Add an --exclude option to specific boards to exclude. This uses the same matching rules as the normal 'include' arguments, and is a comma- separated list of regular expressions. Suggested-by: York Sun <yorksun@freescale.com> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
f60c9d4f39
commit
3cf4ae6f86
4 changed files with 41 additions and 8 deletions
|
@ -114,6 +114,13 @@ the '&' operator to limit the selection:
|
||||||
* 'freescale & arm sandbox' All Freescale boards with ARM architecture,
|
* 'freescale & arm sandbox' All Freescale boards with ARM architecture,
|
||||||
plus sandbox
|
plus sandbox
|
||||||
|
|
||||||
|
You can also use -x to specifically exclude some boards. For example:
|
||||||
|
|
||||||
|
buildmand arm -x nvidia,freescale,.*ball$
|
||||||
|
|
||||||
|
means to build all arm boards except nvidia, freescale and anything ending
|
||||||
|
with 'ball'.
|
||||||
|
|
||||||
It is convenient to use the -n option to see whaat will be built based on
|
It is convenient to use the -n option to see whaat will be built based on
|
||||||
the subset given.
|
the subset given.
|
||||||
|
|
||||||
|
|
|
@ -239,13 +239,14 @@ class Boards:
|
||||||
terms.append(term)
|
terms.append(term)
|
||||||
return terms
|
return terms
|
||||||
|
|
||||||
def SelectBoards(self, args):
|
def SelectBoards(self, args, exclude=[]):
|
||||||
"""Mark boards selected based on args
|
"""Mark boards selected based on args
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
List of strings specifying boards to include, either named, or
|
args: List of strings specifying boards to include, either named,
|
||||||
by their target, architecture, cpu, vendor or soc. If empty, all
|
or by their target, architecture, cpu, vendor or soc. If
|
||||||
boards are selected.
|
empty, all boards are selected.
|
||||||
|
exclude: List of boards to exclude, regardless of 'args'
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dictionary which holds the number of boards which were selected
|
Dictionary which holds the number of boards which were selected
|
||||||
|
@ -258,17 +259,33 @@ class Boards:
|
||||||
for term in terms:
|
for term in terms:
|
||||||
result[str(term)] = 0
|
result[str(term)] = 0
|
||||||
|
|
||||||
|
exclude_list = []
|
||||||
|
for expr in exclude:
|
||||||
|
exclude_list.append(Expr(expr))
|
||||||
|
|
||||||
for board in self._boards:
|
for board in self._boards:
|
||||||
|
matching_term = None
|
||||||
|
build_it = False
|
||||||
if terms:
|
if terms:
|
||||||
match = False
|
match = False
|
||||||
for term in terms:
|
for term in terms:
|
||||||
if term.Matches(board.props):
|
if term.Matches(board.props):
|
||||||
board.build_it = True
|
matching_term = str(term)
|
||||||
result[str(term)] += 1
|
build_it = True
|
||||||
result['all'] += 1
|
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
build_it = True
|
||||||
|
|
||||||
|
# Check that it is not specifically excluded
|
||||||
|
for expr in exclude_list:
|
||||||
|
if expr.Matches(board.props):
|
||||||
|
build_it = False
|
||||||
|
break
|
||||||
|
|
||||||
|
if build_it:
|
||||||
board.build_it = True
|
board.build_it = True
|
||||||
|
if matching_term:
|
||||||
|
result[matching_term] += 1
|
||||||
result['all'] += 1
|
result['all'] += 1
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -117,6 +117,9 @@ parser.add_option('-u', '--show_unknown', action='store_true',
|
||||||
default=False, help='Show boards with unknown build result')
|
default=False, help='Show boards with unknown build result')
|
||||||
parser.add_option('-v', '--verbose', action='store_true',
|
parser.add_option('-v', '--verbose', action='store_true',
|
||||||
default=False, help='Show build results while the build progresses')
|
default=False, help='Show build results while the build progresses')
|
||||||
|
parser.add_option('-x', '--exclude', dest='exclude',
|
||||||
|
type='string', action='append',
|
||||||
|
help='Specify a list of boards to exclude, separated by comma')
|
||||||
|
|
||||||
parser.usage += """
|
parser.usage += """
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,13 @@ def DoBuildman(options, args):
|
||||||
|
|
||||||
boards = board.Boards()
|
boards = board.Boards()
|
||||||
boards.ReadBoards(os.path.join(options.git, 'boards.cfg'))
|
boards.ReadBoards(os.path.join(options.git, 'boards.cfg'))
|
||||||
why_selected = boards.SelectBoards(args)
|
|
||||||
|
exclude = []
|
||||||
|
if options.exclude:
|
||||||
|
for arg in options.exclude:
|
||||||
|
exclude += arg.split(',')
|
||||||
|
|
||||||
|
why_selected = boards.SelectBoards(args, exclude)
|
||||||
selected = boards.GetSelected()
|
selected = boards.GetSelected()
|
||||||
if not len(selected):
|
if not len(selected):
|
||||||
sys.exit(col.Color(col.RED, 'No matching boards found'))
|
sys.exit(col.Color(col.RED, 'No matching boards found'))
|
||||||
|
|
Loading…
Add table
Reference in a new issue