]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | # SPDX-License-Identifier: GPL-2.0+ |
fc3fe1c2 | 2 | # Copyright (c) 2013 The Chromium OS Authors. |
fc3fe1c2 | 3 | |
6eede34c SG |
4 | (Please read 'How to change from MAKEALL' if you are used to that tool) |
5 | ||
c8d7393b SG |
6 | Quick-start |
7 | =========== | |
8 | ||
9 | If you just want to quickly set up buildman so you can build something (for | |
10 | example Raspberry Pi 2): | |
11 | ||
12 | cd /path/to/u-boot | |
13 | PATH=$PATH:`pwd`/tools/buildman | |
14 | buildman --fetch-arch arm | |
15 | buildman -k rpi_2 | |
16 | ls ../current/rpi_2 | |
17 | # u-boot.bin is the output image | |
18 | ||
19 | ||
fc3fe1c2 SG |
20 | What is this? |
21 | ============= | |
22 | ||
23 | This tool handles building U-Boot to check that you have not broken it | |
24 | with your patch series. It can build each individual commit and report | |
25 | which boards fail on which commits, and which errors come up. It aims | |
26 | to make full use of multi-processor machines. | |
27 | ||
28 | A key feature of buildman is its output summary, which allows warnings, | |
29 | errors or image size increases in a particular commit or board to be | |
30 | quickly identified and the offending commit pinpointed. This can be a big | |
31 | help for anyone working with >10 patches at a time. | |
32 | ||
33 | ||
34 | Caveats | |
35 | ======= | |
36 | ||
fc3fe1c2 SG |
37 | Buildman can be stopped and restarted, in which case it will continue |
38 | where it left off. This should happen cleanly and without side-effects. | |
39 | If not, it is a bug, for which a patch would be welcome. | |
40 | ||
41 | Buildman gets so tied up in its work that it can ignore the outside world. | |
42 | You may need to press Ctrl-C several times to quit it. Also it will print | |
8ea42101 SG |
43 | out various exceptions when stopped. You may have to kill it since the |
44 | Ctrl-C handling is somewhat broken. | |
fc3fe1c2 SG |
45 | |
46 | ||
47 | Theory of Operation | |
48 | =================== | |
49 | ||
50 | (please read this section in full twice or you will be perpetually confused) | |
51 | ||
52 | Buildman is a builder. It is not make, although it runs make. It does not | |
53 | produce any useful output on the terminal while building, except for | |
f9728365 SG |
54 | progress information (but see -v below). All the output (errors, warnings and |
55 | binaries if you ask for them) is stored in output directories, which you can | |
56 | look at from a separate 'buildman -s' instance while the build is progressing, | |
57 | or when it is finished. | |
fc3fe1c2 | 58 | |
8ea42101 | 59 | Buildman is designed to build entire git branches, i.e. muliple commits. It |
f9728365 SG |
60 | can be run repeatedly on the same branch after making changes to commits on |
61 | that branch. In this case it will automatically rebuild commits which have | |
62 | changed (and remove its old results for that commit). It is possible to build | |
63 | a branch for one board, then later build it for another board. This adds to | |
64 | the output, so now you have results for two boards. If you want buildman to | |
65 | re-build a commit it has already built (e.g. because of a toolchain update), | |
66 | use the -f flag. | |
8ea42101 | 67 | |
fc3fe1c2 SG |
68 | Buildman produces a concise summary of which boards succeeded and failed. |
69 | It shows which commit introduced which board failure using a simple | |
f9728365 SG |
70 | red/green colour coding (with yellow/cyan for warnings). Full error |
71 | information can be requested, in which case it is de-duped and displayed | |
72 | against the commit that introduced the error. An example workflow is below. | |
fc3fe1c2 SG |
73 | |
74 | Buildman stores image size information and can report changes in image size | |
75 | from commit to commit. An example of this is below. | |
76 | ||
77 | Buildman starts multiple threads, and each thread builds for one board at | |
78 | a time. A thread starts at the first commit, configures the source for your | |
79 | board and builds it. Then it checks out the next commit and does an | |
f9728365 SG |
80 | incremental build (i.e. not using 'make xxx_defconfig' unless you use -C). |
81 | Eventually the thread reaches the last commit and stops. If a commit causes | |
82 | an error or warning, buildman will try it again after reconfiguring (but see | |
83 | -Q). Thus some commits may be built twice, with the first result silently | |
84 | discarded. Lots of errors and warnings will causes lots of reconfigures and your | |
85 | build will be very slow. This is because a file that produces just a warning | |
86 | would not normally be rebuilt in an incremental build. Once a thread finishes | |
87 | building all the commits for a board, it starts on the commits for another | |
88 | board. | |
fc3fe1c2 SG |
89 | |
90 | Buildman works in an entirely separate place from your U-Boot repository. | |
91 | It creates a separate working directory for each thread, and puts the | |
92 | output files in the working directory, organised by commit name and board | |
f9728365 | 93 | name, in a two-level hierarchy (but see -P). |
fc3fe1c2 SG |
94 | |
95 | Buildman is invoked in your U-Boot directory, the one with the .git | |
96 | directory. It clones this repository into a copy for each thread, and the | |
97 | threads do not affect the state of your git repository. Any checkouts done | |
98 | by the thread affect only the working directory for that thread. | |
99 | ||
cec83c3e | 100 | Buildman automatically selects the correct tool chain for each board. You |
f9728365 SG |
101 | must supply suitable tool chains (see --fetch-arch), but buildman takes care |
102 | of selecting the right one. | |
fc3fe1c2 | 103 | |
e5a0e5d8 | 104 | Buildman generally builds a branch (with the -b flag), and in this case |
f9728365 SG |
105 | builds the upstream commit as well, for comparison. So even if you have one |
106 | commit in your branch, two commits will be built. Put all your commits in a | |
107 | branch, set the branch's upstream to a valid value, and all will be well. | |
108 | Otherwise buildman will perform random actions. Use -n to check what the | |
109 | random actions might be. | |
110 | ||
111 | Buildman effectively has two modes: without -s it builds, with -s it | |
112 | summarises the results of previous (or active) builds. | |
113 | ||
114 | If you just want to build the current source tree, leave off the -b flag. | |
115 | This will display results and errors as they happen. You can still look at | |
116 | them later using -se. Note that buildman will assume that the source has | |
117 | changed, and will build all specified boards in this case. | |
fc3fe1c2 SG |
118 | |
119 | Buildman is optimised for building many commits at once, for many boards. | |
120 | On multi-core machines, Buildman is fast because it uses most of the | |
121 | available CPU power. When it gets to the end, or if you are building just | |
122 | a few commits or boards, it will be pretty slow. As a tip, if you don't | |
123 | plan to use your machine for anything else, you can use -T to increase the | |
124 | number of threads beyond the default. | |
125 | ||
0689036a SG |
126 | |
127 | Selecting which boards to build | |
128 | =============================== | |
129 | ||
8426d8b0 SW |
130 | Buildman lets you build all boards, or a subset. Specify the subset by passing |
131 | command-line arguments that list the desired board name, architecture name, | |
132 | SOC name, or anything else in the boards.cfg file. Multiple arguments are | |
133 | allowed. Each argument will be interpreted as a regular expression, so | |
134 | behaviour is a superset of exact or substring matching. Examples are: | |
135 | ||
136 | * 'tegra20' All boards with a Tegra20 SoC | |
137 | * 'tegra' All boards with any Tegra Soc (Tegra20, Tegra30, Tegra114...) | |
138 | * '^tegra[23]0$' All boards with either Tegra20 or Tegra30 SoC | |
139 | * 'powerpc' All PowerPC boards | |
fc3fe1c2 | 140 | |
6131beab SG |
141 | While the default is to OR the terms together, you can also make use of |
142 | the '&' operator to limit the selection: | |
143 | ||
144 | * 'freescale & arm sandbox' All Freescale boards with ARM architecture, | |
145 | plus sandbox | |
146 | ||
3cf4ae6f SG |
147 | You can also use -x to specifically exclude some boards. For example: |
148 | ||
24296136 | 149 | buildman arm -x nvidia,freescale,.*ball$ |
3cf4ae6f SG |
150 | |
151 | means to build all arm boards except nvidia, freescale and anything ending | |
152 | with 'ball'. | |
153 | ||
9e040b57 SG |
154 | For building specific boards you can use the --boards (or --bo) option, which |
155 | takes a comma-separated list of board target names and be used multiple times | |
156 | on the command line: | |
0689036a | 157 | |
24296136 | 158 | buildman --boards sandbox,snow --boards |
0689036a | 159 | |
3e1ded1f | 160 | It is convenient to use the -n option to see what will be built based on |
8d7523c5 | 161 | the subset given. Use -v as well to get an actual list of boards. |
6131beab | 162 | |
fc3fe1c2 | 163 | Buildman does not store intermediate object files. It optionally copies |
0689036a | 164 | the binary output into a directory when a build is successful (-k). Size |
fc3fe1c2 SG |
165 | information is always recorded. It needs a fair bit of disk space to work, |
166 | typically 250MB per thread. | |
167 | ||
168 | ||
169 | Setting up | |
170 | ========== | |
171 | ||
172 | 1. Get the U-Boot source. You probably already have it, but if not these | |
173 | steps should get you started with a repo and some commits for testing. | |
174 | ||
175 | $ cd /path/to/u-boot | |
176 | $ git clone git://git.denx.de/u-boot.git . | |
177 | $ git checkout -b my-branch origin/master | |
178 | $ # Add some commits to the branch, reading for testing | |
179 | ||
62005342 SG |
180 | 2. Create ~/.buildman to tell buildman where to find tool chains (see 'The |
181 | .buildman file' later for details). As an example: | |
fc3fe1c2 SG |
182 | |
183 | # Buildman settings file | |
184 | ||
185 | [toolchain] | |
186 | root: / | |
187 | rest: /toolchains/* | |
188 | eldk: /opt/eldk-4.2 | |
e9569478 SG |
189 | arm: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux |
190 | aarch64: /opt/linaro/gcc-linaro-aarch64-none-elf-4.8-2013.10_linux | |
fc3fe1c2 SG |
191 | |
192 | [toolchain-alias] | |
193 | x86: i386 | |
194 | blackfin: bfin | |
fc3fe1c2 | 195 | nds32: nds32le |
e8aebc47 | 196 | openrisc: or1k |
fc3fe1c2 SG |
197 | |
198 | ||
199 | This selects the available toolchain paths. Add the base directory for | |
200 | each of your toolchains here. Buildman will search inside these directories | |
201 | and also in any '/usr' and '/usr/bin' subdirectories. | |
202 | ||
203 | Make sure the tags (here root: rest: and eldk:) are unique. | |
204 | ||
205 | The toolchain-alias section indicates that the i386 toolchain should be used | |
206 | to build x86 commits. | |
207 | ||
17bce66c SG |
208 | Note that you can also specific exactly toolchain prefixes if you like: |
209 | ||
210 | [toolchain-prefix] | |
211 | arm: /opt/arm-eabi-4.6/bin/arm-eabi- | |
212 | ||
213 | or even: | |
214 | ||
215 | [toolchain-prefix] | |
216 | arm: /opt/arm-eabi-4.6/bin/arm-eabi-gcc | |
217 | ||
218 | This tells buildman that you want to use this exact toolchain for the arm | |
219 | architecture. This will override any toolchains found by searching using the | |
220 | [toolchain] settings. | |
221 | ||
222 | Since the toolchain prefix is an explicit request, buildman will report an | |
223 | error if a toolchain is not found with that prefix. The current PATH will be | |
224 | searched, so it is possible to use: | |
225 | ||
226 | [toolchain-prefix] | |
227 | arm: arm-none-eabi- | |
228 | ||
229 | and buildman will find arm-none-eabi-gcc in /usr/bin if you have it installed. | |
fc3fe1c2 | 230 | |
d5fe013c YS |
231 | [toolchain-wrapper] |
232 | wrapper: ccache | |
233 | ||
234 | This tells buildman to use a compiler wrapper in front of CROSS_COMPILE. In | |
235 | this example, ccache. It doesn't affect the toolchain scan. The wrapper is | |
236 | added when CROSS_COMPILE environtal variable is set. The name in this | |
237 | section is ignored. If more than one line is provided, only the last one | |
238 | is taken. | |
239 | ||
34699696 SG |
240 | 3. Make sure you have the require Python pre-requisites |
241 | ||
827e37b5 SG |
242 | Buildman uses multiprocessing, Queue, shutil, StringIO, ConfigParser and |
243 | urllib2. These should normally be available, but if you get an error like | |
244 | this then you will need to obtain those modules: | |
34699696 SG |
245 | |
246 | ImportError: No module named multiprocessing | |
247 | ||
248 | ||
249 | 4. Check the available toolchains | |
fc3fe1c2 SG |
250 | |
251 | Run this check to make sure that you have a toolchain for every architecture. | |
252 | ||
253 | $ ./tools/buildman/buildman --list-tool-chains | |
254 | Scanning for tool chains | |
17bce66c SG |
255 | - scanning prefix '/opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-' |
256 | Tool chain test: OK, arch='x86', priority 1 | |
257 | - scanning prefix '/opt/arm-eabi-4.6/bin/arm-eabi-' | |
258 | Tool chain test: OK, arch='arm', priority 1 | |
259 | - scanning path '/toolchains/gcc-4.9.0-nolibc/i386-linux' | |
260 | - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/.' | |
261 | - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin' | |
262 | - found '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc' | |
263 | - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/usr/bin' | |
264 | Tool chain test: OK, arch='i386', priority 4 | |
265 | - scanning path '/toolchains/gcc-4.9.0-nolibc/aarch64-linux' | |
266 | - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/.' | |
267 | - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin' | |
268 | - found '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc' | |
269 | - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/usr/bin' | |
270 | Tool chain test: OK, arch='aarch64', priority 4 | |
271 | - scanning path '/toolchains/gcc-4.9.0-nolibc/microblaze-linux' | |
272 | - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/.' | |
273 | - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin' | |
274 | - found '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc' | |
275 | - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/usr/bin' | |
276 | Tool chain test: OK, arch='microblaze', priority 4 | |
277 | - scanning path '/toolchains/gcc-4.9.0-nolibc/mips64-linux' | |
278 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/.' | |
279 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin' | |
280 | - found '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc' | |
281 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/usr/bin' | |
282 | Tool chain test: OK, arch='mips64', priority 4 | |
283 | - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc64-linux' | |
284 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/.' | |
285 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin' | |
286 | - found '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc' | |
287 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/usr/bin' | |
288 | Tool chain test: OK, arch='sparc64', priority 4 | |
289 | - scanning path '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi' | |
290 | - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/.' | |
291 | - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin' | |
292 | - found '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc' | |
293 | - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/usr/bin' | |
294 | Tool chain test: OK, arch='arm', priority 3 | |
295 | Toolchain '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc' at priority 3 will be ignored because another toolchain for arch 'arm' has priority 1 | |
296 | - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc-linux' | |
297 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/.' | |
298 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin' | |
299 | - found '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc' | |
300 | - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/usr/bin' | |
301 | Tool chain test: OK, arch='sparc', priority 4 | |
302 | - scanning path '/toolchains/gcc-4.9.0-nolibc/mips-linux' | |
303 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/.' | |
304 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin' | |
305 | - found '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc' | |
306 | - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/usr/bin' | |
307 | Tool chain test: OK, arch='mips', priority 4 | |
308 | - scanning path '/toolchains/gcc-4.9.0-nolibc/x86_64-linux' | |
309 | - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/.' | |
310 | - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin' | |
311 | - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc' | |
312 | - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' | |
313 | - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/usr/bin' | |
314 | Tool chain test: OK, arch='x86_64', priority 4 | |
315 | Tool chain test: OK, arch='x86_64', priority 4 | |
316 | Toolchain '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4 | |
317 | - scanning path '/toolchains/gcc-4.9.0-nolibc/m68k-linux' | |
318 | - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/.' | |
319 | - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin' | |
320 | - found '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc' | |
321 | - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/usr/bin' | |
322 | Tool chain test: OK, arch='m68k', priority 4 | |
323 | - scanning path '/toolchains/gcc-4.9.0-nolibc/powerpc-linux' | |
324 | - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/.' | |
325 | - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin' | |
326 | - found '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc' | |
327 | - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/usr/bin' | |
328 | Tool chain test: OK, arch='powerpc', priority 4 | |
329 | - scanning path '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux' | |
330 | - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/.' | |
331 | - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin' | |
332 | - found '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc' | |
333 | - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/usr/bin' | |
334 | Tool chain test: OK, arch='bfin', priority 6 | |
335 | - scanning path '/toolchains/gcc-4.6.3-nolibc/sparc-linux' | |
336 | - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/.' | |
337 | - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin' | |
338 | - found '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' | |
339 | - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/usr/bin' | |
340 | Tool chain test: OK, arch='sparc', priority 4 | |
341 | Toolchain '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'sparc' has priority 4 | |
342 | - scanning path '/toolchains/gcc-4.6.3-nolibc/mips-linux' | |
343 | - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/.' | |
344 | - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin' | |
345 | - found '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' | |
346 | - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/usr/bin' | |
347 | Tool chain test: OK, arch='mips', priority 4 | |
348 | Toolchain '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'mips' has priority 4 | |
349 | - scanning path '/toolchains/gcc-4.6.3-nolibc/m68k-linux' | |
350 | - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/.' | |
351 | - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin' | |
352 | - found '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' | |
353 | - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/usr/bin' | |
354 | Tool chain test: OK, arch='m68k', priority 4 | |
355 | Toolchain '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'm68k' has priority 4 | |
356 | - scanning path '/toolchains/gcc-4.6.3-nolibc/powerpc-linux' | |
357 | - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/.' | |
358 | - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin' | |
359 | - found '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc' | |
360 | - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/usr/bin' | |
361 | Tool chain test: OK, arch='powerpc', priority 4 | |
362 | Tool chain test: OK, arch='or32', priority 4 | |
fc3fe1c2 SG |
363 | - scanning path '/' |
364 | - looking in '/.' | |
365 | - looking in '/bin' | |
366 | - looking in '/usr/bin' | |
17bce66c | 367 | - found '/usr/bin/i586-mingw32msvc-gcc' |
fc3fe1c2 | 368 | - found '/usr/bin/c89-gcc' |
fc3fe1c2 | 369 | - found '/usr/bin/x86_64-linux-gnu-gcc' |
17bce66c SG |
370 | - found '/usr/bin/gcc' |
371 | - found '/usr/bin/c99-gcc' | |
372 | - found '/usr/bin/arm-linux-gnueabi-gcc' | |
373 | - found '/usr/bin/aarch64-linux-gnu-gcc' | |
374 | - found '/usr/bin/winegcc' | |
375 | - found '/usr/bin/arm-linux-gnueabihf-gcc' | |
376 | Tool chain test: OK, arch='i586', priority 11 | |
377 | Tool chain test: OK, arch='c89', priority 11 | |
378 | Tool chain test: OK, arch='x86_64', priority 4 | |
379 | Toolchain '/usr/bin/x86_64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4 | |
380 | Tool chain test: OK, arch='sandbox', priority 11 | |
381 | Tool chain test: OK, arch='c99', priority 11 | |
382 | Tool chain test: OK, arch='arm', priority 4 | |
383 | Toolchain '/usr/bin/arm-linux-gnueabi-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1 | |
384 | Tool chain test: OK, arch='aarch64', priority 4 | |
385 | Toolchain '/usr/bin/aarch64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'aarch64' has priority 4 | |
386 | Tool chain test: OK, arch='sandbox', priority 11 | |
387 | Toolchain '/usr/bin/winegcc' at priority 11 will be ignored because another toolchain for arch 'sandbox' has priority 11 | |
388 | Tool chain test: OK, arch='arm', priority 4 | |
389 | Toolchain '/usr/bin/arm-linux-gnueabihf-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1 | |
390 | List of available toolchains (34): | |
391 | aarch64 : /toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc | |
392 | alpha : /toolchains/gcc-4.9.0-nolibc/alpha-linux/bin/alpha-linux-gcc | |
393 | am33_2.0 : /toolchains/gcc-4.9.0-nolibc/am33_2.0-linux/bin/am33_2.0-linux-gcc | |
394 | arm : /opt/arm-eabi-4.6/bin/arm-eabi-gcc | |
17bce66c | 395 | bfin : /toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc |
fc3fe1c2 SG |
396 | c89 : /usr/bin/c89-gcc |
397 | c99 : /usr/bin/c99-gcc | |
17bce66c SG |
398 | frv : /toolchains/gcc-4.9.0-nolibc/frv-linux/bin/frv-linux-gcc |
399 | h8300 : /toolchains/gcc-4.9.0-nolibc/h8300-elf/bin/h8300-elf-gcc | |
400 | hppa : /toolchains/gcc-4.9.0-nolibc/hppa-linux/bin/hppa-linux-gcc | |
401 | hppa64 : /toolchains/gcc-4.9.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc | |
402 | i386 : /toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc | |
403 | i586 : /usr/bin/i586-mingw32msvc-gcc | |
404 | ia64 : /toolchains/gcc-4.9.0-nolibc/ia64-linux/bin/ia64-linux-gcc | |
405 | m32r : /toolchains/gcc-4.9.0-nolibc/m32r-linux/bin/m32r-linux-gcc | |
406 | m68k : /toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc | |
407 | microblaze: /toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc | |
408 | mips : /toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc | |
409 | mips64 : /toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc | |
410 | or32 : /toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc | |
411 | powerpc : /toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc | |
412 | powerpc64 : /toolchains/gcc-4.9.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc | |
413 | ppc64le : /toolchains/gcc-4.9.0-nolibc/ppc64le-linux/bin/ppc64le-linux-gcc | |
414 | s390x : /toolchains/gcc-4.9.0-nolibc/s390x-linux/bin/s390x-linux-gcc | |
fc3fe1c2 | 415 | sandbox : /usr/bin/gcc |
17bce66c SG |
416 | sh4 : /toolchains/gcc-4.6.3-nolibc/sh4-linux/bin/sh4-linux-gcc |
417 | sparc : /toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc | |
418 | sparc64 : /toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc | |
419 | tilegx : /toolchains/gcc-4.6.2-nolibc/tilegx-linux/bin/tilegx-linux-gcc | |
420 | x86 : /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-gcc | |
421 | x86_64 : /toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc | |
fc3fe1c2 SG |
422 | |
423 | ||
424 | You can see that everything is covered, even some strange ones that won't | |
425 | be used (c88 and c99). This is a feature. | |
426 | ||
427 | ||
827e37b5 SG |
428 | 5. Install new toolchains if needed |
429 | ||
430 | You can download toolchains and update the [toolchain] section of the | |
431 | settings file to find them. | |
432 | ||
433 | To make this easier, buildman can automatically download and install | |
434 | toolchains from kernel.org. First list the available architectures: | |
435 | ||
9f244b27 | 436 | $ ./tools/buildman/buildman --fetch-arch list |
827e37b5 SG |
437 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ |
438 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/ | |
439 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/ | |
440 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.2.4/ | |
daab59ac | 441 | Available architectures: alpha am33_2.0 arm bfin cris crisv32 frv h8300 |
827e37b5 SG |
442 | hppa hppa64 i386 ia64 m32r m68k mips mips64 or32 powerpc powerpc64 s390x sh4 |
443 | sparc sparc64 tilegx x86_64 xtensa | |
444 | ||
445 | Then pick one and download it: | |
446 | ||
9f244b27 | 447 | $ ./tools/buildman/buildman --fetch-arch or32 |
827e37b5 SG |
448 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ |
449 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/ | |
450 | Checking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/ | |
451 | Downloading: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1//x86_64-gcc-4.5.1-nolibc_or32-linux.tar.xz | |
452 | Unpacking to: /home/sjg/.buildman-toolchains | |
453 | Testing | |
454 | - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/.' | |
455 | - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin' | |
456 | - found '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc' | |
457 | Tool chain test: OK | |
458 | ||
8951523c TC |
459 | Or download them all from kernel.org and move them to /toolchains directory, |
460 | ||
8ea42101 | 461 | $ ./tools/buildman/buildman --fetch-arch all |
8951523c TC |
462 | $ sudo mkdir -p /toolchains |
463 | $ sudo mv ~/.buildman-toolchains/*/* /toolchains/ | |
464 | ||
465 | For those not available from kernel.org, download from the following links. | |
466 | ||
467 | arc: https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/ | |
a55bed12 | 468 | download/arc-2016.09-release/arc_gnu_2016.09_prebuilt_uclibc_le_archs_linux_install.tar.gz |
8951523c TC |
469 | blackfin: http://sourceforge.net/projects/adi-toolchain/files/ |
470 | blackfin-toolchain-elf-gcc-4.5-2014R1_45-RC2.x86_64.tar.bz2 | |
471 | nds32: http://osdk.andestech.com/packages/ | |
472 | nds32le-linux-glibc-v1.tgz | |
473 | nios2: http://sourcery.mentor.com/public/gnu_toolchain/nios2-linux-gnu/ | |
474 | sourceryg++-2015.11-27-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2 | |
475 | sh: http://sourcery.mentor.com/public/gnu_toolchain/sh-linux-gnu/ | |
476 | renesas-4.4-200-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2 | |
477 | ||
8ea42101 SG |
478 | Note openrisc kernel.org toolchain is out of date. Download the latest one from |
479 | http://opencores.org/or1k/OpenRISC_GNU_tool_chain#Prebuilt_versions - eg: | |
e8aebc47 BM |
480 | ftp://ocuser:[email protected]/toolchain/gcc-or1k-elf-4.8.1-x86.tar.bz2. |
481 | ||
827e37b5 SG |
482 | Buildman should now be set up to use your new toolchain. |
483 | ||
484 | At the time of writing, U-Boot has these architectures: | |
485 | ||
daab59ac | 486 | arc, arm, blackfin, m68k, microblaze, mips, nds32, nios2, openrisc |
827e37b5 SG |
487 | powerpc, sandbox, sh, sparc, x86 |
488 | ||
1246231c | 489 | Of these, only arc and nds32 are not available at kernel.org.. |
827e37b5 SG |
490 | |
491 | ||
fc3fe1c2 SG |
492 | How to run it |
493 | ============= | |
494 | ||
495 | First do a dry run using the -n flag: (replace <branch> with a real, local | |
496 | branch with a valid upstream) | |
497 | ||
498 | $ ./tools/buildman/buildman -b <branch> -n | |
499 | ||
500 | If it can't detect the upstream branch, try checking out the branch, and | |
2a9e2c6a SG |
501 | doing something like 'git branch --set-upstream-to upstream/master' |
502 | or something similar. Buildman will try to guess a suitable upstream branch | |
503 | if it can't find one (you will see a message like" Guessing upstream as ...). | |
ea09fb5b SG |
504 | You can also use the -c option to manually specify the number of commits to |
505 | build. | |
fc3fe1c2 | 506 | |
cec83c3e | 507 | As an example: |
fc3fe1c2 SG |
508 | |
509 | Dry run, so not doing much. But I would do this: | |
510 | ||
511 | Building 18 commits for 1059 boards (4 threads, 1 job per thread) | |
512 | Build directory: ../lcd9b | |
513 | 5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm | |
514 | c18f1b4 tegra: Use const for pinmux_config_pingroup/table() | |
515 | 2f043ae tegra: Add display support to funcmux | |
516 | e349900 tegra: fdt: Add pwm binding and node | |
517 | 424a5f0 tegra: fdt: Add LCD definitions for Tegra | |
518 | 0636ccf tegra: Add support for PWM | |
519 | a994fe7 tegra: Add SOC support for display/lcd | |
520 | fcd7350 tegra: Add LCD driver | |
521 | 4d46e9d tegra: Add LCD support to Nvidia boards | |
522 | 991bd48 arm: Add control over cachability of memory regions | |
523 | 54e8019 lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment | |
524 | d92aff7 lcd: Add support for flushing LCD fb from dcache after update | |
525 | dbd0677 tegra: Align LCD frame buffer to section boundary | |
526 | 0cff9b8 tegra: Support control of cache settings for LCD | |
527 | 9c56900 tegra: fdt: Add LCD definitions for Seaboard | |
528 | 5cc29db lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console | |
529 | cac5a23 tegra: Enable display/lcd support on Seaboard | |
530 | 49ff541 wip | |
531 | ||
532 | Total boards to build for each commit: 1059 | |
533 | ||
534 | This shows that it will build all 1059 boards, using 4 threads (because | |
535 | we have a 4-core CPU). Each thread will run with -j1, meaning that each | |
536 | make job will use a single CPU. The list of commits to be built helps you | |
537 | confirm that things look about right. Notice that buildman has chosen a | |
538 | 'base' directory for you, immediately above your source tree. | |
539 | ||
540 | Buildman works entirely inside the base directory, here ../lcd9b, | |
541 | creating a working directory for each thread, and creating output | |
542 | directories for each commit and board. | |
543 | ||
544 | ||
545 | Suggested Workflow | |
546 | ================== | |
547 | ||
548 | To run the build for real, take off the -n: | |
549 | ||
550 | $ ./tools/buildman/buildman -b <branch> | |
551 | ||
552 | Buildman will set up some working directories, and get started. After a | |
553 | minute or so it will settle down to a steady pace, with a display like this: | |
554 | ||
555 | Building 18 commits for 1059 boards (4 threads, 1 job per thread) | |
ea09fb5b | 556 | 528 36 124 /19062 -18374 1:13:30 : SIMPC8313_SP |
fc3fe1c2 SG |
557 | |
558 | This means that it is building 19062 board/commit combinations. So far it | |
cec83c3e | 559 | has managed to successfully build 528. Another 36 have built with warnings, |
ea09fb5b SG |
560 | and 124 more didn't build at all. It has 18374 builds left to complete. |
561 | Buildman expects to complete the process in around an hour and a quarter. | |
562 | Use this time to buy a faster computer. | |
fc3fe1c2 SG |
563 | |
564 | ||
565 | To find out how the build went, ask for a summary with -s. You can do this | |
3e1ded1f | 566 | either before the build completes (presumably in another terminal) or |
fc3fe1c2 SG |
567 | afterwards. Let's work through an example of how this is used: |
568 | ||
569 | $ ./tools/buildman/buildman -b lcd9b -s | |
570 | ... | |
571 | 01: Merge branch 'master' of git://git.denx.de/u-boot-arm | |
572 | powerpc: + galaxy5200_LOWBOOT | |
573 | 02: tegra: Use const for pinmux_config_pingroup/table() | |
574 | 03: tegra: Add display support to funcmux | |
575 | 04: tegra: fdt: Add pwm binding and node | |
576 | 05: tegra: fdt: Add LCD definitions for Tegra | |
577 | 06: tegra: Add support for PWM | |
578 | 07: tegra: Add SOC support for display/lcd | |
579 | 08: tegra: Add LCD driver | |
580 | 09: tegra: Add LCD support to Nvidia boards | |
581 | 10: arm: Add control over cachability of memory regions | |
582 | 11: lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment | |
583 | 12: lcd: Add support for flushing LCD fb from dcache after update | |
584 | arm: + lubbock | |
585 | 13: tegra: Align LCD frame buffer to section boundary | |
586 | 14: tegra: Support control of cache settings for LCD | |
587 | 15: tegra: fdt: Add LCD definitions for Seaboard | |
588 | 16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console | |
589 | 17: tegra: Enable display/lcd support on Seaboard | |
590 | 18: wip | |
591 | ||
592 | This shows which commits have succeeded and which have failed. In this case | |
593 | the build is still in progress so many boards are not built yet (use -u to | |
ea09fb5b | 594 | see which ones). But already we can see a few failures. The galaxy5200_LOWBOOT |
fc3fe1c2 SG |
595 | never builds correctly. This could be a problem with our toolchain, or it |
596 | could be a bug in the upstream. The good news is that we probably don't need | |
8ea42101 SG |
597 | to blame our commits. The bad news is that our commits are not tested on that |
598 | board. | |
fc3fe1c2 | 599 | |
ea09fb5b SG |
600 | Commit 12 broke lubbock. That's what the '+ lubbock', in red, means. The |
601 | failure is never fixed by a later commit, or you would see lubbock again, in | |
602 | green, without the +. | |
fc3fe1c2 SG |
603 | |
604 | To see the actual error: | |
605 | ||
ea09fb5b | 606 | $ ./tools/buildman/buildman -b <branch> -se |
fc3fe1c2 SG |
607 | ... |
608 | 12: lcd: Add support for flushing LCD fb from dcache after update | |
609 | arm: + lubbock | |
610 | +common/libcommon.o: In function `lcd_sync': | |
ea09fb5b | 611 | +common/lcd.c:120: undefined reference to `flush_dcache_range' |
fc3fe1c2 | 612 | +arm-none-linux-gnueabi-ld: BFD (Sourcery G++ Lite 2010q1-202) 2.19.51.20090709 assertion fail /scratch/julian/2010q1-release-linux-lite/obj/binutils-src-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:12572 |
ea09fb5b | 613 | +make: *** [build/u-boot] Error 139 |
fc3fe1c2 SG |
614 | 13: tegra: Align LCD frame buffer to section boundary |
615 | 14: tegra: Support control of cache settings for LCD | |
616 | 15: tegra: fdt: Add LCD definitions for Seaboard | |
617 | 16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console | |
ea09fb5b SG |
618 | -common/lcd.c:120: undefined reference to `flush_dcache_range' |
619 | +common/lcd.c:125: undefined reference to `flush_dcache_range' | |
fc3fe1c2 SG |
620 | 17: tegra: Enable display/lcd support on Seaboard |
621 | 18: wip | |
622 | ||
623 | So the problem is in lcd.c, due to missing cache operations. This information | |
624 | should be enough to work out what that commit is doing to break these | |
625 | boards. (In this case pxa did not have cache operations defined). | |
626 | ||
ea09fb5b SG |
627 | Note that if there were other boards with errors, the above command would |
628 | show their errors also. Each line is shown only once. So if lubbock and snow | |
629 | produce the same error, we just see: | |
630 | ||
631 | 12: lcd: Add support for flushing LCD fb from dcache after update | |
632 | arm: + lubbock snow | |
633 | +common/libcommon.o: In function `lcd_sync': | |
634 | +common/lcd.c:120: undefined reference to `flush_dcache_range' | |
635 | +arm-none-linux-gnueabi-ld: BFD (Sourcery G++ Lite 2010q1-202) 2.19.51.20090709 assertion fail /scratch/julian/2010q1-release-linux-lite/obj/binutils-src-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:12572 | |
636 | +make: *** [build/u-boot] Error 139 | |
637 | ||
638 | But if you did want to see just the errors for lubbock, use: | |
639 | ||
640 | $ ./tools/buildman/buildman -b <branch> -se lubbock | |
641 | ||
8ea42101 | 642 | If you see error lines marked with '-', that means that the errors were fixed |
fc3fe1c2 SG |
643 | by that commit. Sometimes commits can be in the wrong order, so that a |
644 | breakage is introduced for a few commits and fixed by later commits. This | |
645 | shows up clearly with buildman. You can then reorder the commits and try | |
646 | again. | |
647 | ||
8ea42101 | 648 | At commit 16, the error moves: you can see that the old error at line 120 |
fc3fe1c2 | 649 | is fixed, but there is a new one at line 126. This is probably only because |
3e1ded1f | 650 | we added some code and moved the broken line further down the file. |
fc3fe1c2 | 651 | |
ea09fb5b SG |
652 | As mentioned, if many boards have the same error, then -e will display the |
653 | error only once. This makes the output as concise as possible. To see which | |
654 | boards have each error, use -l. So it is safe to omit the board name - you | |
655 | will not get lots of repeated output for every board. | |
fc3fe1c2 | 656 | |
e30965db | 657 | Buildman tries to distinguish warnings from errors, and shows warning lines |
ea09fb5b SG |
658 | separately with a 'w' prefix. Warnings introduced show as yellow. Warnings |
659 | fixed show as cyan. | |
e30965db | 660 | |
fc3fe1c2 SG |
661 | The full build output in this case is available in: |
662 | ||
663 | ../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/ | |
664 | ||
665 | done: Indicates the build was done, and holds the return code from make. | |
666 | This is 0 for a good build, typically 2 for a failure. | |
667 | ||
668 | err: Output from stderr, if any. Errors and warnings appear here. | |
669 | ||
670 | log: Output from stdout. Normally there isn't any since buildman runs | |
c81d0d21 SG |
671 | in silent mode. Use -V to force a verbose build (this passes V=1 |
672 | to 'make') | |
fc3fe1c2 SG |
673 | |
674 | toolchain: Shows information about the toolchain used for the build. | |
675 | ||
676 | sizes: Shows image size information. | |
677 | ||
8ea42101 SG |
678 | It is possible to get the build binary output there also. Use the -k option |
679 | for this. In that case you will also see some output files, like: | |
fc3fe1c2 SG |
680 | |
681 | System.map toolchain u-boot u-boot.bin u-boot.map autoconf.mk | |
682 | (also SPL versions u-boot-spl and u-boot-spl.bin if available) | |
683 | ||
684 | ||
685 | Checking Image Sizes | |
686 | ==================== | |
687 | ||
688 | A key requirement for U-Boot is that you keep code/data size to a minimum. | |
689 | Where a new feature increases this noticeably it should normally be put | |
8ea42101 | 690 | behind a CONFIG flag so that boards can leave it disabled and keep the image |
fc3fe1c2 SG |
691 | size more or less the same with each new release. |
692 | ||
693 | To check the impact of your commits on image size, use -S. For example: | |
694 | ||
695 | $ ./tools/buildman/buildman -b us-x86 -sS | |
696 | Summary of 10 commits for 1066 boards (4 threads, 1 job per thread) | |
697 | 01: MAKEALL: add support for per architecture toolchains | |
698 | 02: x86: Add function to get top of usable ram | |
699 | x86: (for 1/3 boards) text -272.0 rodata +41.0 | |
700 | 03: x86: Add basic cache operations | |
701 | 04: x86: Permit bootstage and timer data to be used prior to relocation | |
702 | x86: (for 1/3 boards) data +16.0 | |
703 | 05: x86: Add an __end symbol to signal the end of the U-Boot binary | |
704 | x86: (for 1/3 boards) text +76.0 | |
705 | 06: x86: Rearrange the output input to remove BSS | |
706 | x86: (for 1/3 boards) bss -2140.0 | |
707 | 07: x86: Support relocation of FDT on start-up | |
708 | x86: + coreboot-x86 | |
709 | 08: x86: Add error checking to x86 relocation code | |
710 | 09: x86: Adjust link device tree include file | |
711 | 10: x86: Enable CONFIG_OF_CONTROL on coreboot | |
712 | ||
713 | ||
714 | You can see that image size only changed on x86, which is good because this | |
715 | series is not supposed to change any other board. From commit 7 onwards the | |
716 | build fails so we don't get code size numbers. The numbers are fractional | |
717 | because they are an average of all boards for that architecture. The | |
718 | intention is to allow you to quickly find image size problems introduced by | |
719 | your commits. | |
720 | ||
721 | Note that the 'text' region and 'rodata' are split out. You should add the | |
722 | two together to get the total read-only size (reported as the first column | |
723 | in the output from binutil's 'size' utility). | |
724 | ||
725 | A useful option is --step which lets you skip some commits. For example | |
726 | --step 2 will show the image sizes for only every 2nd commit (so it will | |
727 | compare the image sizes of the 1st, 3rd, 5th... commits). You can also use | |
728 | --step 0 which will compare only the first and last commits. This is useful | |
8ea42101 SG |
729 | for an overview of how your entire series affects code size. It will build |
730 | only the upstream commit and your final branch commit. | |
fc3fe1c2 SG |
731 | |
732 | You can also use -d to see a detailed size breakdown for each board. This | |
733 | list is sorted in order from largest growth to largest reduction. | |
734 | ||
8ea42101 | 735 | It is even possible to go a little further with the -B option (--bloat). This |
cec83c3e | 736 | shows where U-Boot has bloated, breaking the size change down to the function |
fc3fe1c2 SG |
737 | level. Example output is below: |
738 | ||
739 | $ ./tools/buildman/buildman -b us-mem4 -sSdB | |
740 | ... | |
741 | 19: Roll crc32 into hash infrastructure | |
742 | arm: (for 10/10 boards) all -143.4 bss +1.2 data -4.8 rodata -48.2 text -91.6 | |
743 | paz00 : all +23 bss -4 rodata -29 text +56 | |
744 | u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64) | |
745 | function old new delta | |
746 | hash_command 80 160 +80 | |
747 | crc32_wd_buf - 56 +56 | |
748 | ext4fs_read_file 540 568 +28 | |
749 | insert_var_value_sub 688 692 +4 | |
750 | run_list_real 1996 1992 -4 | |
751 | do_mem_crc 168 68 -100 | |
752 | trimslice : all -9 bss +16 rodata -29 text +4 | |
753 | u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) | |
754 | function old new delta | |
755 | hash_command 80 160 +80 | |
756 | crc32_wd_buf - 56 +56 | |
757 | ext4fs_iterate_dir 672 668 -4 | |
758 | ext4fs_read_file 568 548 -20 | |
759 | do_mem_crc 168 68 -100 | |
760 | whistler : all -9 bss +16 rodata -29 text +4 | |
761 | u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) | |
762 | function old new delta | |
763 | hash_command 80 160 +80 | |
764 | crc32_wd_buf - 56 +56 | |
765 | ext4fs_iterate_dir 672 668 -4 | |
766 | ext4fs_read_file 568 548 -20 | |
767 | do_mem_crc 168 68 -100 | |
768 | seaboard : all -9 bss -28 rodata -29 text +48 | |
769 | u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56) | |
770 | function old new delta | |
771 | hash_command 80 160 +80 | |
772 | crc32_wd_buf - 56 +56 | |
773 | ext4fs_read_file 548 568 +20 | |
774 | run_list_real 1996 2000 +4 | |
775 | do_nandboot 760 756 -4 | |
776 | do_mem_crc 168 68 -100 | |
e57c6e5b | 777 | colibri_t20 : all -9 rodata -29 text +20 |
fc3fe1c2 SG |
778 | u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28) |
779 | function old new delta | |
780 | hash_command 80 160 +80 | |
781 | crc32_wd_buf - 56 +56 | |
782 | read_abs_bbt 204 208 +4 | |
783 | do_nandboot 760 756 -4 | |
784 | ext4fs_read_file 576 568 -8 | |
785 | do_mem_crc 168 68 -100 | |
786 | ventana : all -37 bss -12 rodata -29 text +4 | |
787 | u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) | |
788 | function old new delta | |
789 | hash_command 80 160 +80 | |
790 | crc32_wd_buf - 56 +56 | |
791 | ext4fs_iterate_dir 672 668 -4 | |
792 | ext4fs_read_file 568 548 -20 | |
793 | do_mem_crc 168 68 -100 | |
794 | harmony : all -37 bss -16 rodata -29 text +8 | |
795 | u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16) | |
796 | function old new delta | |
797 | hash_command 80 160 +80 | |
798 | crc32_wd_buf - 56 +56 | |
799 | nand_write_oob_syndrome 428 432 +4 | |
800 | ext4fs_iterate_dir 672 668 -4 | |
801 | ext4fs_read_file 568 548 -20 | |
802 | do_mem_crc 168 68 -100 | |
803 | medcom-wide : all -417 bss +28 data -16 rodata -93 text -336 | |
804 | u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288) | |
805 | function old new delta | |
806 | crc32_wd_buf - 56 +56 | |
807 | do_fat_read_at 2872 2904 +32 | |
808 | hash_algo 16 - -16 | |
809 | do_mem_crc 168 68 -100 | |
810 | hash_command 420 160 -260 | |
811 | tec : all -449 bss -4 data -16 rodata -93 text -336 | |
812 | u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288) | |
813 | function old new delta | |
814 | crc32_wd_buf - 56 +56 | |
815 | do_fat_read_at 2872 2904 +32 | |
816 | hash_algo 16 - -16 | |
817 | do_mem_crc 168 68 -100 | |
818 | hash_command 420 160 -260 | |
819 | plutux : all -481 bss +16 data -16 rodata -93 text -388 | |
820 | u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340) | |
821 | function old new delta | |
822 | crc32_wd_buf - 56 +56 | |
823 | do_load_serial_bin 1688 1700 +12 | |
824 | hash_algo 16 - -16 | |
825 | do_fat_read_at 2904 2872 -32 | |
826 | do_mem_crc 168 68 -100 | |
827 | hash_command 420 160 -260 | |
828 | powerpc: (for 5/5 boards) all +37.4 data -3.2 rodata -41.8 text +82.4 | |
829 | MPC8610HPCD : all +55 rodata -29 text +84 | |
830 | u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) | |
831 | function old new delta | |
832 | hash_command - 176 +176 | |
833 | do_mem_crc 184 88 -96 | |
834 | MPC8641HPCN : all +55 rodata -29 text +84 | |
835 | u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) | |
836 | function old new delta | |
837 | hash_command - 176 +176 | |
838 | do_mem_crc 184 88 -96 | |
839 | MPC8641HPCN_36BIT: all +55 rodata -29 text +84 | |
840 | u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) | |
841 | function old new delta | |
842 | hash_command - 176 +176 | |
843 | do_mem_crc 184 88 -96 | |
844 | sbc8641d : all +55 rodata -29 text +84 | |
845 | u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) | |
846 | function old new delta | |
847 | hash_command - 176 +176 | |
848 | do_mem_crc 184 88 -96 | |
849 | xpedite517x : all -33 data -16 rodata -93 text +76 | |
850 | u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64) | |
851 | function old new delta | |
852 | hash_command - 176 +176 | |
853 | hash_algo 16 - -16 | |
854 | do_mem_crc 184 88 -96 | |
855 | ... | |
856 | ||
857 | ||
8ea42101 SG |
858 | This shows that commit 19 has reduced codesize for arm slightly and increased |
859 | it for powerpc. This increase was offset in by reductions in rodata and | |
860 | data/bss. | |
fc3fe1c2 | 861 | |
3e1ded1f DB |
862 | Shown below the summary lines are the sizes for each board. Below each board |
863 | are the sizes for each function. This information starts with: | |
fc3fe1c2 SG |
864 | |
865 | add - number of functions added / removed | |
866 | grow - number of functions which grew / shrunk | |
867 | bytes - number of bytes of code added to / removed from all functions, | |
868 | plus the total byte change in brackets | |
869 | ||
870 | The change seems to be that hash_command() has increased by more than the | |
871 | do_mem_crc() function has decreased. The function sizes typically add up to | |
872 | roughly the text area size, but note that every read-only section except | |
873 | rodata is included in 'text', so the function total does not exactly | |
874 | correspond. | |
875 | ||
876 | It is common when refactoring code for the rodata to decrease as the text size | |
877 | increases, and vice versa. | |
878 | ||
879 | ||
62005342 SG |
880 | The .buildman file |
881 | ================== | |
882 | ||
883 | The .buildman file provides information about the available toolchains and | |
884 | also allows build flags to be passed to 'make'. It consists of several | |
885 | sections, with the section name in square brackets. Within each section are | |
886 | a set of (tag, value) pairs. | |
887 | ||
888 | '[toolchain]' section | |
889 | ||
890 | This lists the available toolchains. The tag here doesn't matter, but | |
891 | make sure it is unique. The value is the path to the toolchain. Buildman | |
892 | will look in that path for a file ending in 'gcc'. It will then execute | |
893 | it to check that it is a C compiler, passing only the --version flag to | |
894 | it. If the return code is 0, buildman assumes that it is a valid C | |
895 | compiler. It uses the first part of the name as the architecture and | |
896 | strips off the last part when setting the CROSS_COMPILE environment | |
897 | variable (parts are delimited with a hyphen). | |
898 | ||
899 | For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc' | |
900 | and CROSS_COMPILE will be set to powerpc-linux- when using it. | |
901 | ||
902 | '[toolchain-alias]' section | |
903 | ||
904 | This converts toolchain architecture names to U-Boot names. For example, | |
905 | if an x86 toolchains is called i386-linux-gcc it will not normally be | |
9b83bfdc SG |
906 | used for architecture 'x86'. Adding 'x86: i386 x86_64' to this section |
907 | will tell buildman that the i386 and x86_64 toolchains can be used for | |
908 | the x86 architecture. | |
62005342 SG |
909 | |
910 | '[make-flags]' section | |
911 | ||
912 | U-Boot's build system supports a few flags (such as BUILD_TAG) which | |
913 | affect the build product. These flags can be specified in the buildman | |
914 | settings file. They can also be useful when building U-Boot against other | |
915 | open source software. | |
916 | ||
917 | [make-flags] | |
918 | at91-boards=ENABLE_AT91_TEST=1 | |
919 | snapper9260=${at91-boards} BUILD_TAG=442 | |
920 | snapper9g45=${at91-boards} BUILD_TAG=443 | |
4281ad8e | 921 | |
62005342 SG |
922 | This will use 'make ENABLE_AT91_TEST=1 BUILD_TAG=442' for snapper9260 |
923 | and 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special | |
924 | variable ${target} is available to access the target name (snapper9260 | |
925 | and snapper9g20 in this case). Variables are resolved recursively. Note | |
926 | that variables can only contain the characters A-Z, a-z, 0-9, hyphen (-) | |
927 | and underscore (_). | |
4281ad8e | 928 | |
62005342 SG |
929 | It is expected that any variables added are dealt with in U-Boot's |
930 | config.mk file and documented in the README. | |
4281ad8e | 931 | |
62005342 SG |
932 | Note that you can pass ad-hoc options to the build using environment |
933 | variables, for example: | |
4281ad8e | 934 | |
62005342 | 935 | SOME_OPTION=1234 ./tools/buildman/buildman my_board |
4281ad8e SG |
936 | |
937 | ||
e5a0e5d8 SG |
938 | Quick Sanity Check |
939 | ================== | |
940 | ||
941 | If you have made changes and want to do a quick sanity check of the | |
1d8104fe SG |
942 | currently checked-out source, run buildman without the -b flag. This will |
943 | build the selected boards and display build status as it runs (i.e. -v is | |
944 | enabled automatically). Use -e to see errors/warnings as well. | |
e5a0e5d8 SG |
945 | |
946 | ||
5abab20d SG |
947 | Building Ranges |
948 | =============== | |
949 | ||
950 | You can build a range of commits by specifying a range instead of a branch | |
951 | when using the -b flag. For example: | |
952 | ||
953 | upstream/master..us-buildman | |
954 | ||
955 | will build commits in us-buildman that are not in upstream/master. | |
956 | ||
957 | ||
f79f1e0c SW |
958 | Building Faster |
959 | =============== | |
960 | ||
eb70a2c0 SG |
961 | By default, buildman doesn't execute 'make mrproper' prior to building the |
962 | first commit for each board. This reduces the amount of work 'make' does, and | |
963 | hence speeds up the build. To force use of 'make mrproper', use -the -m flag. | |
964 | This flag will slow down any buildman invocation, since it increases the amount | |
965 | of work done on any build. | |
f79f1e0c SW |
966 | |
967 | One possible application of buildman is as part of a continual edit, build, | |
968 | edit, build, ... cycle; repeatedly applying buildman to the same change or | |
969 | series of changes while making small incremental modifications to the source | |
970 | each time. This provides quick feedback regarding the correctness of recent | |
971 | modifications. In this scenario, buildman's default choice of build directory | |
972 | causes more build work to be performed than strictly necessary. | |
973 | ||
974 | By default, each buildman thread uses a single directory for all builds. When a | |
975 | thread builds multiple boards, the configuration built in this directory will | |
976 | cycle through various different configurations, one per board built by the | |
977 | thread. Variations in the configuration will force a rebuild of affected source | |
978 | files when a thread switches between boards. Ideally, such buildman-induced | |
979 | rebuilds would not happen, thus allowing the build to operate as efficiently as | |
980 | the build system and source changes allow. buildman's -P flag may be used to | |
981 | enable this; -P causes each board to be built in a separate (board-specific) | |
982 | directory, thus avoiding any buildman-induced configuration changes in any | |
983 | build directory. | |
984 | ||
985 | U-Boot's build system embeds information such as a build timestamp into the | |
986 | final binary. This information varies each time U-Boot is built. This causes | |
987 | various files to be rebuilt even if no source changes are made, which in turn | |
988 | requires that the final U-Boot binary be re-linked. This unnecessary work can | |
989 | be avoided by turning off the timestamp feature. This can be achieved by | |
990 | setting the SOURCE_DATE_EPOCH environment variable to 0. | |
991 | ||
992 | Combining all of these options together yields the command-line shown below. | |
993 | This will provide the quickest possible feedback regarding the current content | |
994 | of the source tree, thus allowing rapid tested evolution of the code. | |
995 | ||
eb70a2c0 | 996 | SOURCE_DATE_EPOCH=0 ./tools/buildman/buildman -P tegra |
f79f1e0c SW |
997 | |
998 | ||
94d2ebe5 SG |
999 | Checking configuration |
1000 | ====================== | |
1001 | ||
1002 | A common requirement when converting CONFIG options to Kconfig is to check | |
1003 | that the effective configuration has not changed due to the conversion. | |
1004 | Buildman supports this with the -K option, used after a build. This shows | |
1005 | differences in effective configuration between one commit and the next. | |
1006 | ||
1007 | For example: | |
1008 | ||
1009 | $ buildman -b kc4 -sK | |
1010 | ... | |
1011 | 43: Convert CONFIG_SPL_USBETH_SUPPORT to Kconfig | |
1012 | arm: | |
1013 | + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1 | |
1014 | + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 | |
1015 | + all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1 | |
1016 | am335x_evm_usbspl : | |
1017 | + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1 | |
1018 | + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 | |
1019 | + all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1 | |
1020 | 44: Convert CONFIG_SPL_USB_HOST_SUPPORT to Kconfig | |
1021 | ... | |
1022 | ||
1023 | This shows that commit 44 enabled three new options for the board | |
1024 | am335x_evm_usbspl which were not enabled in commit 43. There is also a | |
1025 | summary for 'arm' showing all the changes detected for that architecture. | |
1026 | In this case there is only one board with changes, so 'arm' output is the | |
1027 | same as 'am335x_evm_usbspl'/ | |
1028 | ||
1029 | The -K option uses the u-boot.cfg, spl/u-boot-spl.cfg and tpl/u-boot-tpl.cfg | |
1030 | files which are produced by a build. If all you want is to check the | |
1031 | configuration you can in fact avoid doing a full build, using -D. This tells | |
1032 | buildman to configuration U-Boot and create the .cfg files, but not actually | |
1033 | build the source. This is 5-10 times faster than doing a full build. | |
1034 | ||
b464f8e7 SG |
1035 | By default buildman considers the follow two configuration methods |
1036 | equivalent: | |
1037 | ||
1038 | #define CONFIG_SOME_OPTION | |
1039 | ||
1040 | CONFIG_SOME_OPTION=y | |
1041 | ||
1042 | The former would appear in a header filer and the latter in a defconfig | |
1043 | file. The achieve this, buildman considers 'y' to be '1' in configuration | |
1044 | variables. This avoids lots of useless output when converting a CONFIG | |
1045 | option to Kconfig. To disable this behaviour, use --squash-config-y. | |
1046 | ||
94d2ebe5 | 1047 | |
48ae4124 AK |
1048 | Checking the environment |
1049 | ======================== | |
1050 | ||
1051 | When converting CONFIG options which manipulate the default environment, | |
1052 | a common requirement is to check that the default environment has not | |
1053 | changed due to the conversion. Buildman supports this with the -U option, | |
1054 | used after a build. This shows differences in the default environment | |
1055 | between one commit and the next. | |
1056 | ||
1057 | For example: | |
1058 | ||
1059 | $ buildman -b squash brppt1 -sU | |
1060 | boards.cfg is up to date. Nothing to do. | |
1061 | Summary of 2 commits for 3 boards (3 threads, 3 jobs per thread) | |
1062 | 01: Migrate bootlimit to Kconfig | |
1063 | 02: Squashed commit of the following: | |
1064 | c brppt1_mmc: altbootcmd=mmc dev 1; run mmcboot0; -> mmc dev 1; run mmcboot0 | |
1065 | c brppt1_spi: altbootcmd=mmc dev 1; run mmcboot0; -> mmc dev 1; run mmcboot0 | |
1066 | + brppt1_nand: altbootcmd=run usbscript | |
1067 | - brppt1_nand: altbootcmd=run usbscript | |
1068 | (no errors to report) | |
1069 | ||
1070 | This shows that commit 2 modified the value of 'altbootcmd' for 'brppt1_mmc' | |
1071 | and 'brppt1_spi', removing a trailing semicolon. 'brppt1_nand' gained an a | |
1072 | value for 'altbootcmd', but lost one for ' altbootcmd'. | |
1073 | ||
1074 | The -U option uses the u-boot.env files which are produced by a build. | |
1075 | ||
00beb248 SG |
1076 | |
1077 | Building with clang | |
1078 | =================== | |
1079 | ||
1080 | To build with clang (sandbox only), use the -O option to override the | |
1081 | toolchain. For example: | |
1082 | ||
1083 | buildman -O clang-7 --board sandbox | |
1084 | ||
1085 | ||
d829f121 SG |
1086 | Doing a simple build |
1087 | ==================== | |
1088 | ||
1089 | In some cases you just want to build a single board and get the full output, use | |
1090 | the -w option, for example: | |
1091 | ||
1092 | buildman -o /tmp/build --board sandbox -w | |
1093 | ||
88daaef1 SG |
1094 | This will write the full build into /tmp/build including object files. You must |
1095 | specify the output directory with -o when using -w. | |
d829f121 SG |
1096 | |
1097 | ||
fc3fe1c2 SG |
1098 | Other options |
1099 | ============= | |
1100 | ||
7beb43c9 | 1101 | Buildman has various other command-line options. Try --help to see them. |
fc3fe1c2 | 1102 | |
4e9162d5 SG |
1103 | To find out what toolchain prefix buildman will use for a build, use the -A |
1104 | option. | |
57cb9d52 | 1105 | |
7beb43c9 SG |
1106 | To request that compiler warnings be promoted to errors, use -E. This passes the |
1107 | -Werror flag to the compiler. Note that the build can still produce warnings | |
1108 | with -E, e.g. the migration warnings: | |
1109 | ||
1110 | ===================== WARNING ====================== | |
1111 | This board does not use CONFIG_DM_MMC. Please update | |
1112 | ... | |
1113 | ==================================================== | |
1114 | ||
2c3deb97 SG |
1115 | When doing builds, Buildman's return code will reflect the overall result: |
1116 | ||
1117 | 0 (success) No errors or warnings found | |
b1e5e6d2 SG |
1118 | 100 Errors found |
1119 | 101 Warnings found (only if no -W) | |
7beb43c9 | 1120 | |
b1e5e6d2 | 1121 | You can use -W to tell Buildman to return 0 (success) instead of 101 when |
7beb43c9 | 1122 | warnings are found. Note that it can be useful to combine -E and -W. This means |
b1e5e6d2 SG |
1123 | that all compiler warnings will produce failures (code 100) and all other |
1124 | warnings will produce success (since 101 is changed to 0). | |
7beb43c9 | 1125 | |
b1e5e6d2 | 1126 | If there are both warnings and errors, errors win, so buildman returns 100. |
2c3deb97 | 1127 | |
174592b9 | 1128 | The -y option is provided (for use with -s) to ignore the bountiful device-tree |
113a8a5f | 1129 | warnings. Similarly, -Y tells buildman to ignore the migration warnings. |
174592b9 | 1130 | |
fc3fe1c2 | 1131 | |
6eede34c SG |
1132 | How to change from MAKEALL |
1133 | ========================== | |
1134 | ||
1135 | Buildman includes most of the features of MAKEALL and is generally faster | |
1136 | and easier to use. In particular it builds entire branches: if a particular | |
1137 | commit introduces an error in a particular board, buildman can easily show | |
1138 | you this, even if a later commit fixes that error. | |
1139 | ||
1140 | The reasons to deprecate MAKEALL are: | |
1141 | - We don't want to maintain two build systems | |
1142 | - Buildman is typically faster | |
1143 | - Buildman has a lot more features | |
1144 | ||
1145 | But still, many people will be sad to lose MAKEALL. If you are used to | |
1146 | MAKEALL, here are a few pointers. | |
1147 | ||
1148 | First you need to set up your tool chains - see the 'Setting up' section | |
1149 | for details. Once you have your required toolchain(s) detected then you are | |
1150 | ready to go. | |
1151 | ||
e5a0e5d8 SG |
1152 | To build the current source tree, run buildman without a -b flag: |
1153 | ||
1154 | ./tools/buildman/buildman <list of things to build> | |
1155 | ||
1156 | This will build the current source tree for the given boards and display | |
1157 | the results and errors. | |
1158 | ||
1159 | However buildman usually works on entire branches, and for that you must | |
1160 | specify a board flag: | |
6eede34c SG |
1161 | |
1162 | ./tools/buildman/buildman -b <branch_name> <list of things to build> | |
1163 | ||
1164 | followed by (afterwards, or perhaps concurrently in another terminal): | |
1165 | ||
1166 | ./tools/buildman/buildman -b <branch_name> -s <list of things to build> | |
1167 | ||
1168 | to see the results of the build. Rather than showing you all the output, | |
1169 | buildman just shows a summary, with red indicating that a commit introduced | |
1170 | an error and green indicating that a commit fixed an error. Use the -e | |
ed966657 | 1171 | flag to see the full errors and -l to see which boards caused which errors. |
6eede34c | 1172 | |
e5a0e5d8 | 1173 | If you really want to see build results as they happen, use -v when doing a |
1d8104fe | 1174 | build (and -e to see the errors/warnings too). |
e5a0e5d8 | 1175 | |
6eede34c SG |
1176 | You don't need to stick around on that branch while buildman is running. It |
1177 | checks out its own copy of the source code, so you can change branches, | |
1178 | add commits, etc. without affecting the build in progress. | |
1179 | ||
1180 | The <list of things to build> can include board names, architectures or the | |
1181 | like. There are no flags to disambiguate since ambiguities are rare. Using | |
1182 | the examples from MAKEALL: | |
1183 | ||
1184 | Examples: | |
1185 | - build all Power Architecture boards: | |
1186 | MAKEALL -a powerpc | |
1187 | MAKEALL --arch powerpc | |
1188 | MAKEALL powerpc | |
1189 | ** buildman -b <branch> powerpc | |
1190 | - build all PowerPC boards manufactured by vendor "esd": | |
1191 | MAKEALL -a powerpc -v esd | |
1192 | ** buildman -b <branch> esd | |
1193 | - build all PowerPC boards manufactured either by "keymile" or "siemens": | |
1194 | MAKEALL -a powerpc -v keymile -v siemens | |
1195 | ** buildman -b <branch> keymile siemens | |
1196 | - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: | |
1197 | MAKEALL -c mpc83xx -v freescale 4xx | |
1198 | ** buildman -b <branch> mpc83xx freescale 4xx | |
1199 | ||
1200 | Buildman automatically tries to use all the CPUs in your machine. If you | |
1201 | are building a lot of boards it will use one thread for every CPU core | |
1202 | it detects in your machine. This is like MAKEALL's BUILD_NBUILDS option. | |
1203 | You can use the -T flag to change the number of threads. If you are only | |
1204 | building a few boards, buildman will automatically run make with the -j | |
1205 | flag to increase the number of concurrent make tasks. It isn't normally | |
1206 | that helpful to fiddle with this option, but if you use the BUILD_NCPUS | |
1207 | option in MAKEALL then -j is the equivalent in buildman. | |
1208 | ||
1209 | Buildman puts its output in ../<branch_name> by default but you can change | |
1210 | this with the -o option. Buildman normally does out-of-tree builds: use -i | |
1211 | to disable that if you really want to. But be careful that once you have | |
1212 | used -i you pollute buildman's copies of the source tree, and you will need | |
1213 | to remove the build directory (normally ../<branch_name>) to run buildman | |
1214 | in normal mode (without -i). | |
1215 | ||
1216 | Buildman doesn't keep the output result normally, but use the -k option to | |
1217 | do this. | |
1218 | ||
1219 | Please read 'Theory of Operation' a few times as it will make a lot of | |
1220 | things clearer. | |
1221 | ||
1222 | Some options you might like are: | |
1223 | ||
1224 | -B shows which functions are growing/shrinking in which commit - great | |
1225 | for finding code bloat. | |
1226 | -S shows image sizes for each commit (just an overall summary) | |
1227 | -u shows boards that you haven't built yet | |
1228 | --step 0 will build just the upstream commit and the last commit of your | |
1229 | branch. This is often a quick sanity check that your branch doesn't | |
1230 | break anything. But note this does not check bisectability! | |
1231 | ||
1232 | ||
fc3fe1c2 SG |
1233 | TODO |
1234 | ==== | |
1235 | ||
a38930e2 SG |
1236 | Many improvements have been made over the years. There is still quite a bit of |
1237 | scope for more though, e.g.: | |
1238 | ||
1239 | - easier access to log files | |
1240 | - 'hunting' for problems, perhaps by building a few boards for each arch, or | |
1241 | checking commits for changed files and building only boards which use those | |
1242 | files | |
1243 | - using the same git repo for all threads instead of cloning it. Currently | |
1244 | it uses about 500MB per thread, so on a 64-thread machine this is 32GB for | |
1245 | the build. | |
fc3fe1c2 SG |
1246 | |
1247 | ||
1248 | Credits | |
1249 | ======= | |
1250 | ||
1251 | Thanks to Grant Grundler <[email protected]> for his ideas for improving | |
1252 | the build speed by building all commits for a board instead of the other | |
1253 | way around. | |
1254 | ||
1255 | ||
fc3fe1c2 SG |
1256 | Simon Glass |
1257 | [email protected] | |
1258 | Halloween 2012 | |
1259 | Updated 12-12-12 | |
1260 | Updated 23-02-13 | |
a38930e2 | 1261 | Updated 09-04-20 |