xref: /openbmc/u-boot/tools/buildman/README (revision e8aebc47)
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
44e5a0e5d8SSimon Glassprogress information (except with -v, see below). All the output (errors,
453e1ded1fSDirk Behmewarnings and binaries if you ask for them) is stored in output
46e5a0e5d8SSimon Glassdirectories, which you can look at while the build is progressing, or when
47e5a0e5d8SSimon 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
81e5a0e5d8SSimon GlassBuildman generally builds a branch (with the -b flag), and in this case
82e5a0e5d8SSimon Glassbuilds the upstream commit as well, for comparison. It cannot build
83e5a0e5d8SSimon Glassindividual commits at present, unless (maybe) you point it at an empty
84e5a0e5d8SSimon Glassbranch. Put all your commits in a branch, set the branch's upstream to a
85e5a0e5d8SSimon Glassvalid value, and all will be well. Otherwise buildman will perform random
86e5a0e5d8SSimon Glassactions. Use -n to check what the random actions might be.
87e5a0e5d8SSimon Glass
881d8104feSSimon GlassIf you just want to build the current source tree, leave off the -b flag
891d8104feSSimon Glassand add -e. This will display results and errors as they happen. You can
901d8104feSSimon Glassstill look at them later using -se. Note that buildman will assume that the
911d8104feSSimon Glasssource has 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
1116131beabSSimon GlassWhile the default is to OR the terms together, you can also make use of
1126131beabSSimon Glassthe '&' operator to limit the selection:
1136131beabSSimon Glass
1146131beabSSimon Glass* 'freescale & arm sandbox'  All Freescale boards with ARM architecture,
1156131beabSSimon Glass                             plus sandbox
1166131beabSSimon Glass
1173cf4ae6fSSimon GlassYou can also use -x to specifically exclude some boards. For example:
1183cf4ae6fSSimon Glass
1193cf4ae6fSSimon Glass buildmand arm -x nvidia,freescale,.*ball$
1203cf4ae6fSSimon Glass
1213cf4ae6fSSimon Glassmeans to build all arm boards except nvidia, freescale and anything ending
1223cf4ae6fSSimon Glasswith 'ball'.
1233cf4ae6fSSimon Glass
1243e1ded1fSDirk BehmeIt is convenient to use the -n option to see what will be built based on
1256131beabSSimon Glassthe subset given.
1266131beabSSimon Glass
127fc3fe1c2SSimon GlassBuildman does not store intermediate object files. It optionally copies
128fc3fe1c2SSimon Glassthe binary output into a directory when a build is successful. Size
129fc3fe1c2SSimon Glassinformation is always recorded. It needs a fair bit of disk space to work,
130fc3fe1c2SSimon Glasstypically 250MB per thread.
131fc3fe1c2SSimon Glass
132fc3fe1c2SSimon Glass
133fc3fe1c2SSimon GlassSetting up
134fc3fe1c2SSimon Glass==========
135fc3fe1c2SSimon Glass
136fc3fe1c2SSimon Glass1. Get the U-Boot source. You probably already have it, but if not these
137fc3fe1c2SSimon Glasssteps should get you started with a repo and some commits for testing.
138fc3fe1c2SSimon Glass
139fc3fe1c2SSimon Glass$ cd /path/to/u-boot
140fc3fe1c2SSimon Glass$ git clone git://git.denx.de/u-boot.git .
141fc3fe1c2SSimon Glass$ git checkout -b my-branch origin/master
142fc3fe1c2SSimon Glass$ # Add some commits to the branch, reading for testing
143fc3fe1c2SSimon Glass
14462005342SSimon Glass2. Create ~/.buildman to tell buildman where to find tool chains (see 'The
14562005342SSimon Glass.buildman file' later for details). As an example:
146fc3fe1c2SSimon Glass
147fc3fe1c2SSimon Glass# Buildman settings file
148fc3fe1c2SSimon Glass
149fc3fe1c2SSimon Glass[toolchain]
150fc3fe1c2SSimon Glassroot: /
151fc3fe1c2SSimon Glassrest: /toolchains/*
152fc3fe1c2SSimon Glasseldk: /opt/eldk-4.2
153e9569478SSimon Glassarm: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux
154e9569478SSimon Glassaarch64: /opt/linaro/gcc-linaro-aarch64-none-elf-4.8-2013.10_linux
155fc3fe1c2SSimon Glass
156fc3fe1c2SSimon Glass[toolchain-alias]
157fc3fe1c2SSimon Glassx86: i386
158fc3fe1c2SSimon Glassblackfin: bfin
159fc3fe1c2SSimon Glassnds32: nds32le
160*e8aebc47SBin Mengopenrisc: or1k
161fc3fe1c2SSimon Glass
162fc3fe1c2SSimon Glass
163fc3fe1c2SSimon GlassThis selects the available toolchain paths. Add the base directory for
164fc3fe1c2SSimon Glasseach of your toolchains here. Buildman will search inside these directories
165fc3fe1c2SSimon Glassand also in any '/usr' and '/usr/bin' subdirectories.
166fc3fe1c2SSimon Glass
167fc3fe1c2SSimon GlassMake sure the tags (here root: rest: and eldk:) are unique.
168fc3fe1c2SSimon Glass
169fc3fe1c2SSimon GlassThe toolchain-alias section indicates that the i386 toolchain should be used
170fc3fe1c2SSimon Glassto build x86 commits.
171fc3fe1c2SSimon Glass
172fc3fe1c2SSimon Glass
17334699696SSimon Glass3. Make sure you have the require Python pre-requisites
17434699696SSimon Glass
175827e37b5SSimon GlassBuildman uses multiprocessing, Queue, shutil, StringIO, ConfigParser and
176827e37b5SSimon Glassurllib2. These should normally be available, but if you get an error like
177827e37b5SSimon Glassthis then you will need to obtain those modules:
17834699696SSimon Glass
17934699696SSimon Glass    ImportError: No module named multiprocessing
18034699696SSimon Glass
18134699696SSimon Glass
18234699696SSimon Glass4. Check the available toolchains
183fc3fe1c2SSimon Glass
184fc3fe1c2SSimon GlassRun this check to make sure that you have a toolchain for every architecture.
185fc3fe1c2SSimon Glass
186fc3fe1c2SSimon Glass$ ./tools/buildman/buildman --list-tool-chains
187fc3fe1c2SSimon GlassScanning for tool chains
188fc3fe1c2SSimon Glass   - scanning path '/'
189fc3fe1c2SSimon Glass      - looking in '/.'
190fc3fe1c2SSimon Glass      - looking in '/bin'
191fc3fe1c2SSimon Glass      - looking in '/usr/bin'
192fc3fe1c2SSimon Glass         - found '/usr/bin/gcc'
193fc3fe1c2SSimon GlassTool chain test:  OK
194fc3fe1c2SSimon Glass         - found '/usr/bin/c89-gcc'
195fc3fe1c2SSimon GlassTool chain test:  OK
196fc3fe1c2SSimon Glass         - found '/usr/bin/c99-gcc'
197fc3fe1c2SSimon GlassTool chain test:  OK
198fc3fe1c2SSimon Glass         - found '/usr/bin/x86_64-linux-gnu-gcc'
199fc3fe1c2SSimon GlassTool chain test:  OK
200fc3fe1c2SSimon Glass   - scanning path '/toolchains/powerpc-linux'
201fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/.'
202fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/bin'
203fc3fe1c2SSimon Glass         - found '/toolchains/powerpc-linux/bin/powerpc-linux-gcc'
204fc3fe1c2SSimon GlassTool chain test:  OK
205fc3fe1c2SSimon Glass      - looking in '/toolchains/powerpc-linux/usr/bin'
206fc3fe1c2SSimon Glass   - scanning path '/toolchains/nds32le-linux-glibc-v1f'
207fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/.'
208fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/bin'
209fc3fe1c2SSimon Glass         - found '/toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc'
210fc3fe1c2SSimon GlassTool chain test:  OK
211fc3fe1c2SSimon Glass      - looking in '/toolchains/nds32le-linux-glibc-v1f/usr/bin'
212fc3fe1c2SSimon Glass   - scanning path '/toolchains/nios2'
213fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/.'
214fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/bin'
215fc3fe1c2SSimon Glass         - found '/toolchains/nios2/bin/nios2-linux-gcc'
216fc3fe1c2SSimon GlassTool chain test:  OK
217fc3fe1c2SSimon Glass         - found '/toolchains/nios2/bin/nios2-linux-uclibc-gcc'
218fc3fe1c2SSimon GlassTool chain test:  OK
219fc3fe1c2SSimon Glass      - looking in '/toolchains/nios2/usr/bin'
220fc3fe1c2SSimon Glass         - found '/toolchains/nios2/usr/bin/nios2-linux-gcc'
221fc3fe1c2SSimon GlassTool chain test:  OK
222fc3fe1c2SSimon Glass         - found '/toolchains/nios2/usr/bin/nios2-linux-uclibc-gcc'
223fc3fe1c2SSimon GlassTool chain test:  OK
224fc3fe1c2SSimon Glass   - scanning path '/toolchains/microblaze-unknown-linux-gnu'
225fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/.'
226fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/bin'
227fc3fe1c2SSimon Glass         - found '/toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc'
228fc3fe1c2SSimon GlassTool chain test:  OK
229fc3fe1c2SSimon Glass         - found '/toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc'
230fc3fe1c2SSimon GlassTool chain test:  OK
231fc3fe1c2SSimon Glass      - looking in '/toolchains/microblaze-unknown-linux-gnu/usr/bin'
232fc3fe1c2SSimon Glass   - scanning path '/toolchains/mips-linux'
233fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/.'
234fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/bin'
235fc3fe1c2SSimon Glass         - found '/toolchains/mips-linux/bin/mips-linux-gcc'
236fc3fe1c2SSimon GlassTool chain test:  OK
237fc3fe1c2SSimon Glass      - looking in '/toolchains/mips-linux/usr/bin'
238fc3fe1c2SSimon Glass   - scanning path '/toolchains/old'
239fc3fe1c2SSimon Glass      - looking in '/toolchains/old/.'
240fc3fe1c2SSimon Glass      - looking in '/toolchains/old/bin'
241fc3fe1c2SSimon Glass      - looking in '/toolchains/old/usr/bin'
242fc3fe1c2SSimon Glass   - scanning path '/toolchains/i386-linux'
243fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/.'
244fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/bin'
245fc3fe1c2SSimon Glass         - found '/toolchains/i386-linux/bin/i386-linux-gcc'
246fc3fe1c2SSimon GlassTool chain test:  OK
247fc3fe1c2SSimon Glass      - looking in '/toolchains/i386-linux/usr/bin'
248fc3fe1c2SSimon Glass   - scanning path '/toolchains/bfin-uclinux'
249fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/.'
250fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/bin'
251fc3fe1c2SSimon Glass         - found '/toolchains/bfin-uclinux/bin/bfin-uclinux-gcc'
252fc3fe1c2SSimon GlassTool chain test:  OK
253fc3fe1c2SSimon Glass      - looking in '/toolchains/bfin-uclinux/usr/bin'
254fc3fe1c2SSimon Glass   - scanning path '/toolchains/sparc-elf'
255fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/.'
256fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/bin'
257fc3fe1c2SSimon Glass         - found '/toolchains/sparc-elf/bin/sparc-elf-gcc'
258fc3fe1c2SSimon GlassTool chain test:  OK
259fc3fe1c2SSimon Glass      - looking in '/toolchains/sparc-elf/usr/bin'
260fc3fe1c2SSimon Glass   - scanning path '/toolchains/arm-2010q1'
261fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/.'
262fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/bin'
263fc3fe1c2SSimon Glass         - found '/toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc'
264fc3fe1c2SSimon GlassTool chain test:  OK
265fc3fe1c2SSimon Glass      - looking in '/toolchains/arm-2010q1/usr/bin'
266fc3fe1c2SSimon Glass   - scanning path '/toolchains/from'
267fc3fe1c2SSimon Glass      - looking in '/toolchains/from/.'
268fc3fe1c2SSimon Glass      - looking in '/toolchains/from/bin'
269fc3fe1c2SSimon Glass      - looking in '/toolchains/from/usr/bin'
270fc3fe1c2SSimon Glass   - scanning path '/toolchains/sh4-gentoo-linux-gnu'
271fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/.'
272fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/bin'
273fc3fe1c2SSimon Glass         - found '/toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc'
274fc3fe1c2SSimon GlassTool chain test:  OK
275fc3fe1c2SSimon Glass      - looking in '/toolchains/sh4-gentoo-linux-gnu/usr/bin'
276fc3fe1c2SSimon Glass   - scanning path '/toolchains/avr32-linux'
277fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/.'
278fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/bin'
279fc3fe1c2SSimon Glass         - found '/toolchains/avr32-linux/bin/avr32-gcc'
280fc3fe1c2SSimon GlassTool chain test:  OK
281fc3fe1c2SSimon Glass      - looking in '/toolchains/avr32-linux/usr/bin'
282fc3fe1c2SSimon Glass   - scanning path '/toolchains/m68k-linux'
283fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/.'
284fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/bin'
285fc3fe1c2SSimon Glass         - found '/toolchains/m68k-linux/bin/m68k-linux-gcc'
286fc3fe1c2SSimon GlassTool chain test:  OK
287fc3fe1c2SSimon Glass      - looking in '/toolchains/m68k-linux/usr/bin'
288fc3fe1c2SSimon GlassList of available toolchains (17):
289fc3fe1c2SSimon Glassarm       : /toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
290fc3fe1c2SSimon Glassavr32     : /toolchains/avr32-linux/bin/avr32-gcc
291fc3fe1c2SSimon Glassbfin      : /toolchains/bfin-uclinux/bin/bfin-uclinux-gcc
292fc3fe1c2SSimon Glassc89       : /usr/bin/c89-gcc
293fc3fe1c2SSimon Glassc99       : /usr/bin/c99-gcc
294fc3fe1c2SSimon Glassi386      : /toolchains/i386-linux/bin/i386-linux-gcc
295fc3fe1c2SSimon Glassm68k      : /toolchains/m68k-linux/bin/m68k-linux-gcc
296fc3fe1c2SSimon Glassmb        : /toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc
297fc3fe1c2SSimon Glassmicroblaze: /toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc
298fc3fe1c2SSimon Glassmips      : /toolchains/mips-linux/bin/mips-linux-gcc
299fc3fe1c2SSimon Glassnds32le   : /toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc
300fc3fe1c2SSimon Glassnios2     : /toolchains/nios2/bin/nios2-linux-gcc
301fc3fe1c2SSimon Glasspowerpc   : /toolchains/powerpc-linux/bin/powerpc-linux-gcc
302fc3fe1c2SSimon Glasssandbox   : /usr/bin/gcc
303fc3fe1c2SSimon Glasssh4       : /toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc
304fc3fe1c2SSimon Glasssparc     : /toolchains/sparc-elf/bin/sparc-elf-gcc
305fc3fe1c2SSimon Glassx86_64    : /usr/bin/x86_64-linux-gnu-gcc
306fc3fe1c2SSimon Glass
307fc3fe1c2SSimon Glass
308fc3fe1c2SSimon GlassYou can see that everything is covered, even some strange ones that won't
309fc3fe1c2SSimon Glassbe used (c88 and c99). This is a feature.
310fc3fe1c2SSimon Glass
311fc3fe1c2SSimon Glass
312827e37b5SSimon Glass5. Install new toolchains if needed
313827e37b5SSimon Glass
314827e37b5SSimon GlassYou can download toolchains and update the [toolchain] section of the
315827e37b5SSimon Glasssettings file to find them.
316827e37b5SSimon Glass
317827e37b5SSimon GlassTo make this easier, buildman can automatically download and install
318827e37b5SSimon Glasstoolchains from kernel.org. First list the available architectures:
319827e37b5SSimon Glass
3209f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch list
321827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/
322827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/
323827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/
324827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.2.4/
325827e37b5SSimon GlassAvailable architectures: alpha am33_2.0 arm avr32 bfin cris crisv32 frv h8300
326827e37b5SSimon Glasshppa hppa64 i386 ia64 m32r m68k mips mips64 or32 powerpc powerpc64 s390x sh4
327827e37b5SSimon Glasssparc sparc64 tilegx x86_64 xtensa
328827e37b5SSimon Glass
329827e37b5SSimon GlassThen pick one and download it:
330827e37b5SSimon Glass
3319f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch or32
332827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/
333827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/
334827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/
335827e37b5SSimon GlassDownloading: 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
336827e37b5SSimon GlassUnpacking to: /home/sjg/.buildman-toolchains
337827e37b5SSimon GlassTesting
338827e37b5SSimon Glass      - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/.'
339827e37b5SSimon Glass      - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin'
340827e37b5SSimon Glass         - found '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc'
341827e37b5SSimon GlassTool chain test:  OK
342827e37b5SSimon Glass
3438951523cSThomas ChouOr download them all from kernel.org and move them to /toolchains directory,
3448951523cSThomas Chou
3458951523cSThomas Chou$ for i in aarch64 arm avr32 i386 m68k microblaze mips or32 powerpc sparc
3468951523cSThomas Chou  do
3478951523cSThomas Chou  ./tools/buildman/buildman --fetch-arch $i
3488951523cSThomas Chou  done
3498951523cSThomas Chou$ sudo mkdir -p /toolchains
3508951523cSThomas Chou$ sudo mv ~/.buildman-toolchains/*/* /toolchains/
3518951523cSThomas Chou
3528951523cSThomas ChouFor those not available from kernel.org, download from the following links.
3538951523cSThomas Chou
3548951523cSThomas Chouarc: https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/
3558951523cSThomas Chou    arc_gnu_2015.06_prebuilt_uclibc_le_archs_linux_install.tar.gz
3568951523cSThomas Choublackfin: http://sourceforge.net/projects/adi-toolchain/files/
3578951523cSThomas Chou    blackfin-toolchain-elf-gcc-4.5-2014R1_45-RC2.x86_64.tar.bz2
3588951523cSThomas Chounds32: http://osdk.andestech.com/packages/
3598951523cSThomas Chou    nds32le-linux-glibc-v1.tgz
3608951523cSThomas Chounios2: http://sourcery.mentor.com/public/gnu_toolchain/nios2-linux-gnu/
3618951523cSThomas Chou    sourceryg++-2015.11-27-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2
3628951523cSThomas Choush: http://sourcery.mentor.com/public/gnu_toolchain/sh-linux-gnu/
3638951523cSThomas Chou    renesas-4.4-200-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2
3648951523cSThomas Chou
365*e8aebc47SBin MengNote openrisc kernel.org toolchain is out of date, download latest one from
366*e8aebc47SBin Menghttp://opencores.org/or1k/OpenRISC_GNU_tool_chain#Prebuilt_versions, eg:
367*e8aebc47SBin Mengftp://ocuser:ocuser@openrisc.opencores.org/toolchain/gcc-or1k-elf-4.8.1-x86.tar.bz2.
368*e8aebc47SBin Meng
369827e37b5SSimon GlassBuildman should now be set up to use your new toolchain.
370827e37b5SSimon Glass
371827e37b5SSimon GlassAt the time of writing, U-Boot has these architectures:
372827e37b5SSimon Glass
373827e37b5SSimon Glass   arc, arm, avr32, blackfin, m68k, microblaze, mips, nds32, nios2, openrisc
374827e37b5SSimon Glass   powerpc, sandbox, sh, sparc, x86
375827e37b5SSimon Glass
3761246231cSMichal SimekOf these, only arc and nds32 are not available at kernel.org..
377827e37b5SSimon Glass
378827e37b5SSimon Glass
379fc3fe1c2SSimon GlassHow to run it
380fc3fe1c2SSimon Glass=============
381fc3fe1c2SSimon Glass
382fc3fe1c2SSimon GlassFirst do a dry run using the -n flag: (replace <branch> with a real, local
383fc3fe1c2SSimon Glassbranch with a valid upstream)
384fc3fe1c2SSimon Glass
385fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -n
386fc3fe1c2SSimon Glass
387fc3fe1c2SSimon GlassIf it can't detect the upstream branch, try checking out the branch, and
3882a9e2c6aSSimon Glassdoing something like 'git branch --set-upstream-to upstream/master'
3892a9e2c6aSSimon Glassor something similar. Buildman will try to guess a suitable upstream branch
3902a9e2c6aSSimon Glassif it can't find one (you will see a message like" Guessing upstream as ...).
391fc3fe1c2SSimon Glass
392cec83c3eSSimon GlassAs an example:
393fc3fe1c2SSimon Glass
394fc3fe1c2SSimon GlassDry run, so not doing much. But I would do this:
395fc3fe1c2SSimon Glass
396fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
397fc3fe1c2SSimon GlassBuild directory: ../lcd9b
398fc3fe1c2SSimon Glass    5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm
399fc3fe1c2SSimon Glass    c18f1b4 tegra: Use const for pinmux_config_pingroup/table()
400fc3fe1c2SSimon Glass    2f043ae tegra: Add display support to funcmux
401fc3fe1c2SSimon Glass    e349900 tegra: fdt: Add pwm binding and node
402fc3fe1c2SSimon Glass    424a5f0 tegra: fdt: Add LCD definitions for Tegra
403fc3fe1c2SSimon Glass    0636ccf tegra: Add support for PWM
404fc3fe1c2SSimon Glass    a994fe7 tegra: Add SOC support for display/lcd
405fc3fe1c2SSimon Glass    fcd7350 tegra: Add LCD driver
406fc3fe1c2SSimon Glass    4d46e9d tegra: Add LCD support to Nvidia boards
407fc3fe1c2SSimon Glass    991bd48 arm: Add control over cachability of memory regions
408fc3fe1c2SSimon Glass    54e8019 lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
409fc3fe1c2SSimon Glass    d92aff7 lcd: Add support for flushing LCD fb from dcache after update
410fc3fe1c2SSimon Glass    dbd0677 tegra: Align LCD frame buffer to section boundary
411fc3fe1c2SSimon Glass    0cff9b8 tegra: Support control of cache settings for LCD
412fc3fe1c2SSimon Glass    9c56900 tegra: fdt: Add LCD definitions for Seaboard
413fc3fe1c2SSimon Glass    5cc29db lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
414fc3fe1c2SSimon Glass    cac5a23 tegra: Enable display/lcd support on Seaboard
415fc3fe1c2SSimon Glass    49ff541 wip
416fc3fe1c2SSimon Glass
417fc3fe1c2SSimon GlassTotal boards to build for each commit: 1059
418fc3fe1c2SSimon Glass
419fc3fe1c2SSimon GlassThis shows that it will build all 1059 boards, using 4 threads (because
420fc3fe1c2SSimon Glasswe have a 4-core CPU). Each thread will run with -j1, meaning that each
421fc3fe1c2SSimon Glassmake job will use a single CPU. The list of commits to be built helps you
422fc3fe1c2SSimon Glassconfirm that things look about right. Notice that buildman has chosen a
423fc3fe1c2SSimon Glass'base' directory for you, immediately above your source tree.
424fc3fe1c2SSimon Glass
425fc3fe1c2SSimon GlassBuildman works entirely inside the base directory, here ../lcd9b,
426fc3fe1c2SSimon Glasscreating a working directory for each thread, and creating output
427fc3fe1c2SSimon Glassdirectories for each commit and board.
428fc3fe1c2SSimon Glass
429fc3fe1c2SSimon Glass
430fc3fe1c2SSimon GlassSuggested Workflow
431fc3fe1c2SSimon Glass==================
432fc3fe1c2SSimon Glass
433fc3fe1c2SSimon GlassTo run the build for real, take off the -n:
434fc3fe1c2SSimon Glass
435fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch>
436fc3fe1c2SSimon Glass
437fc3fe1c2SSimon GlassBuildman will set up some working directories, and get started. After a
438fc3fe1c2SSimon Glassminute or so it will settle down to a steady pace, with a display like this:
439fc3fe1c2SSimon Glass
440fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
441fc3fe1c2SSimon Glass  528   36  124 /19062  1:13:30  : SIMPC8313_SP
442fc3fe1c2SSimon Glass
443fc3fe1c2SSimon GlassThis means that it is building 19062 board/commit combinations. So far it
444cec83c3eSSimon Glasshas managed to successfully build 528. Another 36 have built with warnings,
445fc3fe1c2SSimon Glassand 124 more didn't build at all. Buildman expects to complete the process
446fc3fe1c2SSimon Glassin an hour and 15 minutes. Use this time to buy a faster computer.
447fc3fe1c2SSimon Glass
448fc3fe1c2SSimon Glass
449fc3fe1c2SSimon GlassTo find out how the build went, ask for a summary with -s. You can do this
4503e1ded1fSDirk Behmeeither before the build completes (presumably in another terminal) or
451fc3fe1c2SSimon Glassafterwards. Let's work through an example of how this is used:
452fc3fe1c2SSimon Glass
453fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b lcd9b -s
454fc3fe1c2SSimon Glass...
455fc3fe1c2SSimon Glass01: Merge branch 'master' of git://git.denx.de/u-boot-arm
456fc3fe1c2SSimon Glass   powerpc:   + galaxy5200_LOWBOOT
457fc3fe1c2SSimon Glass02: tegra: Use const for pinmux_config_pingroup/table()
458fc3fe1c2SSimon Glass03: tegra: Add display support to funcmux
459fc3fe1c2SSimon Glass04: tegra: fdt: Add pwm binding and node
460fc3fe1c2SSimon Glass05: tegra: fdt: Add LCD definitions for Tegra
461fc3fe1c2SSimon Glass06: tegra: Add support for PWM
462fc3fe1c2SSimon Glass07: tegra: Add SOC support for display/lcd
463fc3fe1c2SSimon Glass08: tegra: Add LCD driver
464fc3fe1c2SSimon Glass09: tegra: Add LCD support to Nvidia boards
465fc3fe1c2SSimon Glass10: arm: Add control over cachability of memory regions
466fc3fe1c2SSimon Glass11: lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
467fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
468fc3fe1c2SSimon Glass       arm:   + lubbock
469fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
470fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
471fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
472fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
473fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
474fc3fe1c2SSimon Glass18: wip
475fc3fe1c2SSimon Glass
476fc3fe1c2SSimon GlassThis shows which commits have succeeded and which have failed. In this case
477fc3fe1c2SSimon Glassthe build is still in progress so many boards are not built yet (use -u to
478fc3fe1c2SSimon Glasssee which ones). But still we can see a few failures. The galaxy5200_LOWBOOT
479fc3fe1c2SSimon Glassnever builds correctly. This could be a problem with our toolchain, or it
480fc3fe1c2SSimon Glasscould be a bug in the upstream. The good news is that we probably don't need
481fc3fe1c2SSimon Glassto blame our commits. The bad news is it isn't tested on that board.
482fc3fe1c2SSimon Glass
483fc3fe1c2SSimon GlassCommit 12 broke lubbock. That's what the '+ lubbock' means. The failure
484fc3fe1c2SSimon Glassis never fixed by a later commit, or you would see lubbock again, in green,
485fc3fe1c2SSimon Glasswithout the +.
486fc3fe1c2SSimon Glass
487fc3fe1c2SSimon GlassTo see the actual error:
488fc3fe1c2SSimon Glass
489fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -se lubbock
490fc3fe1c2SSimon Glass...
491fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
492fc3fe1c2SSimon Glass       arm:   + lubbock
493fc3fe1c2SSimon Glass+common/libcommon.o: In function `lcd_sync':
494fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
495fc3fe1c2SSimon 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
496fc3fe1c2SSimon Glass+make: *** [/u-boot/lcd9b/.bm-work/00/build/u-boot] Error 139
497fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
498fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
499fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
500fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
501fc3fe1c2SSimon Glass-/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
502fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:125: undefined reference to `flush_dcache_range'
503fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
504fc3fe1c2SSimon Glass18: wip
505fc3fe1c2SSimon Glass
506fc3fe1c2SSimon GlassSo the problem is in lcd.c, due to missing cache operations. This information
507fc3fe1c2SSimon Glassshould be enough to work out what that commit is doing to break these
508fc3fe1c2SSimon Glassboards. (In this case pxa did not have cache operations defined).
509fc3fe1c2SSimon Glass
510fc3fe1c2SSimon GlassIf you see error lines marked with - that means that the errors were fixed
511fc3fe1c2SSimon Glassby that commit. Sometimes commits can be in the wrong order, so that a
512fc3fe1c2SSimon Glassbreakage is introduced for a few commits and fixed by later commits. This
513fc3fe1c2SSimon Glassshows up clearly with buildman. You can then reorder the commits and try
514fc3fe1c2SSimon Glassagain.
515fc3fe1c2SSimon Glass
516fc3fe1c2SSimon GlassAt commit 16, the error moves - you can see that the old error at line 120
517fc3fe1c2SSimon Glassis fixed, but there is a new one at line 126. This is probably only because
5183e1ded1fSDirk Behmewe added some code and moved the broken line further down the file.
519fc3fe1c2SSimon Glass
520fc3fe1c2SSimon GlassIf many boards have the same error, then -e will display the error only
521ed966657SSimon Glassonce. This makes the output as concise as possible. To see which boards have
522ed966657SSimon Glasseach error, use -l.
523fc3fe1c2SSimon Glass
524e30965dbSSimon GlassBuildman tries to distinguish warnings from errors, and shows warning lines
525e30965dbSSimon Glassseparately with a 'w' prefix.
526e30965dbSSimon Glass
527fc3fe1c2SSimon GlassThe full build output in this case is available in:
528fc3fe1c2SSimon Glass
529fc3fe1c2SSimon Glass../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/
530fc3fe1c2SSimon Glass
531fc3fe1c2SSimon Glass   done: Indicates the build was done, and holds the return code from make.
532fc3fe1c2SSimon Glass         This is 0 for a good build, typically 2 for a failure.
533fc3fe1c2SSimon Glass
534fc3fe1c2SSimon Glass   err:  Output from stderr, if any. Errors and warnings appear here.
535fc3fe1c2SSimon Glass
536fc3fe1c2SSimon Glass   log:  Output from stdout. Normally there isn't any since buildman runs
537fc3fe1c2SSimon Glass         in silent mode for now.
538fc3fe1c2SSimon Glass
539fc3fe1c2SSimon Glass   toolchain: Shows information about the toolchain used for the build.
540fc3fe1c2SSimon Glass
541fc3fe1c2SSimon Glass   sizes: Shows image size information.
542fc3fe1c2SSimon Glass
543fc3fe1c2SSimon GlassIt is possible to get the build output there also. Use the -k option for
544fc3fe1c2SSimon Glassthis. In that case you will also see some output files, like:
545fc3fe1c2SSimon Glass
546fc3fe1c2SSimon Glass   System.map  toolchain  u-boot  u-boot.bin  u-boot.map  autoconf.mk
547fc3fe1c2SSimon Glass   (also SPL versions u-boot-spl and u-boot-spl.bin if available)
548fc3fe1c2SSimon Glass
549fc3fe1c2SSimon Glass
550fc3fe1c2SSimon GlassChecking Image Sizes
551fc3fe1c2SSimon Glass====================
552fc3fe1c2SSimon Glass
553fc3fe1c2SSimon GlassA key requirement for U-Boot is that you keep code/data size to a minimum.
554fc3fe1c2SSimon GlassWhere a new feature increases this noticeably it should normally be put
555fc3fe1c2SSimon Glassbehind a CONFIG flag so that boards can leave it off and keep the image
556fc3fe1c2SSimon Glasssize more or less the same with each new release.
557fc3fe1c2SSimon Glass
558fc3fe1c2SSimon GlassTo check the impact of your commits on image size, use -S. For example:
559fc3fe1c2SSimon Glass
560fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-x86 -sS
561fc3fe1c2SSimon GlassSummary of 10 commits for 1066 boards (4 threads, 1 job per thread)
562fc3fe1c2SSimon Glass01: MAKEALL: add support for per architecture toolchains
563fc3fe1c2SSimon Glass02: x86: Add function to get top of usable ram
564fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text -272.0  rodata +41.0
565fc3fe1c2SSimon Glass03: x86: Add basic cache operations
566fc3fe1c2SSimon Glass04: x86: Permit bootstage and timer data to be used prior to relocation
567fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  data +16.0
568fc3fe1c2SSimon Glass05: x86: Add an __end symbol to signal the end of the U-Boot binary
569fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text +76.0
570fc3fe1c2SSimon Glass06: x86: Rearrange the output input to remove BSS
571fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  bss -2140.0
572fc3fe1c2SSimon Glass07: x86: Support relocation of FDT on start-up
573fc3fe1c2SSimon Glass       x86: +   coreboot-x86
574fc3fe1c2SSimon Glass08: x86: Add error checking to x86 relocation code
575fc3fe1c2SSimon Glass09: x86: Adjust link device tree include file
576fc3fe1c2SSimon Glass10: x86: Enable CONFIG_OF_CONTROL on coreboot
577fc3fe1c2SSimon Glass
578fc3fe1c2SSimon Glass
579fc3fe1c2SSimon GlassYou can see that image size only changed on x86, which is good because this
580fc3fe1c2SSimon Glassseries is not supposed to change any other board. From commit 7 onwards the
581fc3fe1c2SSimon Glassbuild fails so we don't get code size numbers. The numbers are fractional
582fc3fe1c2SSimon Glassbecause they are an average of all boards for that architecture. The
583fc3fe1c2SSimon Glassintention is to allow you to quickly find image size problems introduced by
584fc3fe1c2SSimon Glassyour commits.
585fc3fe1c2SSimon Glass
586fc3fe1c2SSimon GlassNote that the 'text' region and 'rodata' are split out. You should add the
587fc3fe1c2SSimon Glasstwo together to get the total read-only size (reported as the first column
588fc3fe1c2SSimon Glassin the output from binutil's 'size' utility).
589fc3fe1c2SSimon Glass
590fc3fe1c2SSimon GlassA useful option is --step which lets you skip some commits. For example
591fc3fe1c2SSimon Glass--step 2 will show the image sizes for only every 2nd commit (so it will
592fc3fe1c2SSimon Glasscompare the image sizes of the 1st, 3rd, 5th... commits). You can also use
593fc3fe1c2SSimon Glass--step 0 which will compare only the first and last commits. This is useful
594fc3fe1c2SSimon Glassfor an overview of how your entire series affects code size.
595fc3fe1c2SSimon Glass
596fc3fe1c2SSimon GlassYou can also use -d to see a detailed size breakdown for each board. This
597fc3fe1c2SSimon Glasslist is sorted in order from largest growth to largest reduction.
598fc3fe1c2SSimon Glass
599fc3fe1c2SSimon GlassIt is possible to go a little further with the -B option (--bloat). This
600cec83c3eSSimon Glassshows where U-Boot has bloated, breaking the size change down to the function
601fc3fe1c2SSimon Glasslevel. Example output is below:
602fc3fe1c2SSimon Glass
603fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-mem4 -sSdB
604fc3fe1c2SSimon Glass...
605fc3fe1c2SSimon Glass19: Roll crc32 into hash infrastructure
606fc3fe1c2SSimon Glass       arm: (for 10/10 boards)  all -143.4  bss +1.2  data -4.8  rodata -48.2 text -91.6
607fc3fe1c2SSimon Glass            paz00          :  all +23  bss -4  rodata -29  text +56
608fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64)
609fc3fe1c2SSimon Glass                 function                                   old     new   delta
610fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
611fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
612fc3fe1c2SSimon Glass                 ext4fs_read_file                           540     568     +28
613fc3fe1c2SSimon Glass                 insert_var_value_sub                       688     692      +4
614fc3fe1c2SSimon Glass                 run_list_real                             1996    1992      -4
615fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
616fc3fe1c2SSimon Glass            trimslice      :  all -9  bss +16  rodata -29  text +4
617fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
618fc3fe1c2SSimon Glass                 function                                   old     new   delta
619fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
620fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
621fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
622fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
623fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
624fc3fe1c2SSimon Glass            whistler       :  all -9  bss +16  rodata -29  text +4
625fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
626fc3fe1c2SSimon Glass                 function                                   old     new   delta
627fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
628fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
629fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
630fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
631fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
632fc3fe1c2SSimon Glass            seaboard       :  all -9  bss -28  rodata -29  text +48
633fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56)
634fc3fe1c2SSimon Glass                 function                                   old     new   delta
635fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
636fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
637fc3fe1c2SSimon Glass                 ext4fs_read_file                           548     568     +20
638fc3fe1c2SSimon Glass                 run_list_real                             1996    2000      +4
639fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
640fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
641e57c6e5bSMarcel Ziswiler            colibri_t20    :  all -9  rodata -29  text +20
642fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28)
643fc3fe1c2SSimon Glass                 function                                   old     new   delta
644fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
645fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
646fc3fe1c2SSimon Glass                 read_abs_bbt                               204     208      +4
647fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
648fc3fe1c2SSimon Glass                 ext4fs_read_file                           576     568      -8
649fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
650fc3fe1c2SSimon Glass            ventana        :  all -37  bss -12  rodata -29  text +4
651fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
652fc3fe1c2SSimon Glass                 function                                   old     new   delta
653fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
654fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
655fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
656fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
657fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
658fc3fe1c2SSimon Glass            harmony        :  all -37  bss -16  rodata -29  text +8
659fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16)
660fc3fe1c2SSimon Glass                 function                                   old     new   delta
661fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
662fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
663fc3fe1c2SSimon Glass                 nand_write_oob_syndrome                    428     432      +4
664fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
665fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
666fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
667fc3fe1c2SSimon Glass            medcom-wide    :  all -417  bss +28  data -16  rodata -93  text -336
668fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
669fc3fe1c2SSimon Glass                 function                                   old     new   delta
670fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
671fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
672fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
673fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
674fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
675fc3fe1c2SSimon Glass            tec            :  all -449  bss -4  data -16  rodata -93  text -336
676fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
677fc3fe1c2SSimon Glass                 function                                   old     new   delta
678fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
679fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
680fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
681fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
682fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
683fc3fe1c2SSimon Glass            plutux         :  all -481  bss +16  data -16  rodata -93  text -388
684fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340)
685fc3fe1c2SSimon Glass                 function                                   old     new   delta
686fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
687fc3fe1c2SSimon Glass                 do_load_serial_bin                        1688    1700     +12
688fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
689fc3fe1c2SSimon Glass                 do_fat_read_at                            2904    2872     -32
690fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
691fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
692fc3fe1c2SSimon Glass   powerpc: (for 5/5 boards)  all +37.4  data -3.2  rodata -41.8  text +82.4
693fc3fe1c2SSimon Glass            MPC8610HPCD    :  all +55  rodata -29  text +84
694fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
695fc3fe1c2SSimon Glass                 function                                   old     new   delta
696fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
697fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
698fc3fe1c2SSimon Glass            MPC8641HPCN    :  all +55  rodata -29  text +84
699fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
700fc3fe1c2SSimon Glass                 function                                   old     new   delta
701fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
702fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
703fc3fe1c2SSimon Glass            MPC8641HPCN_36BIT:  all +55  rodata -29  text +84
704fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
705fc3fe1c2SSimon Glass                 function                                   old     new   delta
706fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
707fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
708fc3fe1c2SSimon Glass            sbc8641d       :  all +55  rodata -29  text +84
709fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
710fc3fe1c2SSimon Glass                 function                                   old     new   delta
711fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
712fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
713fc3fe1c2SSimon Glass            xpedite517x    :  all -33  data -16  rodata -93  text +76
714fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64)
715fc3fe1c2SSimon Glass                 function                                   old     new   delta
716fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
717fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
718fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
719fc3fe1c2SSimon Glass...
720fc3fe1c2SSimon Glass
721fc3fe1c2SSimon Glass
722fc3fe1c2SSimon GlassThis shows that commit 19 has increased text size for arm (although only one
723fc3fe1c2SSimon Glassboard was built) and by 96 bytes for powerpc. This increase was offset in both
724fc3fe1c2SSimon Glasscases by reductions in rodata and data/bss.
725fc3fe1c2SSimon Glass
7263e1ded1fSDirk BehmeShown below the summary lines are the sizes for each board. Below each board
7273e1ded1fSDirk Behmeare the sizes for each function. This information starts with:
728fc3fe1c2SSimon Glass
729fc3fe1c2SSimon Glass   add - number of functions added / removed
730fc3fe1c2SSimon Glass   grow - number of functions which grew / shrunk
731fc3fe1c2SSimon Glass   bytes - number of bytes of code added to / removed from all functions,
732fc3fe1c2SSimon Glass            plus the total byte change in brackets
733fc3fe1c2SSimon Glass
734fc3fe1c2SSimon GlassThe change seems to be that hash_command() has increased by more than the
735fc3fe1c2SSimon Glassdo_mem_crc() function has decreased. The function sizes typically add up to
736fc3fe1c2SSimon Glassroughly the text area size, but note that every read-only section except
737fc3fe1c2SSimon Glassrodata is included in 'text', so the function total does not exactly
738fc3fe1c2SSimon Glasscorrespond.
739fc3fe1c2SSimon Glass
740fc3fe1c2SSimon GlassIt is common when refactoring code for the rodata to decrease as the text size
741fc3fe1c2SSimon Glassincreases, and vice versa.
742fc3fe1c2SSimon Glass
743fc3fe1c2SSimon Glass
74462005342SSimon GlassThe .buildman file
74562005342SSimon Glass==================
7464281ad8eSSimon Glass
74762005342SSimon GlassThe .buildman file provides information about the available toolchains and
74862005342SSimon Glassalso allows build flags to be passed to 'make'. It consists of several
74962005342SSimon Glasssections, with the section name in square brackets. Within each section are
75062005342SSimon Glassa set of (tag, value) pairs.
75162005342SSimon Glass
75262005342SSimon Glass'[toolchain]' section
75362005342SSimon Glass
75462005342SSimon Glass    This lists the available toolchains. The tag here doesn't matter, but
75562005342SSimon Glass    make sure it is unique. The value is the path to the toolchain. Buildman
75662005342SSimon Glass    will look in that path for a file ending in 'gcc'. It will then execute
75762005342SSimon Glass    it to check that it is a C compiler, passing only the --version flag to
75862005342SSimon Glass    it. If the return code is 0, buildman assumes that it is a valid C
75962005342SSimon Glass    compiler. It uses the first part of the name as the architecture and
76062005342SSimon Glass    strips off the last part when setting the CROSS_COMPILE environment
76162005342SSimon Glass    variable (parts are delimited with a hyphen).
76262005342SSimon Glass
76362005342SSimon Glass    For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc'
76462005342SSimon Glass    and CROSS_COMPILE will be set to powerpc-linux- when using it.
76562005342SSimon Glass
76662005342SSimon Glass'[toolchain-alias]' section
76762005342SSimon Glass
76862005342SSimon Glass    This converts toolchain architecture names to U-Boot names. For example,
76962005342SSimon Glass    if an x86 toolchains is called i386-linux-gcc it will not normally be
7709b83bfdcSSimon Glass    used for architecture 'x86'. Adding 'x86: i386 x86_64' to this section
7719b83bfdcSSimon Glass    will tell buildman that the i386 and x86_64 toolchains can be used for
7729b83bfdcSSimon Glass    the x86 architecture.
77362005342SSimon Glass
77462005342SSimon Glass'[make-flags]' section
77562005342SSimon Glass
77662005342SSimon Glass    U-Boot's build system supports a few flags (such as BUILD_TAG) which
77762005342SSimon Glass    affect the build product. These flags can be specified in the buildman
77862005342SSimon Glass    settings file. They can also be useful when building U-Boot against other
77962005342SSimon Glass    open source software.
7804281ad8eSSimon Glass
7814281ad8eSSimon Glass    [make-flags]
7824281ad8eSSimon Glass    at91-boards=ENABLE_AT91_TEST=1
7834281ad8eSSimon Glass    snapper9260=${at91-boards} BUILD_TAG=442
7844281ad8eSSimon Glass    snapper9g45=${at91-boards} BUILD_TAG=443
7854281ad8eSSimon Glass
7864281ad8eSSimon Glass    This will use 'make ENABLE_AT91_TEST=1 BUILD_TAG=442' for snapper9260
78761242ac5SAndreas Bießmann    and 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special
78862005342SSimon Glass    variable ${target} is available to access the target name (snapper9260
78962005342SSimon Glass    and snapper9g20 in this case). Variables are resolved recursively. Note
79062005342SSimon Glass    that variables can only contain the characters A-Z, a-z, 0-9, hyphen (-)
79162005342SSimon Glass    and underscore (_).
7924281ad8eSSimon Glass
7934281ad8eSSimon Glass    It is expected that any variables added are dealt with in U-Boot's
7944281ad8eSSimon Glass    config.mk file and documented in the README.
7954281ad8eSSimon Glass
79662005342SSimon Glass    Note that you can pass ad-hoc options to the build using environment
79762005342SSimon Glass    variables, for example:
79862005342SSimon Glass
79962005342SSimon Glass       SOME_OPTION=1234 ./tools/buildman/buildman my_board
80062005342SSimon Glass
8014281ad8eSSimon Glass
802e5a0e5d8SSimon GlassQuick Sanity Check
803e5a0e5d8SSimon Glass==================
804e5a0e5d8SSimon Glass
805e5a0e5d8SSimon GlassIf you have made changes and want to do a quick sanity check of the
8061d8104feSSimon Glasscurrently checked-out source, run buildman without the -b flag. This will
8071d8104feSSimon Glassbuild the selected boards and display build status as it runs (i.e. -v is
8081d8104feSSimon Glassenabled automatically). Use -e to see errors/warnings as well.
809e5a0e5d8SSimon Glass
810e5a0e5d8SSimon Glass
8115abab20dSSimon GlassBuilding Ranges
8125abab20dSSimon Glass===============
8135abab20dSSimon Glass
8145abab20dSSimon GlassYou can build a range of commits by specifying a range instead of a branch
8155abab20dSSimon Glasswhen using the -b flag. For example:
8165abab20dSSimon Glass
8175abab20dSSimon Glass    upstream/master..us-buildman
8185abab20dSSimon Glass
8195abab20dSSimon Glasswill build commits in us-buildman that are not in upstream/master.
8205abab20dSSimon Glass
8215abab20dSSimon Glass
822fc3fe1c2SSimon GlassOther options
823fc3fe1c2SSimon Glass=============
824fc3fe1c2SSimon Glass
825fc3fe1c2SSimon GlassBuildman has various other command line options. Try --help to see them.
826fc3fe1c2SSimon Glass
8272c3deb97SSimon GlassWhen doing builds, Buildman's return code will reflect the overall result:
8282c3deb97SSimon Glass
8292c3deb97SSimon Glass    0 (success)     No errors or warnings found
8302c3deb97SSimon Glass    128             Errors found
8312c3deb97SSimon Glass    129             Warnings found
8322c3deb97SSimon Glass
833fc3fe1c2SSimon Glass
8346eede34cSSimon GlassHow to change from MAKEALL
8356eede34cSSimon Glass==========================
8366eede34cSSimon Glass
8376eede34cSSimon GlassBuildman includes most of the features of MAKEALL and is generally faster
8386eede34cSSimon Glassand easier to use. In particular it builds entire branches: if a particular
8396eede34cSSimon Glasscommit introduces an error in a particular board, buildman can easily show
8406eede34cSSimon Glassyou this, even if a later commit fixes that error.
8416eede34cSSimon Glass
8426eede34cSSimon GlassThe reasons to deprecate MAKEALL are:
8436eede34cSSimon Glass- We don't want to maintain two build systems
8446eede34cSSimon Glass- Buildman is typically faster
8456eede34cSSimon Glass- Buildman has a lot more features
8466eede34cSSimon Glass
8476eede34cSSimon GlassBut still, many people will be sad to lose MAKEALL. If you are used to
8486eede34cSSimon GlassMAKEALL, here are a few pointers.
8496eede34cSSimon Glass
8506eede34cSSimon GlassFirst you need to set up your tool chains - see the 'Setting up' section
8516eede34cSSimon Glassfor details. Once you have your required toolchain(s) detected then you are
8526eede34cSSimon Glassready to go.
8536eede34cSSimon Glass
854e5a0e5d8SSimon GlassTo build the current source tree, run buildman without a -b flag:
855e5a0e5d8SSimon Glass
856e5a0e5d8SSimon Glass   ./tools/buildman/buildman <list of things to build>
857e5a0e5d8SSimon Glass
858e5a0e5d8SSimon GlassThis will build the current source tree for the given boards and display
859e5a0e5d8SSimon Glassthe results and errors.
860e5a0e5d8SSimon Glass
861e5a0e5d8SSimon GlassHowever buildman usually works on entire branches, and for that you must
862e5a0e5d8SSimon Glassspecify a board flag:
8636eede34cSSimon Glass
8646eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> <list of things to build>
8656eede34cSSimon Glass
8666eede34cSSimon Glassfollowed by (afterwards, or perhaps concurrently in another terminal):
8676eede34cSSimon Glass
8686eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> -s <list of things to build>
8696eede34cSSimon Glass
8706eede34cSSimon Glassto see the results of the build. Rather than showing you all the output,
8716eede34cSSimon Glassbuildman just shows a summary, with red indicating that a commit introduced
8726eede34cSSimon Glassan error and green indicating that a commit fixed an error. Use the -e
873ed966657SSimon Glassflag to see the full errors and -l to see which boards caused which errors.
8746eede34cSSimon Glass
875e5a0e5d8SSimon GlassIf you really want to see build results as they happen, use -v when doing a
8761d8104feSSimon Glassbuild (and -e to see the errors/warnings too).
877e5a0e5d8SSimon Glass
8786eede34cSSimon GlassYou don't need to stick around on that branch while buildman is running. It
8796eede34cSSimon Glasschecks out its own copy of the source code, so you can change branches,
8806eede34cSSimon Glassadd commits, etc. without affecting the build in progress.
8816eede34cSSimon Glass
8826eede34cSSimon GlassThe <list of things to build> can include board names, architectures or the
8836eede34cSSimon Glasslike. There are no flags to disambiguate since ambiguities are rare. Using
8846eede34cSSimon Glassthe examples from MAKEALL:
8856eede34cSSimon Glass
8866eede34cSSimon GlassExamples:
8876eede34cSSimon Glass  - build all Power Architecture boards:
8886eede34cSSimon Glass      MAKEALL -a powerpc
8896eede34cSSimon Glass      MAKEALL --arch powerpc
8906eede34cSSimon Glass      MAKEALL powerpc
8916eede34cSSimon Glass          ** buildman -b <branch> powerpc
8926eede34cSSimon Glass  - build all PowerPC boards manufactured by vendor "esd":
8936eede34cSSimon Glass      MAKEALL -a powerpc -v esd
8946eede34cSSimon Glass          ** buildman -b <branch> esd
8956eede34cSSimon Glass  - build all PowerPC boards manufactured either by "keymile" or "siemens":
8966eede34cSSimon Glass      MAKEALL -a powerpc -v keymile -v siemens
8976eede34cSSimon Glass          ** buildman -b <branch> keymile siemens
8986eede34cSSimon Glass  - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
8996eede34cSSimon Glass      MAKEALL -c mpc83xx -v freescale 4xx
9006eede34cSSimon Glass          ** buildman -b <branch> mpc83xx freescale 4xx
9016eede34cSSimon Glass
9026eede34cSSimon GlassBuildman automatically tries to use all the CPUs in your machine. If you
9036eede34cSSimon Glassare building a lot of boards it will use one thread for every CPU core
9046eede34cSSimon Glassit detects in your machine. This is like MAKEALL's BUILD_NBUILDS option.
9056eede34cSSimon GlassYou can use the -T flag to change the number of threads. If you are only
9066eede34cSSimon Glassbuilding a few boards, buildman will automatically run make with the -j
9076eede34cSSimon Glassflag to increase the number of concurrent make tasks. It isn't normally
9086eede34cSSimon Glassthat helpful to fiddle with this option, but if you use the BUILD_NCPUS
9096eede34cSSimon Glassoption in MAKEALL then -j is the equivalent in buildman.
9106eede34cSSimon Glass
9116eede34cSSimon GlassBuildman puts its output in ../<branch_name> by default but you can change
9126eede34cSSimon Glassthis with the -o option. Buildman normally does out-of-tree builds: use -i
9136eede34cSSimon Glassto disable that if you really want to. But be careful that once you have
9146eede34cSSimon Glassused -i you pollute buildman's copies of the source tree, and you will need
9156eede34cSSimon Glassto remove the build directory (normally ../<branch_name>) to run buildman
9166eede34cSSimon Glassin normal mode (without -i).
9176eede34cSSimon Glass
9186eede34cSSimon GlassBuildman doesn't keep the output result normally, but use the -k option to
9196eede34cSSimon Glassdo this.
9206eede34cSSimon Glass
9216eede34cSSimon GlassPlease read 'Theory of Operation' a few times as it will make a lot of
9226eede34cSSimon Glassthings clearer.
9236eede34cSSimon Glass
9246eede34cSSimon GlassSome options you might like are:
9256eede34cSSimon Glass
9266eede34cSSimon Glass   -B shows which functions are growing/shrinking in which commit - great
9276eede34cSSimon Glass        for finding code bloat.
9286eede34cSSimon Glass   -S shows image sizes for each commit (just an overall summary)
9296eede34cSSimon Glass   -u shows boards that you haven't built yet
9306eede34cSSimon Glass   --step 0 will build just the upstream commit and the last commit of your
9316eede34cSSimon Glass        branch. This is often a quick sanity check that your branch doesn't
9326eede34cSSimon Glass        break anything. But note this does not check bisectability!
9336eede34cSSimon Glass
9346eede34cSSimon Glass
935fc3fe1c2SSimon GlassTODO
936fc3fe1c2SSimon Glass====
937fc3fe1c2SSimon Glass
938fc3fe1c2SSimon GlassThis has mostly be written in my spare time as a response to my difficulties
939fc3fe1c2SSimon Glassin testing large series of patches. Apart from tidying up there is quite a
9401d8104feSSimon Glassbit of scope for improvement. Things like better error diffs and easier
9413e1ded1fSDirk Behmeaccess to log files. Also it would be nice if buildman could 'hunt' for
9421d8104feSSimon Glassproblems, perhaps by building a few boards for each arch, or checking
9431d8104feSSimon Glasscommits for changed files and building only boards which use those files.
944fc3fe1c2SSimon Glass
945fc3fe1c2SSimon Glass
946fc3fe1c2SSimon GlassCredits
947fc3fe1c2SSimon Glass=======
948fc3fe1c2SSimon Glass
949fc3fe1c2SSimon GlassThanks to Grant Grundler <grundler@chromium.org> for his ideas for improving
950fc3fe1c2SSimon Glassthe build speed by building all commits for a board instead of the other
951fc3fe1c2SSimon Glassway around.
952fc3fe1c2SSimon Glass
953fc3fe1c2SSimon Glass
954fc3fe1c2SSimon GlassSimon Glass
955fc3fe1c2SSimon Glasssjg@chromium.org
956fc3fe1c2SSimon GlassHalloween 2012
957fc3fe1c2SSimon GlassUpdated 12-12-12
958fc3fe1c2SSimon GlassUpdated 23-02-13
959