Lines Matching +full:common +full:- +full:build +full:- +full:and +full:- +full:test
3 # SPDX-License-Identifier: GPL-2.0+
8 Quick-start
11 If you just want to quickly set up buildman so you can build something (for
14 cd /path/to/u-boot
16 buildman --fetch-arch arm
17 buildman -k rpi_2
19 # u-boot.bin is the output image
25 This tool handles building U-Boot to check that you have not broken it
26 with your patch series. It can build each individual commit and report
27 which boards fail on which commits, and which errors come up. It aims
28 to make full use of multi-processor machines.
32 quickly identified and the offending commit pinpointed. This can be a big
39 Buildman can be stopped and restarted, in which case it will continue
40 where it left off. This should happen cleanly and without side-effects.
44 You may need to press Ctrl-C several times to quit it. Also it will print
46 Ctrl-C handling is somewhat broken.
56 progress information (except with -v, see below). All the output (errors,
57 warnings and binaries if you ask for them) is stored in output
58 directories, which you can look at while the build is progressing, or when
61 Buildman is designed to build entire git branches, i.e. muliple commits. It
63 rebuild commits which have changed (and remove its old results for that
64 commit). It is possible to build a branch for one board, then later build it
65 for another board. If you want buildman to re-build a commit it has already
66 built (e.g. because of a toolchain update), use the -f flag.
68 Buildman produces a concise summary of which boards succeeded and failed.
71 case it is de-duped and displayed against the commit that introduced the
74 Buildman stores image size information and can report changes in image size
77 Buildman starts multiple threads, and each thread builds for one board at
79 board and builds it. Then it checks out the next commit and does an
80 incremental build. Eventually the thread reaches the last commit and stops.
82 after every commit, and your build will be very slow. This is because a
84 incremental build.
86 Buildman works in an entirely separate place from your U-Boot repository.
87 It creates a separate working directory for each thread, and puts the
88 output files in the working directory, organised by commit name and board
89 name, in a two-level hierarchy.
91 Buildman is invoked in your U-Boot directory, the one with the .git
92 directory. It clones this repository into a copy for each thread, and the
100 Buildman generally builds a branch (with the -b flag), and in this case
101 builds the upstream commit as well, for comparison. It cannot build
104 valid value, and all will be well. Otherwise buildman will perform random
105 actions. Use -n to check what the random actions might be.
107 If you just want to build the current source tree, leave off the -b flag
108 and add -e. This will display results and errors as they happen. You can
109 still look at them later using -se. Note that buildman will assume that the
110 source has changed, and will build all specified boards in this case.
113 On multi-core machines, Buildman is fast because it uses most of the
116 plan to use your machine for anything else, you can use -T to increase the
119 Buildman lets you build all boards, or a subset. Specify the subset by passing
120 command-line arguments that list the desired board name, architecture name,
136 You can also use -x to specifically exclude some boards. For example:
138 buildmand arm -x nvidia,freescale,.*ball$
140 means to build all arm boards except nvidia, freescale and anything ending
143 It is convenient to use the -n option to see what will be built based on
144 the subset given. Use -v as well to get an actual list of boards.
147 the binary output into a directory when a build is successful. Size
155 1. Get the U-Boot source. You probably already have it, but if not these
156 steps should get you started with a repo and some commits for testing.
158 $ cd /path/to/u-boot
159 $ git clone git://git.denx.de/u-boot.git .
160 $ git checkout -b my-branch origin/master
171 eldk: /opt/eldk-4.2
172 arm: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux
173 aarch64: /opt/linaro/gcc-linaro-aarch64-none-elf-4.8-2013.10_linux
175 [toolchain-alias]
184 and also in any '/usr' and '/usr/bin' subdirectories.
186 Make sure the tags (here root: rest: and eldk:) are unique.
188 The toolchain-alias section indicates that the i386 toolchain should be used
189 to build x86 commits.
193 [toolchain-prefix]
194 arm: /opt/arm-eabi-4.6/bin/arm-eabi-
198 [toolchain-prefix]
199 arm: /opt/arm-eabi-4.6/bin/arm-eabi-gcc
209 [toolchain-prefix]
210 arm: arm-none-eabi-
212 and buildman will find arm-none-eabi-gcc in /usr/bin if you have it installed.
214 [toolchain-wrapper]
223 3. Make sure you have the require Python pre-requisites
225 Buildman uses multiprocessing, Queue, shutil, StringIO, ConfigParser and
236 $ ./tools/buildman/buildman --list-tool-chains
238 - scanning prefix '/opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-'
239 Tool chain test: OK, arch='x86', priority 1
240 - scanning prefix '/opt/arm-eabi-4.6/bin/arm-eabi-'
241 Tool chain test: OK, arch='arm', priority 1
242 - scanning path '/toolchains/gcc-4.9.0-nolibc/i386-linux'
243 - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/.'
244 - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin'
245 - found '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc'
246 - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/usr/bin'
247 Tool chain test: OK, arch='i386', priority 4
248 - scanning path '/toolchains/gcc-4.9.0-nolibc/aarch64-linux'
249 - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/.'
250 - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin'
251 - found '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc'
252 - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/usr/bin'
253 Tool chain test: OK, arch='aarch64', priority 4
254 - scanning path '/toolchains/gcc-4.9.0-nolibc/microblaze-linux'
255 - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/.'
256 - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin'
257 - found '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc'
258 - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/usr/bin'
259 Tool chain test: OK, arch='microblaze', priority 4
260 - scanning path '/toolchains/gcc-4.9.0-nolibc/mips64-linux'
261 - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/.'
262 - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin'
263 - found '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc'
264 - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/usr/bin'
265 Tool chain test: OK, arch='mips64', priority 4
266 - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc64-linux'
267 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/.'
268 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin'
269 - found '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc'
270 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/usr/bin'
271 Tool chain test: OK, arch='sparc64', priority 4
272 - scanning path '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi'
273 - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/.'
274 - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin'
275 … - found '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc'
276 - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/usr/bin'
277 Tool chain test: OK, arch='arm', priority 3
278 Toolchain '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc…
279 - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc-linux'
280 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/.'
281 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin'
282 - found '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc'
283 - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/usr/bin'
284 Tool chain test: OK, arch='sparc', priority 4
285 - scanning path '/toolchains/gcc-4.9.0-nolibc/mips-linux'
286 - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/.'
287 - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin'
288 - found '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc'
289 - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/usr/bin'
290 Tool chain test: OK, arch='mips', priority 4
291 - scanning path '/toolchains/gcc-4.9.0-nolibc/x86_64-linux'
292 - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/.'
293 - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin'
294 - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc'
295 - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc'
296 - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/usr/bin'
297 Tool chain test: OK, arch='x86_64', priority 4
298 Tool chain test: OK, arch='x86_64', priority 4
299 Toolchain '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' at priority…
300 - scanning path '/toolchains/gcc-4.9.0-nolibc/m68k-linux'
301 - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/.'
302 - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin'
303 - found '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc'
304 - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/usr/bin'
305 Tool chain test: OK, arch='m68k', priority 4
306 - scanning path '/toolchains/gcc-4.9.0-nolibc/powerpc-linux'
307 - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/.'
308 - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin'
309 - found '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
310 - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/usr/bin'
311 Tool chain test: OK, arch='powerpc', priority 4
312 - scanning path '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux'
313 - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/.'
314 - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin'
315 - found '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc'
316 - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/usr/bin'
317 Tool chain test: OK, arch='bfin', priority 6
318 - scanning path '/toolchains/gcc-4.6.3-nolibc/sparc-linux'
319 - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/.'
320 - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin'
321 - found '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc'
322 - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/usr/bin'
323 Tool chain test: OK, arch='sparc', priority 4
324 Toolchain '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' at priority 4 will be igno…
325 - scanning path '/toolchains/gcc-4.6.3-nolibc/mips-linux'
326 - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/.'
327 - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin'
328 - found '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc'
329 - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/usr/bin'
330 Tool chain test: OK, arch='mips', priority 4
331 Toolchain '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' at priority 4 will be ignore…
332 - scanning path '/toolchains/gcc-4.6.3-nolibc/m68k-linux'
333 - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/.'
334 - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin'
335 - found '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc'
336 - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/usr/bin'
337 Tool chain test: OK, arch='m68k', priority 4
338 Toolchain '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' at priority 4 will be ignore…
339 - scanning path '/toolchains/gcc-4.6.3-nolibc/powerpc-linux'
340 - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/.'
341 - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin'
342 - found '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
343 - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/usr/bin'
344 Tool chain test: OK, arch='powerpc', priority 4
345 Tool chain test: OK, arch='or32', priority 4
346 - scanning path '/'
347 - looking in '/.'
348 - looking in '/bin'
349 - looking in '/usr/bin'
350 - found '/usr/bin/i586-mingw32msvc-gcc'
351 - found '/usr/bin/c89-gcc'
352 - found '/usr/bin/x86_64-linux-gnu-gcc'
353 - found '/usr/bin/gcc'
354 - found '/usr/bin/c99-gcc'
355 - found '/usr/bin/arm-linux-gnueabi-gcc'
356 - found '/usr/bin/aarch64-linux-gnu-gcc'
357 - found '/usr/bin/winegcc'
358 - found '/usr/bin/arm-linux-gnueabihf-gcc'
359 Tool chain test: OK, arch='i586', priority 11
360 Tool chain test: OK, arch='c89', priority 11
361 Tool chain test: OK, arch='x86_64', priority 4
362 Toolchain '/usr/bin/x86_64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain f…
363 Tool chain test: OK, arch='sandbox', priority 11
364 Tool chain test: OK, arch='c99', priority 11
365 Tool chain test: OK, arch='arm', priority 4
366 Toolchain '/usr/bin/arm-linux-gnueabi-gcc' at priority 4 will be ignored because another toolchain …
367 Tool chain test: OK, arch='aarch64', priority 4
368 Toolchain '/usr/bin/aarch64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain …
369 Tool chain test: OK, arch='sandbox', priority 11
371 Tool chain test: OK, arch='arm', priority 4
372 Toolchain '/usr/bin/arm-linux-gnueabihf-gcc' at priority 4 will be ignored because another toolchai…
374 aarch64 : /toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc
375 alpha : /toolchains/gcc-4.9.0-nolibc/alpha-linux/bin/alpha-linux-gcc
376 am33_2.0 : /toolchains/gcc-4.9.0-nolibc/am33_2.0-linux/bin/am33_2.0-linux-gcc
377 arm : /opt/arm-eabi-4.6/bin/arm-eabi-gcc
378 bfin : /toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc
379 c89 : /usr/bin/c89-gcc
380 c99 : /usr/bin/c99-gcc
381 frv : /toolchains/gcc-4.9.0-nolibc/frv-linux/bin/frv-linux-gcc
382 h8300 : /toolchains/gcc-4.9.0-nolibc/h8300-elf/bin/h8300-elf-gcc
383 hppa : /toolchains/gcc-4.9.0-nolibc/hppa-linux/bin/hppa-linux-gcc
384 hppa64 : /toolchains/gcc-4.9.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc
385 i386 : /toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc
386 i586 : /usr/bin/i586-mingw32msvc-gcc
387 ia64 : /toolchains/gcc-4.9.0-nolibc/ia64-linux/bin/ia64-linux-gcc
388 m32r : /toolchains/gcc-4.9.0-nolibc/m32r-linux/bin/m32r-linux-gcc
389 m68k : /toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc
390 microblaze: /toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc
391 mips : /toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc
392 mips64 : /toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc
393 or32 : /toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc
394 powerpc : /toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc
395 powerpc64 : /toolchains/gcc-4.9.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc
396 ppc64le : /toolchains/gcc-4.9.0-nolibc/ppc64le-linux/bin/ppc64le-linux-gcc
397 s390x : /toolchains/gcc-4.9.0-nolibc/s390x-linux/bin/s390x-linux-gcc
399 sh4 : /toolchains/gcc-4.6.3-nolibc/sh4-linux/bin/sh4-linux-gcc
400 sparc : /toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc
401 sparc64 : /toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc
402 tilegx : /toolchains/gcc-4.6.2-nolibc/tilegx-linux/bin/tilegx-linux-gcc
403 x86 : /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-gcc
404 x86_64 : /toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc
408 be used (c88 and c99). This is a feature.
413 You can download toolchains and update the [toolchain] section of the
416 To make this easier, buildman can automatically download and install
419 $ ./tools/buildman/buildman --fetch-arch list
428 Then pick one and download it:
430 $ ./tools/buildman/buildman --fetch-arch or32
434 …www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1//x86_64-gcc-4.5.1-nolibc_or32-linux.tar.…
435 Unpacking to: /home/sjg/.buildman-toolchains
437 - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/.'
438 - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin'
439 - found '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc'
440 Tool chain test: OK
442 Or download them all from kernel.org and move them to /toolchains directory,
444 $ ./tools/buildman/buildman --fetch-arch all
445 $ sudo mkdir -p /toolchains
446 $ sudo mv ~/.buildman-toolchains/*/* /toolchains/
450 arc: https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/
451 download/arc-2016.09-release/arc_gnu_2016.09_prebuilt_uclibc_le_archs_linux_install.tar.gz
452 blackfin: http://sourceforge.net/projects/adi-toolchain/files/
453 blackfin-toolchain-elf-gcc-4.5-2014R1_45-RC2.x86_64.tar.bz2
455 nds32le-linux-glibc-v1.tgz
456 nios2: http://sourcery.mentor.com/public/gnu_toolchain/nios2-linux-gnu/
457 sourceryg++-2015.11-27-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2
458 sh: http://sourcery.mentor.com/public/gnu_toolchain/sh-linux-gnu/
459 renesas-4.4-200-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2
462 http://opencores.org/or1k/OpenRISC_GNU_tool_chain#Prebuilt_versions - eg:
463 ftp://ocuser:ocuser@openrisc.opencores.org/toolchain/gcc-or1k-elf-4.8.1-x86.tar.bz2.
467 At the time of writing, U-Boot has these architectures:
472 Of these, only arc and nds32 are not available at kernel.org..
478 First do a dry run using the -n flag: (replace <branch> with a real, local
481 $ ./tools/buildman/buildman -b <branch> -n
483 If it can't detect the upstream branch, try checking out the branch, and
484 doing something like 'git branch --set-upstream-to upstream/master'
493 Build directory: ../lcd9b
494 5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm
497 e349900 tegra: fdt: Add pwm binding and node
513 Total boards to build for each commit: 1059
515 This shows that it will build all 1059 boards, using 4 threads (because
516 we have a 4-core CPU). Each thread will run with -j1, meaning that each
522 creating a working directory for each thread, and creating output
523 directories for each commit and board.
529 To run the build for real, take off the -n:
531 $ ./tools/buildman/buildman -b <branch>
533 Buildman will set up some working directories, and get started. After a
540 has managed to successfully build 528. Another 36 have built with warnings,
541 and 124 more didn't build at all. Buildman expects to complete the process
542 in around an hour and a quarter. Use this time to buy a faster computer.
545 To find out how the build went, ask for a summary with -s. You can do this
546 either before the build completes (presumably in another terminal) or
549 $ ./tools/buildman/buildman -b lcd9b -s
551 01: Merge branch 'master' of git://git.denx.de/u-boot-arm
555 04: tegra: fdt: Add pwm binding and node
572 This shows which commits have succeeded and which have failed. In this case
573 the build is still in progress so many boards are not built yet (use -u to
586 $ ./tools/buildman/buildman -b <branch> -se lubbock
590 +common/libcommon.o: In function `lcd_sync':
591 +/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
592 …-none-linux-gnueabi-ld: BFD (Sourcery G++ Lite 2010q1-202) 2.19.51.20090709 assertion fail /scratc…
593 +make: *** [/u-boot/lcd9b/.bm-work/00/build/u-boot] Error 139
598 -/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
599 +/u-boot/lcd9b/.bm-work/00/common/lcd.c:125: undefined reference to `flush_dcache_range'
607 If you see error lines marked with '-', that means that the errors were fixed
609 breakage is introduced for a few commits and fixed by later commits. This
610 shows up clearly with buildman. You can then reorder the commits and try
615 we added some code and moved the broken line further down the file.
617 If many boards have the same error, then -e will display the error only
619 each error, use -l. So it is safe to omit the board name - you will not get
622 Buildman tries to distinguish warnings from errors, and shows warning lines
625 The full build output in this case is available in:
627 ../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/
629 done: Indicates the build was done, and holds the return code from make.
630 This is 0 for a good build, typically 2 for a failure.
632 err: Output from stderr, if any. Errors and warnings appear here.
635 in silent mode. Use -V to force a verbose build (this passes V=1
638 toolchain: Shows information about the toolchain used for the build.
642 It is possible to get the build binary output there also. Use the -k option
645 System.map toolchain u-boot u-boot.bin u-boot.map autoconf.mk
646 (also SPL versions u-boot-spl and u-boot-spl.bin if available)
652 A key requirement for U-Boot is that you keep code/data size to a minimum.
654 behind a CONFIG flag so that boards can leave it disabled and keep the image
657 To check the impact of your commits on image size, use -S. For example:
659 $ ./tools/buildman/buildman -b us-x86 -sS
663 x86: (for 1/3 boards) text -272.0 rodata +41.0
665 04: x86: Permit bootstage and timer data to be used prior to relocation
667 05: x86: Add an __end symbol to signal the end of the U-Boot binary
670 x86: (for 1/3 boards) bss -2140.0
671 07: x86: Support relocation of FDT on start-up
672 x86: + coreboot-x86
680 build fails so we don't get code size numbers. The numbers are fractional
685 Note that the 'text' region and 'rodata' are split out. You should add the
686 two together to get the total read-only size (reported as the first column
689 A useful option is --step which lets you skip some commits. For example
690 --step 2 will show the image sizes for only every 2nd commit (so it will
692 --step 0 which will compare only the first and last commits. This is useful
693 for an overview of how your entire series affects code size. It will build
694 only the upstream commit and your final branch commit.
696 You can also use -d to see a detailed size breakdown for each board. This
699 It is even possible to go a little further with the -B option (--bloat). This
700 shows where U-Boot has bloated, breaking the size change down to the function
703 $ ./tools/buildman/buildman -b us-mem4 -sSdB
706 arm: (for 10/10 boards) all -143.4 bss +1.2 data -4.8 rodata -48.2 text -91.6
707 paz00 : all +23 bss -4 rodata -29 text +56
708 u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64)
711 crc32_wd_buf - 56 +56
714 run_list_real 1996 1992 -4
715 do_mem_crc 168 68 -100
716 trimslice : all -9 bss +16 rodata -29 text +4
717 u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
720 crc32_wd_buf - 56 +56
721 ext4fs_iterate_dir 672 668 -4
722 ext4fs_read_file 568 548 -20
723 do_mem_crc 168 68 -100
724 whistler : all -9 bss +16 rodata -29 text +4
725 u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
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 seaboard : all -9 bss -28 rodata -29 text +48
733 u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56)
736 crc32_wd_buf - 56 +56
739 do_nandboot 760 756 -4
740 do_mem_crc 168 68 -100
741 colibri_t20 : all -9 rodata -29 text +20
742 u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28)
745 crc32_wd_buf - 56 +56
747 do_nandboot 760 756 -4
748 ext4fs_read_file 576 568 -8
749 do_mem_crc 168 68 -100
750 ventana : all -37 bss -12 rodata -29 text +4
751 u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
754 crc32_wd_buf - 56 +56
755 ext4fs_iterate_dir 672 668 -4
756 ext4fs_read_file 568 548 -20
757 do_mem_crc 168 68 -100
758 harmony : all -37 bss -16 rodata -29 text +8
759 u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16)
762 crc32_wd_buf - 56 +56
764 ext4fs_iterate_dir 672 668 -4
765 ext4fs_read_file 568 548 -20
766 do_mem_crc 168 68 -100
767 medcom-wide : all -417 bss +28 data -16 rodata -93 text -336
768 u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
770 crc32_wd_buf - 56 +56
772 hash_algo 16 - -16
773 do_mem_crc 168 68 -100
774 hash_command 420 160 -260
775 tec : all -449 bss -4 data -16 rodata -93 text -336
776 u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
778 crc32_wd_buf - 56 +56
780 hash_algo 16 - -16
781 do_mem_crc 168 68 -100
782 hash_command 420 160 -260
783 plutux : all -481 bss +16 data -16 rodata -93 text -388
784 u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340)
786 crc32_wd_buf - 56 +56
788 hash_algo 16 - -16
789 do_fat_read_at 2904 2872 -32
790 do_mem_crc 168 68 -100
791 hash_command 420 160 -260
792 powerpc: (for 5/5 boards) all +37.4 data -3.2 rodata -41.8 text +82.4
793 MPC8610HPCD : all +55 rodata -29 text +84
794 u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
796 hash_command - 176 +176
797 do_mem_crc 184 88 -96
798 MPC8641HPCN : all +55 rodata -29 text +84
799 u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
801 hash_command - 176 +176
802 do_mem_crc 184 88 -96
803 MPC8641HPCN_36BIT: all +55 rodata -29 text +84
804 u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
806 hash_command - 176 +176
807 do_mem_crc 184 88 -96
808 sbc8641d : all +55 rodata -29 text +84
809 u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
811 hash_command - 176 +176
812 do_mem_crc 184 88 -96
813 xpedite517x : all -33 data -16 rodata -93 text +76
814 u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64)
816 hash_command - 176 +176
817 hash_algo 16 - -16
818 do_mem_crc 184 88 -96
822 This shows that commit 19 has reduced codesize for arm slightly and increased
823 it for powerpc. This increase was offset in by reductions in rodata and
829 add - number of functions added / removed
830 grow - number of functions which grew / shrunk
831 bytes - number of bytes of code added to / removed from all functions,
836 roughly the text area size, but note that every read-only section except
840 It is common when refactoring code for the rodata to decrease as the text size
841 increases, and vice versa.
847 The .buildman file provides information about the available toolchains and
848 also allows build flags to be passed to 'make'. It consists of several
857 it to check that it is a C compiler, passing only the --version flag to
859 compiler. It uses the first part of the name as the architecture and
863 For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc'
864 and CROSS_COMPILE will be set to powerpc-linux- when using it.
866 '[toolchain-alias]' section
868 This converts toolchain architecture names to U-Boot names. For example,
869 if an x86 toolchains is called i386-linux-gcc it will not normally be
871 will tell buildman that the i386 and x86_64 toolchains can be used for
874 '[make-flags]' section
876 U-Boot's build system supports a few flags (such as BUILD_TAG) which
877 affect the build product. These flags can be specified in the buildman
878 settings file. They can also be useful when building U-Boot against other
881 [make-flags]
882 at91-boards=ENABLE_AT91_TEST=1
883 snapper9260=${at91-boards} BUILD_TAG=442
884 snapper9g45=${at91-boards} BUILD_TAG=443
887 and 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special
889 and snapper9g20 in this case). Variables are resolved recursively. Note
890 that variables can only contain the characters A-Z, a-z, 0-9, hyphen (-)
891 and underscore (_).
893 It is expected that any variables added are dealt with in U-Boot's
894 config.mk file and documented in the README.
896 Note that you can pass ad-hoc options to the build using environment
905 If you have made changes and want to do a quick sanity check of the
906 currently checked-out source, run buildman without the -b flag. This will
907 build the selected boards and display build status as it runs (i.e. -v is
908 enabled automatically). Use -e to see errors/warnings as well.
914 You can build a range of commits by specifying a range instead of a branch
915 when using the -b flag. For example:
917 upstream/master..us-buildman
919 will build commits in us-buildman that are not in upstream/master.
927 trust the build system's incremental build capabilities, you can pass the -I
929 work 'make' does, and hence speed up the build. This flag will speed up any
930 buildman invocation, since it reduces the amount of work done on any build.
932 One possible application of buildman is as part of a continual edit, build,
933 edit, build, ... cycle; repeatedly applying buildman to the same change or
936 modifications. In this scenario, buildman's default choice of build directory
937 causes more build work to be performed than strictly necessary.
943 files when a thread switches between boards. Ideally, such buildman-induced
944 rebuilds would not happen, thus allowing the build to operate as efficiently as
945 the build system and source changes allow. buildman's -P flag may be used to
946 enable this; -P causes each board to be built in a separate (board-specific)
947 directory, thus avoiding any buildman-induced configuration changes in any
948 build directory.
950 U-Boot's build system embeds information such as a build timestamp into the
951 final binary. This information varies each time U-Boot is built. This causes
953 requires that the final U-Boot binary be re-linked. This unnecessary work can
957 Combining all of these options together yields the command-line shown below.
961 SOURCE_DATE_EPOCH=0 ./tools/buildman/buildman -I -P tegra
967 A common requirement when converting CONFIG options to Kconfig is to check
969 Buildman supports this with the -K option, used after a build. This shows
970 differences in effective configuration between one commit and the next.
974 $ buildman -b kc4 -sK
978 + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
979 + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
982 + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
983 + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
994 The -K option uses the u-boot.cfg, spl/u-boot-spl.cfg and tpl/u-boot-tpl.cfg
995 files which are produced by a build. If all you want is to check the
996 configuration you can in fact avoid doing a full build, using -D. This tells
997 buildman to configuration U-Boot and create the .cfg files, but not actually
998 build the source. This is 5-10 times faster than doing a full build.
1007 The former would appear in a header filer and the latter in a defconfig
1010 option to Kconfig. To disable this behaviour, use --squash-config-y.
1016 Buildman has various other command line options. Try --help to see them.
1028 Buildman includes most of the features of MAKEALL and is generally faster
1029 and easier to use. In particular it builds entire branches: if a particular
1034 - We don't want to maintain two build systems
1035 - Buildman is typically faster
1036 - Buildman has a lot more features
1041 First you need to set up your tool chains - see the 'Setting up' section
1045 To build the current source tree, run buildman without a -b flag:
1047 ./tools/buildman/buildman <list of things to build>
1049 This will build the current source tree for the given boards and display
1050 the results and errors.
1052 However buildman usually works on entire branches, and for that you must
1055 ./tools/buildman/buildman -b <branch_name> <list of things to build>
1059 ./tools/buildman/buildman -b <branch_name> -s <list of things to build>
1061 to see the results of the build. Rather than showing you all the output,
1063 an error and green indicating that a commit fixed an error. Use the -e
1064 flag to see the full errors and -l to see which boards caused which errors.
1066 If you really want to see build results as they happen, use -v when doing a
1067 build (and -e to see the errors/warnings too).
1071 add commits, etc. without affecting the build in progress.
1073 The <list of things to build> can include board names, architectures or the
1078 - build all Power Architecture boards:
1079 MAKEALL -a powerpc
1080 MAKEALL --arch powerpc
1082 ** buildman -b <branch> powerpc
1083 - build all PowerPC boards manufactured by vendor "esd":
1084 MAKEALL -a powerpc -v esd
1085 ** buildman -b <branch> esd
1086 - build all PowerPC boards manufactured either by "keymile" or "siemens":
1087 MAKEALL -a powerpc -v keymile -v siemens
1088 ** buildman -b <branch> keymile siemens
1089 - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
1090 MAKEALL -c mpc83xx -v freescale 4xx
1091 ** buildman -b <branch> mpc83xx freescale 4xx
1096 You can use the -T flag to change the number of threads. If you are only
1097 building a few boards, buildman will automatically run make with the -j
1100 option in MAKEALL then -j is the equivalent in buildman.
1103 this with the -o option. Buildman normally does out-of-tree builds: use -i
1105 used -i you pollute buildman's copies of the source tree, and you will need
1106 to remove the build directory (normally ../<branch_name>) to run buildman
1107 in normal mode (without -i).
1109 Buildman doesn't keep the output result normally, but use the -k option to
1117 -B shows which functions are growing/shrinking in which commit - great
1119 -S shows image sizes for each commit (just an overall summary)
1120 -u shows boards that you haven't built yet
1121 --step 0 will build just the upstream commit and the last commit of your
1131 bit of scope for improvement. Things like better error diffs and easier
1134 commits for changed files and building only boards which use those files.
1136 A specific problem to fix is that Ctrl-C does not exit buildman cleanly when
1143 the build speed by building all commits for a board instead of the other
1150 Updated 12-12-12
1151 Updated 23-02-13