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