123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- # Copyright (c) 2012 The Chromium OS Authors.
- #
- # See file CREDITS for list of people who contributed to this
- # project.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation; either version 2 of
- # the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- # MA 02111-1307 USA
- #
- class Board:
- """A particular board that we can build"""
- def __init__(self, target, arch, cpu, board_name, vendor, soc, options):
- """Create a new board type.
- Args:
- target: Target name (use make <target>_config to configure)
- arch: Architecture name (e.g. arm)
- cpu: Cpu name (e.g. arm1136)
- board_name: Name of board (e.g. integrator)
- vendor: Name of vendor (e.g. armltd)
- soc: Name of SOC, or '' if none (e.g. mx31)
- 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) < 7:
- fields.append('')
- 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 = {}
- for arg in args:
- result[arg] = 0
- result['all'] = 0
- for board in self._boards:
- if args:
- for arg in args:
- if arg in board.props:
- 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
|