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