xref: /rk3399_rockchip-uboot/tools/buildman/board.py (revision 03c1bb242548e4e9d267d784861ccd69a1887aa0)
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