]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - tools/buildman/board.py
Merge branch 'u-boot-imx/master' into 'u-boot-arm/master'
[karo-tx-uboot.git] / tools / buildman / board.py
1 # Copyright (c) 2012 The Chromium OS Authors.
2 #
3 # See file CREDITS for list of people who contributed to this
4 # project.
5 #
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation; either version 2 of
9 # the License, or (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19 # MA 02111-1307 USA
20 #
21
22 class Board:
23     """A particular board that we can build"""
24     def __init__(self, target, arch, cpu, board_name, vendor, soc, options):
25         """Create a new board type.
26
27         Args:
28             target: Target name (use make <target>_config to configure)
29             arch: Architecture name (e.g. arm)
30             cpu: Cpu name (e.g. arm1136)
31             board_name: Name of board (e.g. integrator)
32             vendor: Name of vendor (e.g. armltd)
33             soc: Name of SOC, or '' if none (e.g. mx31)
34             options: board-specific options (e.g. integratorcp:CM1136)
35         """
36         self.target = target
37         self.arch = arch
38         self.cpu = cpu
39         self.board_name = board_name
40         self.vendor = vendor
41         self.soc = soc
42         self.props = [self.target, self.arch, self.cpu, self.board_name,
43                       self.vendor, self.soc]
44         self.options = options
45         self.build_it = False
46
47
48 class Boards:
49     """Manage a list of boards."""
50     def __init__(self):
51         # Use a simple list here, sinc OrderedDict requires Python 2.7
52         self._boards = []
53
54     def AddBoard(self, board):
55         """Add a new board to the list.
56
57         The board's target member must not already exist in the board list.
58
59         Args:
60             board: board to add
61         """
62         self._boards.append(board)
63
64     def ReadBoards(self, fname):
65         """Read a list of boards from a board file.
66
67         Create a board object for each and add it to our _boards list.
68
69         Args:
70             fname: Filename of boards.cfg file
71         """
72         with open(fname, 'r') as fd:
73             for line in fd:
74                 if line[0] == '#':
75                     continue
76                 fields = line.split()
77                 if not fields:
78                     continue
79                 for upto in range(len(fields)):
80                     if fields[upto] == '-':
81                         fields[upto] = ''
82                 while len(fields) < 7:
83                     fields.append('')
84
85                 board = Board(*fields)
86                 self.AddBoard(board)
87
88
89     def GetList(self):
90         """Return a list of available boards.
91
92         Returns:
93             List of Board objects
94         """
95         return self._boards
96
97     def GetDict(self):
98         """Build a dictionary containing all the boards.
99
100         Returns:
101             Dictionary:
102                 key is board.target
103                 value is board
104         """
105         board_dict = {}
106         for board in self._boards:
107             board_dict[board.target] = board
108         return board_dict
109
110     def GetSelectedDict(self):
111         """Return a dictionary containing the selected boards
112
113         Returns:
114             List of Board objects that are marked selected
115         """
116         board_dict = {}
117         for board in self._boards:
118             if board.build_it:
119                 board_dict[board.target] = board
120         return board_dict
121
122     def GetSelected(self):
123         """Return a list of selected boards
124
125         Returns:
126             List of Board objects that are marked selected
127         """
128         return [board for board in self._boards if board.build_it]
129
130     def GetSelectedNames(self):
131         """Return a list of selected boards
132
133         Returns:
134             List of board names that are marked selected
135         """
136         return [board.target for board in self._boards if board.build_it]
137
138     def SelectBoards(self, args):
139         """Mark boards selected based on args
140
141         Args:
142             List of strings specifying boards to include, either named, or
143             by their target, architecture, cpu, vendor or soc. If empty, all
144             boards are selected.
145
146         Returns:
147             Dictionary which holds the number of boards which were selected
148             due to each argument, arranged by argument.
149         """
150         result = {}
151         for arg in args:
152             result[arg] = 0
153         result['all'] = 0
154
155         for board in self._boards:
156             if args:
157                 for arg in args:
158                     if arg in board.props:
159                         if not board.build_it:
160                             board.build_it = True
161                             result[arg] += 1
162                             result['all'] += 1
163             else:
164                 board.build_it = True
165                 result['all'] += 1
166
167         return result