1fc3fe1c2SSimon Glass# Copyright (c) 2012 The Chromium OS Authors. 2fc3fe1c2SSimon Glass# 31a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 4fc3fe1c2SSimon Glass# 5fc3fe1c2SSimon Glass 6fc3fe1c2SSimon Glassclass Board: 7fc3fe1c2SSimon Glass """A particular board that we can build""" 8*03c1bb24SAndreas Bießmann def __init__(self, status, arch, cpu, soc, vendor, board_name, target, options): 9fc3fe1c2SSimon Glass """Create a new board type. 10fc3fe1c2SSimon Glass 11fc3fe1c2SSimon Glass Args: 12*03c1bb24SAndreas Bießmann status: define whether the board is 'Active' or 'Orphaned' 13fc3fe1c2SSimon Glass arch: Architecture name (e.g. arm) 14fc3fe1c2SSimon Glass cpu: Cpu name (e.g. arm1136) 15fc3fe1c2SSimon Glass soc: Name of SOC, or '' if none (e.g. mx31) 16*03c1bb24SAndreas Bießmann vendor: Name of vendor (e.g. armltd) 17*03c1bb24SAndreas Bießmann board_name: Name of board (e.g. integrator) 18*03c1bb24SAndreas Bießmann target: Target name (use make <target>_config to configure) 19fc3fe1c2SSimon Glass options: board-specific options (e.g. integratorcp:CM1136) 20fc3fe1c2SSimon Glass """ 21fc3fe1c2SSimon Glass self.target = target 22fc3fe1c2SSimon Glass self.arch = arch 23fc3fe1c2SSimon Glass self.cpu = cpu 24fc3fe1c2SSimon Glass self.board_name = board_name 25fc3fe1c2SSimon Glass self.vendor = vendor 26fc3fe1c2SSimon Glass self.soc = soc 27fc3fe1c2SSimon Glass self.props = [self.target, self.arch, self.cpu, self.board_name, 28fc3fe1c2SSimon Glass self.vendor, self.soc] 29fc3fe1c2SSimon Glass self.options = options 30fc3fe1c2SSimon Glass self.build_it = False 31fc3fe1c2SSimon Glass 32fc3fe1c2SSimon Glass 33fc3fe1c2SSimon Glassclass Boards: 34fc3fe1c2SSimon Glass """Manage a list of boards.""" 35fc3fe1c2SSimon Glass def __init__(self): 36fc3fe1c2SSimon Glass # Use a simple list here, sinc OrderedDict requires Python 2.7 37fc3fe1c2SSimon Glass self._boards = [] 38fc3fe1c2SSimon Glass 39fc3fe1c2SSimon Glass def AddBoard(self, board): 40fc3fe1c2SSimon Glass """Add a new board to the list. 41fc3fe1c2SSimon Glass 42fc3fe1c2SSimon Glass The board's target member must not already exist in the board list. 43fc3fe1c2SSimon Glass 44fc3fe1c2SSimon Glass Args: 45fc3fe1c2SSimon Glass board: board to add 46fc3fe1c2SSimon Glass """ 47fc3fe1c2SSimon Glass self._boards.append(board) 48fc3fe1c2SSimon Glass 49fc3fe1c2SSimon Glass def ReadBoards(self, fname): 50fc3fe1c2SSimon Glass """Read a list of boards from a board file. 51fc3fe1c2SSimon Glass 52fc3fe1c2SSimon Glass Create a board object for each and add it to our _boards list. 53fc3fe1c2SSimon Glass 54fc3fe1c2SSimon Glass Args: 55fc3fe1c2SSimon Glass fname: Filename of boards.cfg file 56fc3fe1c2SSimon Glass """ 57fc3fe1c2SSimon Glass with open(fname, 'r') as fd: 58fc3fe1c2SSimon Glass for line in fd: 59fc3fe1c2SSimon Glass if line[0] == '#': 60fc3fe1c2SSimon Glass continue 61fc3fe1c2SSimon Glass fields = line.split() 62fc3fe1c2SSimon Glass if not fields: 63fc3fe1c2SSimon Glass continue 64fc3fe1c2SSimon Glass for upto in range(len(fields)): 65fc3fe1c2SSimon Glass if fields[upto] == '-': 66fc3fe1c2SSimon Glass fields[upto] = '' 67*03c1bb24SAndreas Bießmann while len(fields) < 8: 68fc3fe1c2SSimon Glass fields.append('') 69*03c1bb24SAndreas Bießmann if len(fields) > 8: 70*03c1bb24SAndreas Bießmann fields = fields[:8] 71fc3fe1c2SSimon Glass 72fc3fe1c2SSimon Glass board = Board(*fields) 73fc3fe1c2SSimon Glass self.AddBoard(board) 74fc3fe1c2SSimon Glass 75fc3fe1c2SSimon Glass 76fc3fe1c2SSimon Glass def GetList(self): 77fc3fe1c2SSimon Glass """Return a list of available boards. 78fc3fe1c2SSimon Glass 79fc3fe1c2SSimon Glass Returns: 80fc3fe1c2SSimon Glass List of Board objects 81fc3fe1c2SSimon Glass """ 82fc3fe1c2SSimon Glass return self._boards 83fc3fe1c2SSimon Glass 84fc3fe1c2SSimon Glass def GetDict(self): 85fc3fe1c2SSimon Glass """Build a dictionary containing all the boards. 86fc3fe1c2SSimon Glass 87fc3fe1c2SSimon Glass Returns: 88fc3fe1c2SSimon Glass Dictionary: 89fc3fe1c2SSimon Glass key is board.target 90fc3fe1c2SSimon Glass value is board 91fc3fe1c2SSimon Glass """ 92fc3fe1c2SSimon Glass board_dict = {} 93fc3fe1c2SSimon Glass for board in self._boards: 94fc3fe1c2SSimon Glass board_dict[board.target] = board 95fc3fe1c2SSimon Glass return board_dict 96fc3fe1c2SSimon Glass 97fc3fe1c2SSimon Glass def GetSelectedDict(self): 98fc3fe1c2SSimon Glass """Return a dictionary containing the selected boards 99fc3fe1c2SSimon Glass 100fc3fe1c2SSimon Glass Returns: 101fc3fe1c2SSimon Glass List of Board objects that are marked selected 102fc3fe1c2SSimon Glass """ 103fc3fe1c2SSimon Glass board_dict = {} 104fc3fe1c2SSimon Glass for board in self._boards: 105fc3fe1c2SSimon Glass if board.build_it: 106fc3fe1c2SSimon Glass board_dict[board.target] = board 107fc3fe1c2SSimon Glass return board_dict 108fc3fe1c2SSimon Glass 109fc3fe1c2SSimon Glass def GetSelected(self): 110fc3fe1c2SSimon Glass """Return a list of selected boards 111fc3fe1c2SSimon Glass 112fc3fe1c2SSimon Glass Returns: 113fc3fe1c2SSimon Glass List of Board objects that are marked selected 114fc3fe1c2SSimon Glass """ 115fc3fe1c2SSimon Glass return [board for board in self._boards if board.build_it] 116fc3fe1c2SSimon Glass 117fc3fe1c2SSimon Glass def GetSelectedNames(self): 118fc3fe1c2SSimon Glass """Return a list of selected boards 119fc3fe1c2SSimon Glass 120fc3fe1c2SSimon Glass Returns: 121fc3fe1c2SSimon Glass List of board names that are marked selected 122fc3fe1c2SSimon Glass """ 123fc3fe1c2SSimon Glass return [board.target for board in self._boards if board.build_it] 124fc3fe1c2SSimon Glass 125fc3fe1c2SSimon Glass def SelectBoards(self, args): 126fc3fe1c2SSimon Glass """Mark boards selected based on args 127fc3fe1c2SSimon Glass 128fc3fe1c2SSimon Glass Args: 129fc3fe1c2SSimon Glass List of strings specifying boards to include, either named, or 130fc3fe1c2SSimon Glass by their target, architecture, cpu, vendor or soc. If empty, all 131fc3fe1c2SSimon Glass boards are selected. 132fc3fe1c2SSimon Glass 133fc3fe1c2SSimon Glass Returns: 134fc3fe1c2SSimon Glass Dictionary which holds the number of boards which were selected 135fc3fe1c2SSimon Glass due to each argument, arranged by argument. 136fc3fe1c2SSimon Glass """ 137fc3fe1c2SSimon Glass result = {} 138fc3fe1c2SSimon Glass for arg in args: 139fc3fe1c2SSimon Glass result[arg] = 0 140fc3fe1c2SSimon Glass result['all'] = 0 141fc3fe1c2SSimon Glass 142fc3fe1c2SSimon Glass for board in self._boards: 143fc3fe1c2SSimon Glass if args: 144fc3fe1c2SSimon Glass for arg in args: 145fc3fe1c2SSimon Glass if arg in board.props: 146fc3fe1c2SSimon Glass if not board.build_it: 147fc3fe1c2SSimon Glass board.build_it = True 148fc3fe1c2SSimon Glass result[arg] += 1 149fc3fe1c2SSimon Glass result['all'] += 1 150fc3fe1c2SSimon Glass else: 151fc3fe1c2SSimon Glass board.build_it = True 152fc3fe1c2SSimon Glass result['all'] += 1 153fc3fe1c2SSimon Glass 154fc3fe1c2SSimon Glass return result 155