buildman: Replace the Options column with config name

This appears in boards.cfg but we want to remove it. Drop support for
generating it and reading it. Detect an old boards.cfg file that has
this field and regenerate it, to avoid problems.

Instead, add the config name in that place. This fixes a subtle bug in
the generation code, since it uses 'target' for the config name and then
overwrites the value in scan() by setting params['target'] to the name
of the defconfig. The defconfig name is not the same as the
SYS_CONFIG_NAME variable.

With this change, we still have the config name and it can be searched
by buildman, e.g. with:

   buildman -nv sun5i

Signed-off-by: Simon Glass <sjg@chromium.org>
Reported-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Simon Glass 2022-07-11 19:04:06 -06:00 committed by Tom Rini
parent 969fd333ba
commit 256126c294
2 changed files with 10 additions and 17 deletions

View File

@ -6,7 +6,7 @@
class Board: class Board:
"""A particular board that we can build""" """A particular board that we can build"""
def __init__(self, status, arch, cpu, soc, vendor, board_name, target, options): def __init__(self, status, arch, cpu, soc, vendor, board_name, target, cfg_name):
"""Create a new board type. """Create a new board type.
Args: Args:
@ -17,7 +17,7 @@ class Board:
vendor: Name of vendor (e.g. armltd) vendor: Name of vendor (e.g. armltd)
board_name: Name of board (e.g. integrator) board_name: Name of board (e.g. integrator)
target: Target name (use make <target>_defconfig to configure) target: Target name (use make <target>_defconfig to configure)
options: board-specific options (e.g. integratorcp:CM1136) cfg_name: Config name
""" """
self.target = target self.target = target
self.arch = arch self.arch = arch
@ -25,7 +25,7 @@ class Board:
self.board_name = board_name self.board_name = board_name
self.vendor = vendor self.vendor = vendor
self.soc = soc self.soc = soc
self.options = options self.cfg_name = cfg_name
self.props = [self.target, self.arch, self.cpu, self.board_name, self.props = [self.target, self.arch, self.cpu, self.board_name,
self.vendor, self.soc, self.options] self.vendor, self.soc, self.cfg_name]
self.build_it = False self.build_it = False

View File

@ -28,7 +28,7 @@ COMMENT_BLOCK = f'''#
# List of boards # List of boards
# Automatically generated by {__file__}: don't edit # Automatically generated by {__file__}: don't edit
# #
# Status, Arch, CPU, SoC, Vendor, Board, Target, Options, Maintainers # Status, Arch, CPU, SoC, Vendor, Board, Target, Config, Maintainers
''' '''
@ -98,6 +98,8 @@ def output_is_new(output):
# was generated # was generated
with open(output, encoding="utf-8") as inf: with open(output, encoding="utf-8") as inf:
for line in inf: for line in inf:
if 'Options,' in line:
return False
if line[0] == '#' or line == '\n': if line[0] == '#' or line == '\n':
continue continue
defconfig = line.split()[6] + '_defconfig' defconfig = line.split()[6] + '_defconfig'
@ -186,7 +188,7 @@ class KconfigScanner:
'vendor' : 'SYS_VENDOR', 'vendor' : 'SYS_VENDOR',
'board' : 'SYS_BOARD', 'board' : 'SYS_BOARD',
'config' : 'SYS_CONFIG_NAME', 'config' : 'SYS_CONFIG_NAME',
'options' : 'SYS_EXTRA_OPTIONS' # 'target' is added later
} }
def __init__(self): def __init__(self):
@ -216,7 +218,7 @@ class KconfigScanner:
defconfig (str): path to the defconfig file to be processed defconfig (str): path to the defconfig file to be processed
Returns: Returns:
Dictionary of board parameters. It has a form: A dictionary of board parameters. It has a form of:
{ {
'arch': <arch_name>, 'arch': <arch_name>,
'cpu': <cpu_name>, 'cpu': <cpu_name>,
@ -225,7 +227,6 @@ class KconfigScanner:
'board': <board_name>, 'board': <board_name>,
'target': <target_name>, 'target': <target_name>,
'config': <config_header_name>, 'config': <config_header_name>,
'options': <extra_options>
} }
""" """
# strip special prefixes and save it in a temporary file # strip special prefixes and save it in a temporary file
@ -262,14 +263,6 @@ class KconfigScanner:
if params['arch'] == 'arm' and params['cpu'] == 'armv8': if params['arch'] == 'arm' and params['cpu'] == 'armv8':
params['arch'] = 'aarch64' params['arch'] = 'aarch64'
# fix-up options field. It should have the form:
# <config name>[:comma separated config options]
if params['options'] != '-':
params['options'] = params['config'] + ':' + \
params['options'].replace(r'\"', '"')
elif params['config'] != params['target']:
params['options'] = params['config']
return params return params
@ -708,7 +701,7 @@ class Boards:
output (str): The path to the output file output (str): The path to the output file
""" """
fields = ('status', 'arch', 'cpu', 'soc', 'vendor', 'board', 'target', fields = ('status', 'arch', 'cpu', 'soc', 'vendor', 'board', 'target',
'options', 'maintainers') 'config', 'maintainers')
# First, decide the width of each column # First, decide the width of each column
max_length = {f: 0 for f in fields} max_length = {f: 0 for f in fields}