xref: /openbmc/u-boot/tools/buildman/README (revision e5a0e5d8)
1fc3fe1c2SSimon Glass# Copyright (c) 2013 The Chromium OS Authors.
2fc3fe1c2SSimon Glass#
31a459660SWolfgang Denk# SPDX-License-Identifier:	GPL-2.0+
4fc3fe1c2SSimon Glass#
5fc3fe1c2SSimon Glass
66eede34cSSimon Glass(Please read 'How to change from MAKEALL' if you are used to that tool)
76eede34cSSimon Glass
8fc3fe1c2SSimon GlassWhat is this?
9fc3fe1c2SSimon Glass=============
10fc3fe1c2SSimon Glass
11fc3fe1c2SSimon GlassThis tool handles building U-Boot to check that you have not broken it
12fc3fe1c2SSimon Glasswith your patch series. It can build each individual commit and report
13fc3fe1c2SSimon Glasswhich boards fail on which commits, and which errors come up. It aims
14fc3fe1c2SSimon Glassto make full use of multi-processor machines.
15fc3fe1c2SSimon Glass
16fc3fe1c2SSimon GlassA key feature of buildman is its output summary, which allows warnings,
17fc3fe1c2SSimon Glasserrors or image size increases in a particular commit or board to be
18fc3fe1c2SSimon Glassquickly identified and the offending commit pinpointed. This can be a big
19fc3fe1c2SSimon Glasshelp for anyone working with >10 patches at a time.
20fc3fe1c2SSimon Glass
21fc3fe1c2SSimon Glass
22fc3fe1c2SSimon GlassCaveats
23fc3fe1c2SSimon Glass=======
24fc3fe1c2SSimon Glass
25fc3fe1c2SSimon GlassBuildman is still in its infancy. It is already a very useful tool, but
26fc3fe1c2SSimon Glassexpect to find problems and send patches.
27fc3fe1c2SSimon Glass
28fc3fe1c2SSimon GlassBuildman can be stopped and restarted, in which case it will continue
29fc3fe1c2SSimon Glasswhere it left off. This should happen cleanly and without side-effects.
30fc3fe1c2SSimon GlassIf not, it is a bug, for which a patch would be welcome.
31fc3fe1c2SSimon Glass
32fc3fe1c2SSimon GlassBuildman gets so tied up in its work that it can ignore the outside world.
33fc3fe1c2SSimon GlassYou may need to press Ctrl-C several times to quit it. Also it will print
34fc3fe1c2SSimon Glassout various exceptions when stopped.
35fc3fe1c2SSimon Glass
36fc3fe1c2SSimon Glass
37fc3fe1c2SSimon GlassTheory of Operation
38fc3fe1c2SSimon Glass===================
39fc3fe1c2SSimon Glass
40fc3fe1c2SSimon Glass(please read this section in full twice or you will be perpetually confused)
41fc3fe1c2SSimon Glass
42fc3fe1c2SSimon GlassBuildman is a builder. It is not make, although it runs make. It does not
43fc3fe1c2SSimon Glassproduce any useful output on the terminal while building, except for
44*e5a0e5d8SSimon Glassprogress information (except with -v, see below). All the output (errors,
45*e5a0e5d8SSimon Glasswarnings and binaries if you are ask for them) is stored in output
46*e5a0e5d8SSimon Glassdirectories, which you can look at while the build is progressing, or when
47*e5a0e5d8SSimon Glassit is finished.
48fc3fe1c2SSimon Glass
49fc3fe1c2SSimon GlassBuildman produces a concise summary of which boards succeeded and failed.
50fc3fe1c2SSimon GlassIt shows which commit introduced which board failure using a simple
51fc3fe1c2SSimon Glassred/green colour coding. Full error information can be requested, in which
52fc3fe1c2SSimon Glasscase it is de-duped and displayed against the commit that introduced the
53fc3fe1c2SSimon Glasserror. An example workflow is below.
54fc3fe1c2SSimon Glass
55fc3fe1c2SSimon GlassBuildman stores image size information and can report changes in image size
56fc3fe1c2SSimon Glassfrom commit to commit. An example of this is below.
57fc3fe1c2SSimon Glass
58fc3fe1c2SSimon GlassBuildman starts multiple threads, and each thread builds for one board at
59fc3fe1c2SSimon Glassa time. A thread starts at the first commit, configures the source for your
60fc3fe1c2SSimon Glassboard and builds it. Then it checks out the next commit and does an
61fc3fe1c2SSimon Glassincremental build. Eventually the thread reaches the last commit and stops.
62fc3fe1c2SSimon GlassIf errors or warnings are found along the way, the thread will reconfigure
63fc3fe1c2SSimon Glassafter every commit, and your build will be very slow. This is because a
64fc3fe1c2SSimon Glassfile that produces just a warning would not normally be rebuilt in an
65fc3fe1c2SSimon Glassincremental build.
66fc3fe1c2SSimon Glass
67fc3fe1c2SSimon GlassBuildman works in an entirely separate place from your U-Boot repository.
68fc3fe1c2SSimon GlassIt creates a separate working directory for each thread, and puts the
69fc3fe1c2SSimon Glassoutput files in the working directory, organised by commit name and board
70fc3fe1c2SSimon Glassname, in a two-level hierarchy.
71fc3fe1c2SSimon Glass
72fc3fe1c2SSimon GlassBuildman is invoked in your U-Boot directory, the one with the .git
73fc3fe1c2SSimon Glassdirectory. It clones this repository into a copy for each thread, and the
74fc3fe1c2SSimon Glassthreads do not affect the state of your git repository. Any checkouts done
75fc3fe1c2SSimon Glassby the thread affect only the working directory for that thread.
76fc3fe1c2SSimon Glass
77fc3fe1c2SSimon GlassBuildman automatically selects the correct tool chain for each board. You
78fc3fe1c2SSimon Glassmust supply suitable tool chains, but buildman takes care of selecting the
79fc3fe1c2SSimon Glassright one.
80fc3fe1c2SSimon Glass
81*e5a0e5d8SSimon GlassBuildman generally builds a branch (with the -b flag), and in this case
82*e5a0e5d8SSimon Glassbuilds the upstream commit as well, for comparison. It cannot build
83*e5a0e5d8SSimon Glassindividual commits at present, unless (maybe) you point it at an empty
84*e5a0e5d8SSimon Glassbranch. Put all your commits in a branch, set the branch's upstream to a
85*e5a0e5d8SSimon Glassvalid value, and all will be well. Otherwise buildman will perform random
86*e5a0e5d8SSimon Glassactions. Use -n to check what the random actions might be.
87*e5a0e5d8SSimon Glass
88*e5a0e5d8SSimon GlassIf you just want to build the current source tree, leave off the -b flag.
89*e5a0e5d8SSimon GlassThis will display results and errors as they happen. You can still look
90*e5a0e5d8SSimon Glassat them later using -s. Note that buildman will assume that the source
91*e5a0e5d8SSimon Glasshas changed, and will build all specified boards in this case.
92fc3fe1c2SSimon Glass
93fc3fe1c2SSimon GlassBuildman is optimised for building many commits at once, for many boards.
94fc3fe1c2SSimon GlassOn multi-core machines, Buildman is fast because it uses most of the
95fc3fe1c2SSimon Glassavailable CPU power. When it gets to the end, or if you are building just
96fc3fe1c2SSimon Glassa few commits or boards, it will be pretty slow. As a tip, if you don't
97fc3fe1c2SSimon Glassplan to use your machine for anything else, you can use -T to increase the
98fc3fe1c2SSimon Glassnumber of threads beyond the default.
99fc3fe1c2SSimon Glass
1008426d8b0SStephen WarrenBuildman lets you build all boards, or a subset. Specify the subset by passing
1018426d8b0SStephen Warrencommand-line arguments that list the desired board name, architecture name,
1028426d8b0SStephen WarrenSOC name, or anything else in the boards.cfg file. Multiple arguments are
1038426d8b0SStephen Warrenallowed. Each argument will be interpreted as a regular expression, so
1048426d8b0SStephen Warrenbehaviour is a superset of exact or substring matching. Examples are:
1058426d8b0SStephen Warren
1068426d8b0SStephen Warren* 'tegra20'      All boards with a Tegra20 SoC
1078426d8b0SStephen Warren* 'tegra'        All boards with any Tegra Soc (Tegra20, Tegra30, Tegra114...)
1088426d8b0SStephen Warren* '^tegra[23]0$' All boards with either Tegra20 or Tegra30 SoC
1098426d8b0SStephen Warren* 'powerpc'      All PowerPC boards
110fc3fe1c2SSimon Glass
111fc3fe1c2SSimon GlassBuildman does not store intermediate object files. It optionally copies
112fc3fe1c2SSimon Glassthe binary output into a directory when a build is successful. Size
113fc3fe1c2SSimon Glassinformation is always recorded. It needs a fair bit of disk space to work,
114fc3fe1c2SSimon Glasstypically 250MB per thread.
115fc3fe1c2SSimon Glass
116fc3fe1c2SSimon Glass
117fc3fe1c2SSimon GlassSetting up
118fc3fe1c2SSimon Glass==========
119fc3fe1c2SSimon Glass
120fc3fe1c2SSimon Glass1. Get the U-Boot source. You probably already have it, but if not these
121fc3fe1c2SSimon Glasssteps should get you started with a repo and some commits for testing.
122fc3fe1c2SSimon Glass
123fc3fe1c2SSimon Glass$ cd /path/to/u-boot
124fc3fe1c2SSimon Glass$ git clone git://git.denx.de/u-boot.git .
125fc3fe1c2SSimon Glass$ git checkout -b my-branch origin/master
126fc3fe1c2SSimon Glass$ # Add some commits to the branch, reading for testing
127fc3fe1c2SSimon Glass
128fc3fe1c2SSimon Glass2. Create ~/.buildman to tell buildman where to find tool chains. As an
129fc3fe1c2SSimon Glassexample:
130fc3fe1c2SSimon Glass
131fc3fe1c2SSimon Glass# Buildman settings file
132fc3fe1c2SSimon Glass
133fc3fe1c2SSimon Glass[toolchain]
134fc3fe1c2SSimon Glassroot: /
135fc3fe1c2SSimon Glassrest: /toolchains/*
136fc3fe1c2SSimon Glasseldk: /opt/eldk-4.2
137fc3fe1c2SSimon Glass
138fc3fe1c2SSimon Glass[toolchain-alias]
139fc3fe1c2SSimon Glassx86: i386
140fc3fe1c2SSimon Glassblackfin: bfin
141fc3fe1c2SSimon Glasssh: sh4
142fc3fe1c2SSimon Glassnds32: nds32le
143fc3fe1c2SSimon Glassopenrisc: or32
144fc3fe1c2SSimon Glass
145fc3fe1c2SSimon Glass
146fc3fe1c2SSimon GlassThis selects the available toolchain paths. Add the base directory for
147fc3fe1c2SSimon Glasseach of your toolchains here. Buildman will search inside these directories
148fc3fe1c2SSimon Glassand also in any '/usr' and '/usr/bin' subdirectories.
149fc3fe1c2SSimon Glass
150fc3fe1c2SSimon GlassMake sure the tags (here root: rest: and eldk:) are unique.
151fc3fe1c2SSimon Glass
152fc3fe1c2SSimon GlassThe toolchain-alias section indicates that the i386 toolchain should be used
153fc3fe1c2SSimon Glassto build x86 commits.
154fc3fe1c2SSimon Glass
155fc3fe1c2SSimon Glass
156fc3fe1c2SSimon Glass2. Check the available toolchains
157fc3fe1c2SSimon Glass
158fc3fe1c2SSimon GlassRun this check to make sure that you have a toolchain for every architecture.
159fc3fe1c2SSimon Glass
160fc3fe1c2SSimon Glass$ ./tools/buildman/buildman --list-tool-chains
161fc3fe1c2SSimon GlassScanning for tool chains
162fc3fe1c2SSimon Glass   - scanning path '/'
163fc3fe1c2SSimon Glass      - looking in '/.'
164fc3fe1c2SSimon Glass      - looking in '/bin'
165fc3fe1c2SSimon Glass      - looking in '/usr/bin'
166fc3fe1c2SSimon Glass         - found '/usr/bin/gcc'
167fc3fe1c2SSimon GlassTool chain test:  OK
168fc3fe1c2SSimon Glass         - found '/usr/bin/c89-gcc'
169fc3fe1c2SSimon GlassTool chain test:  OK
170fc3fe1c2SSimon Glass         - found '/usr/bin/c99-gcc'
171fc3fe1c2SSimon GlassTool chain test:  OK
172fc3fe1c2SSimon Glass         - found '/usr/bin/x86_64-linux-gnu-gcc'
173fc3fe1c2SSimon GlassTool chain test:  OK
174fc3fe1c2SSimon Glass   - scanning path '/toolchains/powerpc-linux'
175fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/.'
176fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/bin'
177fc3fe1c2SSimon Glass         - found '/toolchains/powerpc-linux/bin/powerpc-linux-gcc'
178fc3fe1c2SSimon GlassTool chain test:  OK
179fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/usr/bin'
180fc3fe1c2SSimon Glass   - scanning path '/toolchains/nds32le-linux-glibc-v1f'
181fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/.'
182fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/bin'
183fc3fe1c2SSimon Glass         - found '/toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc'
184fc3fe1c2SSimon GlassTool chain test:  OK
185fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/usr/bin'
186fc3fe1c2SSimon Glass   - scanning path '/toolchains/nios2'
187fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/.'
188fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/bin'
189fc3fe1c2SSimon Glass         - found '/toolchains/nios2/bin/nios2-linux-gcc'
190fc3fe1c2SSimon GlassTool chain test:  OK
191fc3fe1c2SSimon Glass         - found '/toolchains/nios2/bin/nios2-linux-uclibc-gcc'
192fc3fe1c2SSimon GlassTool chain test:  OK
193fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/usr/bin'
194fc3fe1c2SSimon Glass         - found '/toolchains/nios2/usr/bin/nios2-linux-gcc'
195fc3fe1c2SSimon GlassTool chain test:  OK
196fc3fe1c2SSimon Glass         - found '/toolchains/nios2/usr/bin/nios2-linux-uclibc-gcc'
197fc3fe1c2SSimon GlassTool chain test:  OK
198fc3fe1c2SSimon Glass   - scanning path '/toolchains/microblaze-unknown-linux-gnu'
199fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/.'
200fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/bin'
201fc3fe1c2SSimon Glass         - found '/toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc'
202fc3fe1c2SSimon GlassTool chain test:  OK
203fc3fe1c2SSimon Glass         - found '/toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc'
204fc3fe1c2SSimon GlassTool chain test:  OK
205fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/usr/bin'
206fc3fe1c2SSimon Glass   - scanning path '/toolchains/mips-linux'
207fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/.'
208fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/bin'
209fc3fe1c2SSimon Glass         - found '/toolchains/mips-linux/bin/mips-linux-gcc'
210fc3fe1c2SSimon GlassTool chain test:  OK
211fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/usr/bin'
212fc3fe1c2SSimon Glass   - scanning path '/toolchains/old'
213fc3fe1c2SSimon Glass      - looking in '/toolchains/old/.'
214fc3fe1c2SSimon Glass      - looking in '/toolchains/old/bin'
215fc3fe1c2SSimon Glass      - looking in '/toolchains/old/usr/bin'
216fc3fe1c2SSimon Glass   - scanning path '/toolchains/i386-linux'
217fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/.'
218fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/bin'
219fc3fe1c2SSimon Glass         - found '/toolchains/i386-linux/bin/i386-linux-gcc'
220fc3fe1c2SSimon GlassTool chain test:  OK
221fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/usr/bin'
222fc3fe1c2SSimon Glass   - scanning path '/toolchains/bfin-uclinux'
223fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/.'
224fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/bin'
225fc3fe1c2SSimon Glass         - found '/toolchains/bfin-uclinux/bin/bfin-uclinux-gcc'
226fc3fe1c2SSimon GlassTool chain test:  OK
227fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/usr/bin'
228fc3fe1c2SSimon Glass   - scanning path '/toolchains/sparc-elf'
229fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/.'
230fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/bin'
231fc3fe1c2SSimon Glass         - found '/toolchains/sparc-elf/bin/sparc-elf-gcc'
232fc3fe1c2SSimon GlassTool chain test:  OK
233fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/usr/bin'
234fc3fe1c2SSimon Glass   - scanning path '/toolchains/arm-2010q1'
235fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/.'
236fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/bin'
237fc3fe1c2SSimon Glass         - found '/toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc'
238fc3fe1c2SSimon GlassTool chain test:  OK
239fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/usr/bin'
240fc3fe1c2SSimon Glass   - scanning path '/toolchains/from'
241fc3fe1c2SSimon Glass      - looking in '/toolchains/from/.'
242fc3fe1c2SSimon Glass      - looking in '/toolchains/from/bin'
243fc3fe1c2SSimon Glass      - looking in '/toolchains/from/usr/bin'
244fc3fe1c2SSimon Glass   - scanning path '/toolchains/sh4-gentoo-linux-gnu'
245fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/.'
246fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/bin'
247fc3fe1c2SSimon Glass         - found '/toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc'
248fc3fe1c2SSimon GlassTool chain test:  OK
249fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/usr/bin'
250fc3fe1c2SSimon Glass   - scanning path '/toolchains/avr32-linux'
251fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/.'
252fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/bin'
253fc3fe1c2SSimon Glass         - found '/toolchains/avr32-linux/bin/avr32-gcc'
254fc3fe1c2SSimon GlassTool chain test:  OK
255fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/usr/bin'
256fc3fe1c2SSimon Glass   - scanning path '/toolchains/m68k-linux'
257fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/.'
258fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/bin'
259fc3fe1c2SSimon Glass         - found '/toolchains/m68k-linux/bin/m68k-linux-gcc'
260fc3fe1c2SSimon GlassTool chain test:  OK
261fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/usr/bin'
262fc3fe1c2SSimon GlassList of available toolchains (17):
263fc3fe1c2SSimon Glassarm       : /toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
264fc3fe1c2SSimon Glassavr32     : /toolchains/avr32-linux/bin/avr32-gcc
265fc3fe1c2SSimon Glassbfin      : /toolchains/bfin-uclinux/bin/bfin-uclinux-gcc
266fc3fe1c2SSimon Glassc89       : /usr/bin/c89-gcc
267fc3fe1c2SSimon Glassc99       : /usr/bin/c99-gcc
268fc3fe1c2SSimon Glassi386      : /toolchains/i386-linux/bin/i386-linux-gcc
269fc3fe1c2SSimon Glassm68k      : /toolchains/m68k-linux/bin/m68k-linux-gcc
270fc3fe1c2SSimon Glassmb        : /toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc
271fc3fe1c2SSimon Glassmicroblaze: /toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc
272fc3fe1c2SSimon Glassmips      : /toolchains/mips-linux/bin/mips-linux-gcc
273fc3fe1c2SSimon Glassnds32le   : /toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc
274fc3fe1c2SSimon Glassnios2     : /toolchains/nios2/bin/nios2-linux-gcc
275fc3fe1c2SSimon Glasspowerpc   : /toolchains/powerpc-linux/bin/powerpc-linux-gcc
276fc3fe1c2SSimon Glasssandbox   : /usr/bin/gcc
277fc3fe1c2SSimon Glasssh4       : /toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc
278fc3fe1c2SSimon Glasssparc     : /toolchains/sparc-elf/bin/sparc-elf-gcc
279fc3fe1c2SSimon Glassx86_64    : /usr/bin/x86_64-linux-gnu-gcc
280fc3fe1c2SSimon Glass
281fc3fe1c2SSimon Glass
282fc3fe1c2SSimon GlassYou can see that everything is covered, even some strange ones that won't
283fc3fe1c2SSimon Glassbe used (c88 and c99). This is a feature.
284fc3fe1c2SSimon Glass
285fc3fe1c2SSimon Glass
286fc3fe1c2SSimon GlassHow to run it
287fc3fe1c2SSimon Glass=============
288fc3fe1c2SSimon Glass
289fc3fe1c2SSimon GlassFirst do a dry run using the -n flag: (replace <branch> with a real, local
290fc3fe1c2SSimon Glassbranch with a valid upstream)
291fc3fe1c2SSimon Glass
292fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -n
293fc3fe1c2SSimon Glass
294fc3fe1c2SSimon GlassIf it can't detect the upstream branch, try checking out the branch, and
295fc3fe1c2SSimon Glassdoing something like 'git branch --set-upstream <branch> upstream/master'
296fc3fe1c2SSimon Glassor something similar.
297fc3fe1c2SSimon Glass
298cec83c3eSSimon GlassAs an example:
299fc3fe1c2SSimon Glass
300fc3fe1c2SSimon GlassDry run, so not doing much. But I would do this:
301fc3fe1c2SSimon Glass
302fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
303fc3fe1c2SSimon GlassBuild directory: ../lcd9b
304fc3fe1c2SSimon Glass    5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm
305fc3fe1c2SSimon Glass    c18f1b4 tegra: Use const for pinmux_config_pingroup/table()
306fc3fe1c2SSimon Glass    2f043ae tegra: Add display support to funcmux
307fc3fe1c2SSimon Glass    e349900 tegra: fdt: Add pwm binding and node
308fc3fe1c2SSimon Glass    424a5f0 tegra: fdt: Add LCD definitions for Tegra
309fc3fe1c2SSimon Glass    0636ccf tegra: Add support for PWM
310fc3fe1c2SSimon Glass    a994fe7 tegra: Add SOC support for display/lcd
311fc3fe1c2SSimon Glass    fcd7350 tegra: Add LCD driver
312fc3fe1c2SSimon Glass    4d46e9d tegra: Add LCD support to Nvidia boards
313fc3fe1c2SSimon Glass    991bd48 arm: Add control over cachability of memory regions
314fc3fe1c2SSimon Glass    54e8019 lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
315fc3fe1c2SSimon Glass    d92aff7 lcd: Add support for flushing LCD fb from dcache after update
316fc3fe1c2SSimon Glass    dbd0677 tegra: Align LCD frame buffer to section boundary
317fc3fe1c2SSimon Glass    0cff9b8 tegra: Support control of cache settings for LCD
318fc3fe1c2SSimon Glass    9c56900 tegra: fdt: Add LCD definitions for Seaboard
319fc3fe1c2SSimon Glass    5cc29db lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
320fc3fe1c2SSimon Glass    cac5a23 tegra: Enable display/lcd support on Seaboard
321fc3fe1c2SSimon Glass    49ff541 wip
322fc3fe1c2SSimon Glass
323fc3fe1c2SSimon GlassTotal boards to build for each commit: 1059
324fc3fe1c2SSimon Glass
325fc3fe1c2SSimon GlassThis shows that it will build all 1059 boards, using 4 threads (because
326fc3fe1c2SSimon Glasswe have a 4-core CPU). Each thread will run with -j1, meaning that each
327fc3fe1c2SSimon Glassmake job will use a single CPU. The list of commits to be built helps you
328fc3fe1c2SSimon Glassconfirm that things look about right. Notice that buildman has chosen a
329fc3fe1c2SSimon Glass'base' directory for you, immediately above your source tree.
330fc3fe1c2SSimon Glass
331fc3fe1c2SSimon GlassBuildman works entirely inside the base directory, here ../lcd9b,
332fc3fe1c2SSimon Glasscreating a working directory for each thread, and creating output
333fc3fe1c2SSimon Glassdirectories for each commit and board.
334fc3fe1c2SSimon Glass
335fc3fe1c2SSimon Glass
336fc3fe1c2SSimon GlassSuggested Workflow
337fc3fe1c2SSimon Glass==================
338fc3fe1c2SSimon Glass
339fc3fe1c2SSimon GlassTo run the build for real, take off the -n:
340fc3fe1c2SSimon Glass
341fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch>
342fc3fe1c2SSimon Glass
343fc3fe1c2SSimon GlassBuildman will set up some working directories, and get started. After a
344fc3fe1c2SSimon Glassminute or so it will settle down to a steady pace, with a display like this:
345fc3fe1c2SSimon Glass
346fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
347fc3fe1c2SSimon Glass  528   36  124 /19062  1:13:30  : SIMPC8313_SP
348fc3fe1c2SSimon Glass
349fc3fe1c2SSimon GlassThis means that it is building 19062 board/commit combinations. So far it
350cec83c3eSSimon Glasshas managed to successfully build 528. Another 36 have built with warnings,
351fc3fe1c2SSimon Glassand 124 more didn't build at all. Buildman expects to complete the process
352fc3fe1c2SSimon Glassin an hour and 15 minutes. Use this time to buy a faster computer.
353fc3fe1c2SSimon Glass
354fc3fe1c2SSimon Glass
355fc3fe1c2SSimon GlassTo find out how the build went, ask for a summary with -s. You can do this
356fc3fe1c2SSimon Glasseither before the build completes (presumably in another terminal) or or
357fc3fe1c2SSimon Glassafterwards. Let's work through an example of how this is used:
358fc3fe1c2SSimon Glass
359fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b lcd9b -s
360fc3fe1c2SSimon Glass...
361fc3fe1c2SSimon Glass01: Merge branch 'master' of git://git.denx.de/u-boot-arm
362fc3fe1c2SSimon Glass   powerpc:   + galaxy5200_LOWBOOT
363fc3fe1c2SSimon Glass02: tegra: Use const for pinmux_config_pingroup/table()
364fc3fe1c2SSimon Glass03: tegra: Add display support to funcmux
365fc3fe1c2SSimon Glass04: tegra: fdt: Add pwm binding and node
366fc3fe1c2SSimon Glass05: tegra: fdt: Add LCD definitions for Tegra
367fc3fe1c2SSimon Glass06: tegra: Add support for PWM
368fc3fe1c2SSimon Glass07: tegra: Add SOC support for display/lcd
369fc3fe1c2SSimon Glass08: tegra: Add LCD driver
370fc3fe1c2SSimon Glass09: tegra: Add LCD support to Nvidia boards
371fc3fe1c2SSimon Glass10: arm: Add control over cachability of memory regions
372fc3fe1c2SSimon Glass11: lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
373fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
374fc3fe1c2SSimon Glass       arm:   + lubbock
375fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
376fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
377fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
378fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
379fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
380fc3fe1c2SSimon Glass18: wip
381fc3fe1c2SSimon Glass
382fc3fe1c2SSimon GlassThis shows which commits have succeeded and which have failed. In this case
383fc3fe1c2SSimon Glassthe build is still in progress so many boards are not built yet (use -u to
384fc3fe1c2SSimon Glasssee which ones). But still we can see a few failures. The galaxy5200_LOWBOOT
385fc3fe1c2SSimon Glassnever builds correctly. This could be a problem with our toolchain, or it
386fc3fe1c2SSimon Glasscould be a bug in the upstream. The good news is that we probably don't need
387fc3fe1c2SSimon Glassto blame our commits. The bad news is it isn't tested on that board.
388fc3fe1c2SSimon Glass
389fc3fe1c2SSimon GlassCommit 12 broke lubbock. That's what the '+ lubbock' means. The failure
390fc3fe1c2SSimon Glassis never fixed by a later commit, or you would see lubbock again, in green,
391fc3fe1c2SSimon Glasswithout the +.
392fc3fe1c2SSimon Glass
393fc3fe1c2SSimon GlassTo see the actual error:
394fc3fe1c2SSimon Glass
395fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -se lubbock
396fc3fe1c2SSimon Glass...
397fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
398fc3fe1c2SSimon Glass       arm:   + lubbock
399fc3fe1c2SSimon Glass+common/libcommon.o: In function `lcd_sync':
400fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
401fc3fe1c2SSimon Glass+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
402fc3fe1c2SSimon Glass+make: *** [/u-boot/lcd9b/.bm-work/00/build/u-boot] Error 139
403fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
404fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
405fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
406fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
407fc3fe1c2SSimon Glass-/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
408fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:125: undefined reference to `flush_dcache_range'
409fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
410fc3fe1c2SSimon Glass18: wip
411fc3fe1c2SSimon Glass
412fc3fe1c2SSimon GlassSo the problem is in lcd.c, due to missing cache operations. This information
413fc3fe1c2SSimon Glassshould be enough to work out what that commit is doing to break these
414fc3fe1c2SSimon Glassboards. (In this case pxa did not have cache operations defined).
415fc3fe1c2SSimon Glass
416fc3fe1c2SSimon GlassIf you see error lines marked with - that means that the errors were fixed
417fc3fe1c2SSimon Glassby that commit. Sometimes commits can be in the wrong order, so that a
418fc3fe1c2SSimon Glassbreakage is introduced for a few commits and fixed by later commits. This
419fc3fe1c2SSimon Glassshows up clearly with buildman. You can then reorder the commits and try
420fc3fe1c2SSimon Glassagain.
421fc3fe1c2SSimon Glass
422fc3fe1c2SSimon GlassAt commit 16, the error moves - you can see that the old error at line 120
423fc3fe1c2SSimon Glassis fixed, but there is a new one at line 126. This is probably only because
424cec83c3eSSimon Glasswe added some code and moved the broken line father down the file.
425fc3fe1c2SSimon Glass
426fc3fe1c2SSimon GlassIf many boards have the same error, then -e will display the error only
427fc3fe1c2SSimon Glassonce. This makes the output as concise as possible.
428fc3fe1c2SSimon Glass
429fc3fe1c2SSimon GlassThe full build output in this case is available in:
430fc3fe1c2SSimon Glass
431fc3fe1c2SSimon Glass../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/
432fc3fe1c2SSimon Glass
433fc3fe1c2SSimon Glass   done: Indicates the build was done, and holds the return code from make.
434fc3fe1c2SSimon Glass         This is 0 for a good build, typically 2 for a failure.
435fc3fe1c2SSimon Glass
436fc3fe1c2SSimon Glass   err:  Output from stderr, if any. Errors and warnings appear here.
437fc3fe1c2SSimon Glass
438fc3fe1c2SSimon Glass   log:  Output from stdout. Normally there isn't any since buildman runs
439fc3fe1c2SSimon Glass         in silent mode for now.
440fc3fe1c2SSimon Glass
441fc3fe1c2SSimon Glass   toolchain: Shows information about the toolchain used for the build.
442fc3fe1c2SSimon Glass
443fc3fe1c2SSimon Glass   sizes: Shows image size information.
444fc3fe1c2SSimon Glass
445fc3fe1c2SSimon GlassIt is possible to get the build output there also. Use the -k option for
446fc3fe1c2SSimon Glassthis. In that case you will also see some output files, like:
447fc3fe1c2SSimon Glass
448fc3fe1c2SSimon Glass   System.map  toolchain  u-boot  u-boot.bin  u-boot.map  autoconf.mk
449fc3fe1c2SSimon Glass   (also SPL versions u-boot-spl and u-boot-spl.bin if available)
450fc3fe1c2SSimon Glass
451fc3fe1c2SSimon Glass
452fc3fe1c2SSimon GlassChecking Image Sizes
453fc3fe1c2SSimon Glass====================
454fc3fe1c2SSimon Glass
455fc3fe1c2SSimon GlassA key requirement for U-Boot is that you keep code/data size to a minimum.
456fc3fe1c2SSimon GlassWhere a new feature increases this noticeably it should normally be put
457fc3fe1c2SSimon Glassbehind a CONFIG flag so that boards can leave it off and keep the image
458fc3fe1c2SSimon Glasssize more or less the same with each new release.
459fc3fe1c2SSimon Glass
460fc3fe1c2SSimon GlassTo check the impact of your commits on image size, use -S. For example:
461fc3fe1c2SSimon Glass
462fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-x86 -sS
463fc3fe1c2SSimon GlassSummary of 10 commits for 1066 boards (4 threads, 1 job per thread)
464fc3fe1c2SSimon Glass01: MAKEALL: add support for per architecture toolchains
465fc3fe1c2SSimon Glass02: x86: Add function to get top of usable ram
466fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text -272.0  rodata +41.0
467fc3fe1c2SSimon Glass03: x86: Add basic cache operations
468fc3fe1c2SSimon Glass04: x86: Permit bootstage and timer data to be used prior to relocation
469fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  data +16.0
470fc3fe1c2SSimon Glass05: x86: Add an __end symbol to signal the end of the U-Boot binary
471fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text +76.0
472fc3fe1c2SSimon Glass06: x86: Rearrange the output input to remove BSS
473fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  bss -2140.0
474fc3fe1c2SSimon Glass07: x86: Support relocation of FDT on start-up
475fc3fe1c2SSimon Glass       x86: +   coreboot-x86
476fc3fe1c2SSimon Glass08: x86: Add error checking to x86 relocation code
477fc3fe1c2SSimon Glass09: x86: Adjust link device tree include file
478fc3fe1c2SSimon Glass10: x86: Enable CONFIG_OF_CONTROL on coreboot
479fc3fe1c2SSimon Glass
480fc3fe1c2SSimon Glass
481fc3fe1c2SSimon GlassYou can see that image size only changed on x86, which is good because this
482fc3fe1c2SSimon Glassseries is not supposed to change any other board. From commit 7 onwards the
483fc3fe1c2SSimon Glassbuild fails so we don't get code size numbers. The numbers are fractional
484fc3fe1c2SSimon Glassbecause they are an average of all boards for that architecture. The
485fc3fe1c2SSimon Glassintention is to allow you to quickly find image size problems introduced by
486fc3fe1c2SSimon Glassyour commits.
487fc3fe1c2SSimon Glass
488fc3fe1c2SSimon GlassNote that the 'text' region and 'rodata' are split out. You should add the
489fc3fe1c2SSimon Glasstwo together to get the total read-only size (reported as the first column
490fc3fe1c2SSimon Glassin the output from binutil's 'size' utility).
491fc3fe1c2SSimon Glass
492fc3fe1c2SSimon GlassA useful option is --step which lets you skip some commits. For example
493fc3fe1c2SSimon Glass--step 2 will show the image sizes for only every 2nd commit (so it will
494fc3fe1c2SSimon Glasscompare the image sizes of the 1st, 3rd, 5th... commits). You can also use
495fc3fe1c2SSimon Glass--step 0 which will compare only the first and last commits. This is useful
496fc3fe1c2SSimon Glassfor an overview of how your entire series affects code size.
497fc3fe1c2SSimon Glass
498fc3fe1c2SSimon GlassYou can also use -d to see a detailed size breakdown for each board. This
499fc3fe1c2SSimon Glasslist is sorted in order from largest growth to largest reduction.
500fc3fe1c2SSimon Glass
501fc3fe1c2SSimon GlassIt is possible to go a little further with the -B option (--bloat). This
502cec83c3eSSimon Glassshows where U-Boot has bloated, breaking the size change down to the function
503fc3fe1c2SSimon Glasslevel. Example output is below:
504fc3fe1c2SSimon Glass
505fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-mem4 -sSdB
506fc3fe1c2SSimon Glass...
507fc3fe1c2SSimon Glass19: Roll crc32 into hash infrastructure
508fc3fe1c2SSimon Glass       arm: (for 10/10 boards)  all -143.4  bss +1.2  data -4.8  rodata -48.2 text -91.6
509fc3fe1c2SSimon Glass            paz00          :  all +23  bss -4  rodata -29  text +56
510fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64)
511fc3fe1c2SSimon Glass                 function                                   old     new   delta
512fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
513fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
514fc3fe1c2SSimon Glass                 ext4fs_read_file                           540     568     +28
515fc3fe1c2SSimon Glass                 insert_var_value_sub                       688     692      +4
516fc3fe1c2SSimon Glass                 run_list_real                             1996    1992      -4
517fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
518fc3fe1c2SSimon Glass            trimslice      :  all -9  bss +16  rodata -29  text +4
519fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
520fc3fe1c2SSimon Glass                 function                                   old     new   delta
521fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
522fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
523fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
524fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
525fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
526fc3fe1c2SSimon Glass            whistler       :  all -9  bss +16  rodata -29  text +4
527fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
528fc3fe1c2SSimon Glass                 function                                   old     new   delta
529fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
530fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
531fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
532fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
533fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
534fc3fe1c2SSimon Glass            seaboard       :  all -9  bss -28  rodata -29  text +48
535fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56)
536fc3fe1c2SSimon Glass                 function                                   old     new   delta
537fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
538fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
539fc3fe1c2SSimon Glass                 ext4fs_read_file                           548     568     +20
540fc3fe1c2SSimon Glass                 run_list_real                             1996    2000      +4
541fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
542fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
543fc3fe1c2SSimon Glass            colibri_t20_iris:  all -9  rodata -29  text +20
544fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28)
545fc3fe1c2SSimon Glass                 function                                   old     new   delta
546fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
547fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
548fc3fe1c2SSimon Glass                 read_abs_bbt                               204     208      +4
549fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
550fc3fe1c2SSimon Glass                 ext4fs_read_file                           576     568      -8
551fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
552fc3fe1c2SSimon Glass            ventana        :  all -37  bss -12  rodata -29  text +4
553fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
554fc3fe1c2SSimon Glass                 function                                   old     new   delta
555fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
556fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
557fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
558fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
559fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
560fc3fe1c2SSimon Glass            harmony        :  all -37  bss -16  rodata -29  text +8
561fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16)
562fc3fe1c2SSimon Glass                 function                                   old     new   delta
563fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
564fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
565fc3fe1c2SSimon Glass                 nand_write_oob_syndrome                    428     432      +4
566fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
567fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
568fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
569fc3fe1c2SSimon Glass            medcom-wide    :  all -417  bss +28  data -16  rodata -93  text -336
570fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
571fc3fe1c2SSimon Glass                 function                                   old     new   delta
572fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
573fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
574fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
575fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
576fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
577fc3fe1c2SSimon Glass            tec            :  all -449  bss -4  data -16  rodata -93  text -336
578fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
579fc3fe1c2SSimon Glass                 function                                   old     new   delta
580fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
581fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
582fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
583fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
584fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
585fc3fe1c2SSimon Glass            plutux         :  all -481  bss +16  data -16  rodata -93  text -388
586fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340)
587fc3fe1c2SSimon Glass                 function                                   old     new   delta
588fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
589fc3fe1c2SSimon Glass                 do_load_serial_bin                        1688    1700     +12
590fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
591fc3fe1c2SSimon Glass                 do_fat_read_at                            2904    2872     -32
592fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
593fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
594fc3fe1c2SSimon Glass   powerpc: (for 5/5 boards)  all +37.4  data -3.2  rodata -41.8  text +82.4
595fc3fe1c2SSimon Glass            MPC8610HPCD    :  all +55  rodata -29  text +84
596fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
597fc3fe1c2SSimon Glass                 function                                   old     new   delta
598fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
599fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
600fc3fe1c2SSimon Glass            MPC8641HPCN    :  all +55  rodata -29  text +84
601fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
602fc3fe1c2SSimon Glass                 function                                   old     new   delta
603fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
604fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
605fc3fe1c2SSimon Glass            MPC8641HPCN_36BIT:  all +55  rodata -29  text +84
606fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
607fc3fe1c2SSimon Glass                 function                                   old     new   delta
608fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
609fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
610fc3fe1c2SSimon Glass            sbc8641d       :  all +55  rodata -29  text +84
611fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
612fc3fe1c2SSimon Glass                 function                                   old     new   delta
613fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
614fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
615fc3fe1c2SSimon Glass            xpedite517x    :  all -33  data -16  rodata -93  text +76
616fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64)
617fc3fe1c2SSimon Glass                 function                                   old     new   delta
618fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
619fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
620fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
621fc3fe1c2SSimon Glass...
622fc3fe1c2SSimon Glass
623fc3fe1c2SSimon Glass
624fc3fe1c2SSimon GlassThis shows that commit 19 has increased text size for arm (although only one
625fc3fe1c2SSimon Glassboard was built) and by 96 bytes for powerpc. This increase was offset in both
626fc3fe1c2SSimon Glasscases by reductions in rodata and data/bss.
627fc3fe1c2SSimon Glass
628fc3fe1c2SSimon GlassShown below the summary lines is the sizes for each board. Below each board
629fc3fe1c2SSimon Glassis the sizes for each function. This information starts with:
630fc3fe1c2SSimon Glass
631fc3fe1c2SSimon Glass   add - number of functions added / removed
632fc3fe1c2SSimon Glass   grow - number of functions which grew / shrunk
633fc3fe1c2SSimon Glass   bytes - number of bytes of code added to / removed from all functions,
634fc3fe1c2SSimon Glass            plus the total byte change in brackets
635fc3fe1c2SSimon Glass
636fc3fe1c2SSimon GlassThe change seems to be that hash_command() has increased by more than the
637fc3fe1c2SSimon Glassdo_mem_crc() function has decreased. The function sizes typically add up to
638fc3fe1c2SSimon Glassroughly the text area size, but note that every read-only section except
639fc3fe1c2SSimon Glassrodata is included in 'text', so the function total does not exactly
640fc3fe1c2SSimon Glasscorrespond.
641fc3fe1c2SSimon Glass
642fc3fe1c2SSimon GlassIt is common when refactoring code for the rodata to decrease as the text size
643fc3fe1c2SSimon Glassincreases, and vice versa.
644fc3fe1c2SSimon Glass
645fc3fe1c2SSimon Glass
6464281ad8eSSimon GlassProviding 'make' flags
6474281ad8eSSimon Glass======================
6484281ad8eSSimon Glass
6494281ad8eSSimon GlassU-Boot's build system supports a few flags (such as BUILD_TAG) which affect
6504281ad8eSSimon Glassthe build product. These flags can be specified in the buildman settings
6514281ad8eSSimon Glassfile. They can also be useful when building U-Boot against other open source
6524281ad8eSSimon Glasssoftware.
6534281ad8eSSimon Glass
6544281ad8eSSimon Glass[make-flags]
6554281ad8eSSimon Glassat91-boards=ENABLE_AT91_TEST=1
6564281ad8eSSimon Glasssnapper9260=${at91-boards} BUILD_TAG=442
6574281ad8eSSimon Glasssnapper9g45=${at91-boards} BUILD_TAG=443
6584281ad8eSSimon Glass
6594281ad8eSSimon GlassThis will use 'make ENABLE_AT91_TEST=1 BUILD_TAG=442' for snapper9260
66061242ac5SAndreas Bießmannand 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special
6614281ad8eSSimon Glassvariable ${target} is available to access the target name (snapper9260 and
6624281ad8eSSimon Glasssnapper9g20 in this case). Variables are resolved recursively.
6634281ad8eSSimon Glass
6644281ad8eSSimon GlassIt is expected that any variables added are dealt with in U-Boot's
6654281ad8eSSimon Glassconfig.mk file and documented in the README.
6664281ad8eSSimon Glass
6674281ad8eSSimon Glass
668*e5a0e5d8SSimon GlassQuick Sanity Check
669*e5a0e5d8SSimon Glass==================
670*e5a0e5d8SSimon Glass
671*e5a0e5d8SSimon GlassIf you have made changes and want to do a quick sanity check of the
672*e5a0e5d8SSimon Glasscurrently-checked-out source, run buildman without the -b flag. This will
673*e5a0e5d8SSimon Glassbuild the selected boards and display build status and errors as it runs
674*e5a0e5d8SSimon Glass(i.e. -v amd -e are enabled automatically).
675*e5a0e5d8SSimon Glass
676*e5a0e5d8SSimon Glass
677fc3fe1c2SSimon GlassOther options
678fc3fe1c2SSimon Glass=============
679fc3fe1c2SSimon Glass
680fc3fe1c2SSimon GlassBuildman has various other command line options. Try --help to see them.
681fc3fe1c2SSimon Glass
682fc3fe1c2SSimon Glass
6836eede34cSSimon GlassHow to change from MAKEALL
6846eede34cSSimon Glass==========================
6856eede34cSSimon Glass
6866eede34cSSimon GlassBuildman includes most of the features of MAKEALL and is generally faster
6876eede34cSSimon Glassand easier to use. In particular it builds entire branches: if a particular
6886eede34cSSimon Glasscommit introduces an error in a particular board, buildman can easily show
6896eede34cSSimon Glassyou this, even if a later commit fixes that error.
6906eede34cSSimon Glass
6916eede34cSSimon GlassThe reasons to deprecate MAKEALL are:
6926eede34cSSimon Glass- We don't want to maintain two build systems
6936eede34cSSimon Glass- Buildman is typically faster
6946eede34cSSimon Glass- Buildman has a lot more features
6956eede34cSSimon Glass
6966eede34cSSimon GlassBut still, many people will be sad to lose MAKEALL. If you are used to
6976eede34cSSimon GlassMAKEALL, here are a few pointers.
6986eede34cSSimon Glass
6996eede34cSSimon GlassFirst you need to set up your tool chains - see the 'Setting up' section
7006eede34cSSimon Glassfor details. Once you have your required toolchain(s) detected then you are
7016eede34cSSimon Glassready to go.
7026eede34cSSimon Glass
703*e5a0e5d8SSimon GlassTo build the current source tree, run buildman without a -b flag:
704*e5a0e5d8SSimon Glass
705*e5a0e5d8SSimon Glass   ./tools/buildman/buildman <list of things to build>
706*e5a0e5d8SSimon Glass
707*e5a0e5d8SSimon GlassThis will build the current source tree for the given boards and display
708*e5a0e5d8SSimon Glassthe results and errors.
709*e5a0e5d8SSimon Glass
710*e5a0e5d8SSimon GlassHowever buildman usually works on entire branches, and for that you must
711*e5a0e5d8SSimon Glassspecify a board flag:
7126eede34cSSimon Glass
7136eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> <list of things to build>
7146eede34cSSimon Glass
7156eede34cSSimon Glassfollowed by (afterwards, or perhaps concurrently in another terminal):
7166eede34cSSimon Glass
7176eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> -s <list of things to build>
7186eede34cSSimon Glass
7196eede34cSSimon Glassto see the results of the build. Rather than showing you all the output,
7206eede34cSSimon Glassbuildman just shows a summary, with red indicating that a commit introduced
7216eede34cSSimon Glassan error and green indicating that a commit fixed an error. Use the -e
7226eede34cSSimon Glassflag to see the full errors.
7236eede34cSSimon Glass
724*e5a0e5d8SSimon GlassIf you really want to see build results as they happen, use -v when doing a
725*e5a0e5d8SSimon Glassbuild (and -e if you want to see errors as well).
726*e5a0e5d8SSimon Glass
7276eede34cSSimon GlassYou don't need to stick around on that branch while buildman is running. It
7286eede34cSSimon Glasschecks out its own copy of the source code, so you can change branches,
7296eede34cSSimon Glassadd commits, etc. without affecting the build in progress.
7306eede34cSSimon Glass
7316eede34cSSimon GlassThe <list of things to build> can include board names, architectures or the
7326eede34cSSimon Glasslike. There are no flags to disambiguate since ambiguities are rare. Using
7336eede34cSSimon Glassthe examples from MAKEALL:
7346eede34cSSimon Glass
7356eede34cSSimon GlassExamples:
7366eede34cSSimon Glass  - build all Power Architecture boards:
7376eede34cSSimon Glass      MAKEALL -a powerpc
7386eede34cSSimon Glass      MAKEALL --arch powerpc
7396eede34cSSimon Glass      MAKEALL powerpc
7406eede34cSSimon Glass          ** buildman -b <branch> powerpc
7416eede34cSSimon Glass  - build all PowerPC boards manufactured by vendor "esd":
7426eede34cSSimon Glass      MAKEALL -a powerpc -v esd
7436eede34cSSimon Glass          ** buildman -b <branch> esd
7446eede34cSSimon Glass  - build all PowerPC boards manufactured either by "keymile" or "siemens":
7456eede34cSSimon Glass      MAKEALL -a powerpc -v keymile -v siemens
7466eede34cSSimon Glass          ** buildman -b <branch> keymile siemens
7476eede34cSSimon Glass  - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
7486eede34cSSimon Glass      MAKEALL -c mpc83xx -v freescale 4xx
7496eede34cSSimon Glass          ** buildman -b <branch> mpc83xx freescale 4xx
7506eede34cSSimon Glass
7516eede34cSSimon GlassBuildman automatically tries to use all the CPUs in your machine. If you
7526eede34cSSimon Glassare building a lot of boards it will use one thread for every CPU core
7536eede34cSSimon Glassit detects in your machine. This is like MAKEALL's BUILD_NBUILDS option.
7546eede34cSSimon GlassYou can use the -T flag to change the number of threads. If you are only
7556eede34cSSimon Glassbuilding a few boards, buildman will automatically run make with the -j
7566eede34cSSimon Glassflag to increase the number of concurrent make tasks. It isn't normally
7576eede34cSSimon Glassthat helpful to fiddle with this option, but if you use the BUILD_NCPUS
7586eede34cSSimon Glassoption in MAKEALL then -j is the equivalent in buildman.
7596eede34cSSimon Glass
7606eede34cSSimon GlassBuildman puts its output in ../<branch_name> by default but you can change
7616eede34cSSimon Glassthis with the -o option. Buildman normally does out-of-tree builds: use -i
7626eede34cSSimon Glassto disable that if you really want to. But be careful that once you have
7636eede34cSSimon Glassused -i you pollute buildman's copies of the source tree, and you will need
7646eede34cSSimon Glassto remove the build directory (normally ../<branch_name>) to run buildman
7656eede34cSSimon Glassin normal mode (without -i).
7666eede34cSSimon Glass
7676eede34cSSimon GlassBuildman doesn't keep the output result normally, but use the -k option to
7686eede34cSSimon Glassdo this.
7696eede34cSSimon Glass
7706eede34cSSimon GlassPlease read 'Theory of Operation' a few times as it will make a lot of
7716eede34cSSimon Glassthings clearer.
7726eede34cSSimon Glass
7736eede34cSSimon GlassSome options you might like are:
7746eede34cSSimon Glass
7756eede34cSSimon Glass   -B shows which functions are growing/shrinking in which commit - great
7766eede34cSSimon Glass        for finding code bloat.
7776eede34cSSimon Glass   -S shows image sizes for each commit (just an overall summary)
7786eede34cSSimon Glass   -u shows boards that you haven't built yet
7796eede34cSSimon Glass   --step 0 will build just the upstream commit and the last commit of your
7806eede34cSSimon Glass        branch. This is often a quick sanity check that your branch doesn't
7816eede34cSSimon Glass        break anything. But note this does not check bisectability!
7826eede34cSSimon Glass
7836eede34cSSimon Glass
784fc3fe1c2SSimon GlassTODO
785fc3fe1c2SSimon Glass====
786fc3fe1c2SSimon Glass
787fc3fe1c2SSimon GlassThis has mostly be written in my spare time as a response to my difficulties
788fc3fe1c2SSimon Glassin testing large series of patches. Apart from tidying up there is quite a
789fc3fe1c2SSimon Glassbit of scope for improvement. Things like better error diffs, easier access
790fc3fe1c2SSimon Glassto log files, error display while building. Also it would be nice it buildman
791fc3fe1c2SSimon Glasscould 'hunt' for problems, perhaps by building a few boards for each arch,
792fc3fe1c2SSimon Glassor checking commits for changed files and building only boards which use
793fc3fe1c2SSimon Glassthose files.
794fc3fe1c2SSimon Glass
795fc3fe1c2SSimon Glass
796fc3fe1c2SSimon GlassCredits
797fc3fe1c2SSimon Glass=======
798fc3fe1c2SSimon Glass
799fc3fe1c2SSimon GlassThanks to Grant Grundler <grundler@chromium.org> for his ideas for improving
800fc3fe1c2SSimon Glassthe build speed by building all commits for a board instead of the other
801fc3fe1c2SSimon Glassway around.
802fc3fe1c2SSimon Glass
803fc3fe1c2SSimon Glass
804fc3fe1c2SSimon GlassSimon Glass
805fc3fe1c2SSimon Glasssjg@chromium.org
806fc3fe1c2SSimon GlassHalloween 2012
807fc3fe1c2SSimon GlassUpdated 12-12-12
808fc3fe1c2SSimon GlassUpdated 23-02-13
809