123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- # Copyright (c) 2012 The Chromium OS Authors.
- #
- # 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):
- """Create a new board type.
- Args:
- status: define whether the board is 'Active' or 'Orphaned'
- arch: Architecture name (e.g. arm)
- cpu: Cpu name (e.g. arm1136)
- soc: Name of SOC, or '' if none (e.g. mx31)
- vendor: Name of vendor (e.g. armltd)
- board_name: Name of board (e.g. integrator)
- target: Target name (use make <target>_defconfig to configure)
- options: board-specific options (e.g. integratorcp:CM1136)
- """
- self.target = target
- self.arch = arch
- self.cpu = cpu
- self.board_name = board_name
- self.vendor = vendor
- self.soc = soc
- self.props = [self.target, self.arch, self.cpu, self.board_name,
- self.vendor, self.soc]
- self.options = options
- self.build_it = False
- class Boards:
- """Manage a list of boards."""
- def __init__(self):
- # Use a simple list here, sinc OrderedDict requires Python 2.7
- self._boards = []
- def AddBoard(self, board):
- """Add a new board to the list.
- The board's target member must not already exist in the board list.
- Args:
- board: board to add
- """
- self._boards.append(board)
- def ReadBoards(self, fname):
- """Read a list of boards from a board file.
- Create a board object for each and add it to our _boards list.
- Args:
- fname: Filename of boards.cfg file
- """
- with open(fname, 'r') as fd:
- for line in fd:
- if line[0] == '#':
- continue
- fields = line.split()
- if not fields:
- continue
- for upto in range(len(fields)):
- if fields[upto] == '-':
- fields[upto] = ''
- while len(fields) < 8:
- fields.append('')
- if len(fields) > 8:
- fields = fields[:8]
- board = Board(*fields)
- self.AddBoard(board)
- def GetList(self):
- """Return a list of available boards.
- Returns:
- List of Board objects
- """
- return self._boards
- def GetDict(self):
- """Build a dictionary containing all the boards.
- Returns:
- Dictionary:
- key is board.target
- value is board
- """
- board_dict = {}
- for board in self._boards:
- board_dict[board.target] = board
- return board_dict
- def GetSelectedDict(self):
- """Return a dictionary containing the selected boards
- Returns:
- List of Board objects that are marked selected
- """
- board_dict = {}
- for board in self._boards:
- if board.build_it:
- board_dict[board.target] = board
- return board_dict
- def GetSelected(self):
- """Return a list of selected boards
- Returns:
- List of Board objects that are marked selected
- """
- return [board for board in self._boards if board.build_it]
- def GetSelectedNames(self):
- """Return a list of selected boards
- Returns:
- List of board names that are marked selected
- """
- return [board.target for board in self._boards if board.build_it]
- def SelectBoards(self, args):
- """Mark boards selected based on args
- Args:
- List of strings specifying boards to include, either named, or
- by their target, architecture, cpu, vendor or soc. If empty, all
- boards are selected.
- Returns:
- Dictionary which holds the number of boards which were selected
- 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:
- 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
- result['all'] += 1
- else:
- board.build_it = True
- result['all'] += 1
- return result
|