mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-26 11:58:52 +09:00
168 lines
5.1 KiB
Python
168 lines
5.1 KiB
Python
![]() |
# 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
|