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