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