xref: /openbmc/u-boot/tools/buildman/README (revision 00beb248)
11a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+
283d290c5STom Rini# Copyright (c) 2013 The Chromium OS Authors.
3fc3fe1c2SSimon Glass
46eede34cSSimon Glass(Please read 'How to change from MAKEALL' if you are used to that tool)
56eede34cSSimon Glass
6c8d7393bSSimon GlassQuick-start
7c8d7393bSSimon Glass===========
8c8d7393bSSimon Glass
9c8d7393bSSimon GlassIf you just want to quickly set up buildman so you can build something (for
10c8d7393bSSimon Glassexample Raspberry Pi 2):
11c8d7393bSSimon Glass
12c8d7393bSSimon Glass   cd /path/to/u-boot
13c8d7393bSSimon Glass   PATH=$PATH:`pwd`/tools/buildman
14c8d7393bSSimon Glass   buildman --fetch-arch arm
15c8d7393bSSimon Glass   buildman -k rpi_2
16c8d7393bSSimon Glass   ls ../current/rpi_2
17c8d7393bSSimon Glass   # u-boot.bin is the output image
18c8d7393bSSimon Glass
19c8d7393bSSimon Glass
20fc3fe1c2SSimon GlassWhat is this?
21fc3fe1c2SSimon Glass=============
22fc3fe1c2SSimon Glass
23fc3fe1c2SSimon GlassThis tool handles building U-Boot to check that you have not broken it
24fc3fe1c2SSimon Glasswith your patch series. It can build each individual commit and report
25fc3fe1c2SSimon Glasswhich boards fail on which commits, and which errors come up. It aims
26fc3fe1c2SSimon Glassto make full use of multi-processor machines.
27fc3fe1c2SSimon Glass
28fc3fe1c2SSimon GlassA key feature of buildman is its output summary, which allows warnings,
29fc3fe1c2SSimon Glasserrors or image size increases in a particular commit or board to be
30fc3fe1c2SSimon Glassquickly identified and the offending commit pinpointed. This can be a big
31fc3fe1c2SSimon Glasshelp for anyone working with >10 patches at a time.
32fc3fe1c2SSimon Glass
33fc3fe1c2SSimon Glass
34fc3fe1c2SSimon GlassCaveats
35fc3fe1c2SSimon Glass=======
36fc3fe1c2SSimon Glass
37fc3fe1c2SSimon GlassBuildman can be stopped and restarted, in which case it will continue
38fc3fe1c2SSimon Glasswhere it left off. This should happen cleanly and without side-effects.
39fc3fe1c2SSimon GlassIf not, it is a bug, for which a patch would be welcome.
40fc3fe1c2SSimon Glass
41fc3fe1c2SSimon GlassBuildman gets so tied up in its work that it can ignore the outside world.
42fc3fe1c2SSimon GlassYou may need to press Ctrl-C several times to quit it. Also it will print
438ea42101SSimon Glassout various exceptions when stopped. You may have to kill it since the
448ea42101SSimon GlassCtrl-C handling is somewhat broken.
45fc3fe1c2SSimon Glass
46fc3fe1c2SSimon Glass
47fc3fe1c2SSimon GlassTheory of Operation
48fc3fe1c2SSimon Glass===================
49fc3fe1c2SSimon Glass
50fc3fe1c2SSimon Glass(please read this section in full twice or you will be perpetually confused)
51fc3fe1c2SSimon Glass
52fc3fe1c2SSimon GlassBuildman is a builder. It is not make, although it runs make. It does not
53fc3fe1c2SSimon Glassproduce any useful output on the terminal while building, except for
54e5a0e5d8SSimon Glassprogress information (except with -v, see below). All the output (errors,
553e1ded1fSDirk Behmewarnings and binaries if you ask for them) is stored in output
56e5a0e5d8SSimon Glassdirectories, which you can look at while the build is progressing, or when
57e5a0e5d8SSimon Glassit is finished.
58fc3fe1c2SSimon Glass
598ea42101SSimon GlassBuildman is designed to build entire git branches, i.e. muliple commits. It
608ea42101SSimon Glasscan be run repeatedly on the same branch. In this case it will automatically
618ea42101SSimon Glassrebuild commits which have changed (and remove its old results for that
628ea42101SSimon Glasscommit). It is possible to build a branch for one board, then later build it
638ea42101SSimon Glassfor another board. If you want buildman to re-build a commit it has already
648ea42101SSimon Glassbuilt (e.g. because of a toolchain update), use the -f flag.
658ea42101SSimon Glass
66fc3fe1c2SSimon GlassBuildman produces a concise summary of which boards succeeded and failed.
67fc3fe1c2SSimon GlassIt shows which commit introduced which board failure using a simple
68fc3fe1c2SSimon Glassred/green colour coding. Full error information can be requested, in which
69fc3fe1c2SSimon Glasscase it is de-duped and displayed against the commit that introduced the
70fc3fe1c2SSimon Glasserror. An example workflow is below.
71fc3fe1c2SSimon Glass
72fc3fe1c2SSimon GlassBuildman stores image size information and can report changes in image size
73fc3fe1c2SSimon Glassfrom commit to commit. An example of this is below.
74fc3fe1c2SSimon Glass
75fc3fe1c2SSimon GlassBuildman starts multiple threads, and each thread builds for one board at
76fc3fe1c2SSimon Glassa time. A thread starts at the first commit, configures the source for your
77fc3fe1c2SSimon Glassboard and builds it. Then it checks out the next commit and does an
78fc3fe1c2SSimon Glassincremental build. Eventually the thread reaches the last commit and stops.
79fc3fe1c2SSimon GlassIf errors or warnings are found along the way, the thread will reconfigure
80fc3fe1c2SSimon Glassafter every commit, and your build will be very slow. This is because a
81fc3fe1c2SSimon Glassfile that produces just a warning would not normally be rebuilt in an
82fc3fe1c2SSimon Glassincremental build.
83fc3fe1c2SSimon Glass
84fc3fe1c2SSimon GlassBuildman works in an entirely separate place from your U-Boot repository.
85fc3fe1c2SSimon GlassIt creates a separate working directory for each thread, and puts the
86fc3fe1c2SSimon Glassoutput files in the working directory, organised by commit name and board
87fc3fe1c2SSimon Glassname, in a two-level hierarchy.
88fc3fe1c2SSimon Glass
89fc3fe1c2SSimon GlassBuildman is invoked in your U-Boot directory, the one with the .git
90fc3fe1c2SSimon Glassdirectory. It clones this repository into a copy for each thread, and the
91fc3fe1c2SSimon Glassthreads do not affect the state of your git repository. Any checkouts done
92fc3fe1c2SSimon Glassby the thread affect only the working directory for that thread.
93fc3fe1c2SSimon Glass
94fc3fe1c2SSimon GlassBuildman automatically selects the correct tool chain for each board. You
95fc3fe1c2SSimon Glassmust supply suitable tool chains, but buildman takes care of selecting the
96fc3fe1c2SSimon Glassright one.
97fc3fe1c2SSimon Glass
98e5a0e5d8SSimon GlassBuildman generally builds a branch (with the -b flag), and in this case
99e5a0e5d8SSimon Glassbuilds the upstream commit as well, for comparison. It cannot build
100e5a0e5d8SSimon Glassindividual commits at present, unless (maybe) you point it at an empty
101e5a0e5d8SSimon Glassbranch. Put all your commits in a branch, set the branch's upstream to a
102e5a0e5d8SSimon Glassvalid value, and all will be well. Otherwise buildman will perform random
103e5a0e5d8SSimon Glassactions. Use -n to check what the random actions might be.
104e5a0e5d8SSimon Glass
1051d8104feSSimon GlassIf you just want to build the current source tree, leave off the -b flag
1061d8104feSSimon Glassand add -e. This will display results and errors as they happen. You can
1071d8104feSSimon Glassstill look at them later using -se. Note that buildman will assume that the
1081d8104feSSimon Glasssource has changed, and will build all specified boards in this case.
109fc3fe1c2SSimon Glass
110fc3fe1c2SSimon GlassBuildman is optimised for building many commits at once, for many boards.
111fc3fe1c2SSimon GlassOn multi-core machines, Buildman is fast because it uses most of the
112fc3fe1c2SSimon Glassavailable CPU power. When it gets to the end, or if you are building just
113fc3fe1c2SSimon Glassa few commits or boards, it will be pretty slow. As a tip, if you don't
114fc3fe1c2SSimon Glassplan to use your machine for anything else, you can use -T to increase the
115fc3fe1c2SSimon Glassnumber of threads beyond the default.
116fc3fe1c2SSimon Glass
1170689036aSSimon Glass
1180689036aSSimon GlassSelecting which boards to build
1190689036aSSimon Glass===============================
1200689036aSSimon Glass
1218426d8b0SStephen WarrenBuildman lets you build all boards, or a subset. Specify the subset by passing
1228426d8b0SStephen Warrencommand-line arguments that list the desired board name, architecture name,
1238426d8b0SStephen WarrenSOC name, or anything else in the boards.cfg file. Multiple arguments are
1248426d8b0SStephen Warrenallowed. Each argument will be interpreted as a regular expression, so
1258426d8b0SStephen Warrenbehaviour is a superset of exact or substring matching. Examples are:
1268426d8b0SStephen Warren
1278426d8b0SStephen Warren* 'tegra20'      All boards with a Tegra20 SoC
1288426d8b0SStephen Warren* 'tegra'        All boards with any Tegra Soc (Tegra20, Tegra30, Tegra114...)
1298426d8b0SStephen Warren* '^tegra[23]0$' All boards with either Tegra20 or Tegra30 SoC
1308426d8b0SStephen Warren* 'powerpc'      All PowerPC boards
131fc3fe1c2SSimon Glass
1326131beabSSimon GlassWhile the default is to OR the terms together, you can also make use of
1336131beabSSimon Glassthe '&' operator to limit the selection:
1346131beabSSimon Glass
1356131beabSSimon Glass* 'freescale & arm sandbox'  All Freescale boards with ARM architecture,
1366131beabSSimon Glass                             plus sandbox
1376131beabSSimon Glass
1383cf4ae6fSSimon GlassYou can also use -x to specifically exclude some boards. For example:
1393cf4ae6fSSimon Glass
1403cf4ae6fSSimon Glass buildmand arm -x nvidia,freescale,.*ball$
1413cf4ae6fSSimon Glass
1423cf4ae6fSSimon Glassmeans to build all arm boards except nvidia, freescale and anything ending
1433cf4ae6fSSimon Glasswith 'ball'.
1443cf4ae6fSSimon Glass
1450689036aSSimon GlassFor building specific boards you can use the --boards option, which takes a
1460689036aSSimon Glasscomma-separated list of board target names and be used multiple times on
1470689036aSSimon Glassthe command line:
1480689036aSSimon Glass
1490689036aSSimon Glass   buidman --boards sandbox,snow --boards
1500689036aSSimon Glass
1513e1ded1fSDirk BehmeIt is convenient to use the -n option to see what will be built based on
1528d7523c5SSimon Glassthe subset given. Use -v as well to get an actual list of boards.
1536131beabSSimon Glass
154fc3fe1c2SSimon GlassBuildman does not store intermediate object files. It optionally copies
1550689036aSSimon Glassthe binary output into a directory when a build is successful (-k). Size
156fc3fe1c2SSimon Glassinformation is always recorded. It needs a fair bit of disk space to work,
157fc3fe1c2SSimon Glasstypically 250MB per thread.
158fc3fe1c2SSimon Glass
159fc3fe1c2SSimon Glass
160fc3fe1c2SSimon GlassSetting up
161fc3fe1c2SSimon Glass==========
162fc3fe1c2SSimon Glass
163fc3fe1c2SSimon Glass1. Get the U-Boot source. You probably already have it, but if not these
164fc3fe1c2SSimon Glasssteps should get you started with a repo and some commits for testing.
165fc3fe1c2SSimon Glass
166fc3fe1c2SSimon Glass$ cd /path/to/u-boot
167fc3fe1c2SSimon Glass$ git clone git://git.denx.de/u-boot.git .
168fc3fe1c2SSimon Glass$ git checkout -b my-branch origin/master
169fc3fe1c2SSimon Glass$ # Add some commits to the branch, reading for testing
170fc3fe1c2SSimon Glass
17162005342SSimon Glass2. Create ~/.buildman to tell buildman where to find tool chains (see 'The
17262005342SSimon Glass.buildman file' later for details). As an example:
173fc3fe1c2SSimon Glass
174fc3fe1c2SSimon Glass# Buildman settings file
175fc3fe1c2SSimon Glass
176fc3fe1c2SSimon Glass[toolchain]
177fc3fe1c2SSimon Glassroot: /
178fc3fe1c2SSimon Glassrest: /toolchains/*
179fc3fe1c2SSimon Glasseldk: /opt/eldk-4.2
180e9569478SSimon Glassarm: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux
181e9569478SSimon Glassaarch64: /opt/linaro/gcc-linaro-aarch64-none-elf-4.8-2013.10_linux
182fc3fe1c2SSimon Glass
183fc3fe1c2SSimon Glass[toolchain-alias]
184fc3fe1c2SSimon Glassx86: i386
185fc3fe1c2SSimon Glassblackfin: bfin
186fc3fe1c2SSimon Glassnds32: nds32le
187e8aebc47SBin Mengopenrisc: or1k
188fc3fe1c2SSimon Glass
189fc3fe1c2SSimon Glass
190fc3fe1c2SSimon GlassThis selects the available toolchain paths. Add the base directory for
191fc3fe1c2SSimon Glasseach of your toolchains here. Buildman will search inside these directories
192fc3fe1c2SSimon Glassand also in any '/usr' and '/usr/bin' subdirectories.
193fc3fe1c2SSimon Glass
194fc3fe1c2SSimon GlassMake sure the tags (here root: rest: and eldk:) are unique.
195fc3fe1c2SSimon Glass
196fc3fe1c2SSimon GlassThe toolchain-alias section indicates that the i386 toolchain should be used
197fc3fe1c2SSimon Glassto build x86 commits.
198fc3fe1c2SSimon Glass
19917bce66cSSimon GlassNote that you can also specific exactly toolchain prefixes if you like:
20017bce66cSSimon Glass
20117bce66cSSimon Glass[toolchain-prefix]
20217bce66cSSimon Glassarm: /opt/arm-eabi-4.6/bin/arm-eabi-
20317bce66cSSimon Glass
20417bce66cSSimon Glassor even:
20517bce66cSSimon Glass
20617bce66cSSimon Glass[toolchain-prefix]
20717bce66cSSimon Glassarm: /opt/arm-eabi-4.6/bin/arm-eabi-gcc
20817bce66cSSimon Glass
20917bce66cSSimon GlassThis tells buildman that you want to use this exact toolchain for the arm
21017bce66cSSimon Glassarchitecture. This will override any toolchains found by searching using the
21117bce66cSSimon Glass[toolchain] settings.
21217bce66cSSimon Glass
21317bce66cSSimon GlassSince the toolchain prefix is an explicit request, buildman will report an
21417bce66cSSimon Glasserror if a toolchain is not found with that prefix. The current PATH will be
21517bce66cSSimon Glasssearched, so it is possible to use:
21617bce66cSSimon Glass
21717bce66cSSimon Glass[toolchain-prefix]
21817bce66cSSimon Glassarm: arm-none-eabi-
21917bce66cSSimon Glass
22017bce66cSSimon Glassand buildman will find arm-none-eabi-gcc in /usr/bin if you have it installed.
221fc3fe1c2SSimon Glass
222d5fe013cSYork Sun[toolchain-wrapper]
223d5fe013cSYork Sunwrapper: ccache
224d5fe013cSYork Sun
225d5fe013cSYork SunThis tells buildman to use a compiler wrapper in front of CROSS_COMPILE. In
226d5fe013cSYork Sunthis example, ccache. It doesn't affect the toolchain scan. The wrapper is
227d5fe013cSYork Sunadded when CROSS_COMPILE environtal variable is set. The name in this
228d5fe013cSYork Sunsection is ignored. If more than one line is provided, only the last one
229d5fe013cSYork Sunis taken.
230d5fe013cSYork Sun
23134699696SSimon Glass3. Make sure you have the require Python pre-requisites
23234699696SSimon Glass
233827e37b5SSimon GlassBuildman uses multiprocessing, Queue, shutil, StringIO, ConfigParser and
234827e37b5SSimon Glassurllib2. These should normally be available, but if you get an error like
235827e37b5SSimon Glassthis then you will need to obtain those modules:
23634699696SSimon Glass
23734699696SSimon Glass    ImportError: No module named multiprocessing
23834699696SSimon Glass
23934699696SSimon Glass
24034699696SSimon Glass4. Check the available toolchains
241fc3fe1c2SSimon Glass
242fc3fe1c2SSimon GlassRun this check to make sure that you have a toolchain for every architecture.
243fc3fe1c2SSimon Glass
244fc3fe1c2SSimon Glass$ ./tools/buildman/buildman --list-tool-chains
245fc3fe1c2SSimon GlassScanning for tool chains
24617bce66cSSimon Glass   - scanning prefix '/opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-'
24717bce66cSSimon GlassTool chain test:  OK, arch='x86', priority 1
24817bce66cSSimon Glass   - scanning prefix '/opt/arm-eabi-4.6/bin/arm-eabi-'
24917bce66cSSimon GlassTool chain test:  OK, arch='arm', priority 1
25017bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/i386-linux'
25117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/.'
25217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin'
25317bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc'
25417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/usr/bin'
25517bce66cSSimon GlassTool chain test:  OK, arch='i386', priority 4
25617bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/aarch64-linux'
25717bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/.'
25817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin'
25917bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc'
26017bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/usr/bin'
26117bce66cSSimon GlassTool chain test:  OK, arch='aarch64', priority 4
26217bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/microblaze-linux'
26317bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/.'
26417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin'
26517bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc'
26617bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/usr/bin'
26717bce66cSSimon GlassTool chain test:  OK, arch='microblaze', priority 4
26817bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/mips64-linux'
26917bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/.'
27017bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin'
27117bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc'
27217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/usr/bin'
27317bce66cSSimon GlassTool chain test:  OK, arch='mips64', priority 4
27417bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc64-linux'
27517bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/.'
27617bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin'
27717bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc'
27817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/usr/bin'
27917bce66cSSimon GlassTool chain test:  OK, arch='sparc64', priority 4
28017bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi'
28117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/.'
28217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin'
28317bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc'
28417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/usr/bin'
28517bce66cSSimon GlassTool chain test:  OK, arch='arm', priority 3
28617bce66cSSimon GlassToolchain '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc' at priority 3 will be ignored because another toolchain for arch 'arm' has priority 1
28717bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc-linux'
28817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/.'
28917bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin'
29017bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc'
29117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/usr/bin'
29217bce66cSSimon GlassTool chain test:  OK, arch='sparc', priority 4
29317bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/mips-linux'
29417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/.'
29517bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin'
29617bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc'
29717bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/usr/bin'
29817bce66cSSimon GlassTool chain test:  OK, arch='mips', priority 4
29917bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/x86_64-linux'
30017bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/.'
30117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin'
30217bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc'
30317bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc'
30417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/usr/bin'
30517bce66cSSimon GlassTool chain test:  OK, arch='x86_64', priority 4
30617bce66cSSimon GlassTool chain test:  OK, arch='x86_64', priority 4
30717bce66cSSimon GlassToolchain '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4
30817bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/m68k-linux'
30917bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/.'
31017bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin'
31117bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc'
31217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/usr/bin'
31317bce66cSSimon GlassTool chain test:  OK, arch='m68k', priority 4
31417bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.9.0-nolibc/powerpc-linux'
31517bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/.'
31617bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin'
31717bce66cSSimon Glass         - found '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
31817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/usr/bin'
31917bce66cSSimon GlassTool chain test:  OK, arch='powerpc', priority 4
32017bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux'
32117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/.'
32217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin'
32317bce66cSSimon Glass         - found '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc'
32417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/usr/bin'
32517bce66cSSimon GlassTool chain test:  OK, arch='bfin', priority 6
32617bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.6.3-nolibc/sparc-linux'
32717bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/.'
32817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin'
32917bce66cSSimon Glass         - found '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc'
33017bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/usr/bin'
33117bce66cSSimon GlassTool chain test:  OK, arch='sparc', priority 4
33217bce66cSSimon GlassToolchain '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'sparc' has priority 4
33317bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.6.3-nolibc/mips-linux'
33417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/.'
33517bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin'
33617bce66cSSimon Glass         - found '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc'
33717bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/usr/bin'
33817bce66cSSimon GlassTool chain test:  OK, arch='mips', priority 4
33917bce66cSSimon GlassToolchain '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'mips' has priority 4
34017bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.6.3-nolibc/m68k-linux'
34117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/.'
34217bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin'
34317bce66cSSimon Glass         - found '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc'
34417bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/usr/bin'
34517bce66cSSimon GlassTool chain test:  OK, arch='m68k', priority 4
34617bce66cSSimon GlassToolchain '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'm68k' has priority 4
34717bce66cSSimon Glass   - scanning path '/toolchains/gcc-4.6.3-nolibc/powerpc-linux'
34817bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/.'
34917bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin'
35017bce66cSSimon Glass         - found '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
35117bce66cSSimon Glass      - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/usr/bin'
35217bce66cSSimon GlassTool chain test:  OK, arch='powerpc', priority 4
35317bce66cSSimon GlassTool chain test:  OK, arch='or32', priority 4
354fc3fe1c2SSimon Glass   - scanning path '/'
355fc3fe1c2SSimon Glass      - looking in '/.'
356fc3fe1c2SSimon Glass      - looking in '/bin'
357fc3fe1c2SSimon Glass      - looking in '/usr/bin'
35817bce66cSSimon Glass         - found '/usr/bin/i586-mingw32msvc-gcc'
359fc3fe1c2SSimon Glass         - found '/usr/bin/c89-gcc'
360fc3fe1c2SSimon Glass         - found '/usr/bin/x86_64-linux-gnu-gcc'
36117bce66cSSimon Glass         - found '/usr/bin/gcc'
36217bce66cSSimon Glass         - found '/usr/bin/c99-gcc'
36317bce66cSSimon Glass         - found '/usr/bin/arm-linux-gnueabi-gcc'
36417bce66cSSimon Glass         - found '/usr/bin/aarch64-linux-gnu-gcc'
36517bce66cSSimon Glass         - found '/usr/bin/winegcc'
36617bce66cSSimon Glass         - found '/usr/bin/arm-linux-gnueabihf-gcc'
36717bce66cSSimon GlassTool chain test:  OK, arch='i586', priority 11
36817bce66cSSimon GlassTool chain test:  OK, arch='c89', priority 11
36917bce66cSSimon GlassTool chain test:  OK, arch='x86_64', priority 4
37017bce66cSSimon GlassToolchain '/usr/bin/x86_64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4
37117bce66cSSimon GlassTool chain test:  OK, arch='sandbox', priority 11
37217bce66cSSimon GlassTool chain test:  OK, arch='c99', priority 11
37317bce66cSSimon GlassTool chain test:  OK, arch='arm', priority 4
37417bce66cSSimon GlassToolchain '/usr/bin/arm-linux-gnueabi-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1
37517bce66cSSimon GlassTool chain test:  OK, arch='aarch64', priority 4
37617bce66cSSimon GlassToolchain '/usr/bin/aarch64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'aarch64' has priority 4
37717bce66cSSimon GlassTool chain test:  OK, arch='sandbox', priority 11
37817bce66cSSimon GlassToolchain '/usr/bin/winegcc' at priority 11 will be ignored because another toolchain for arch 'sandbox' has priority 11
37917bce66cSSimon GlassTool chain test:  OK, arch='arm', priority 4
38017bce66cSSimon GlassToolchain '/usr/bin/arm-linux-gnueabihf-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1
38117bce66cSSimon GlassList of available toolchains (34):
38217bce66cSSimon Glassaarch64   : /toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc
38317bce66cSSimon Glassalpha     : /toolchains/gcc-4.9.0-nolibc/alpha-linux/bin/alpha-linux-gcc
38417bce66cSSimon Glassam33_2.0  : /toolchains/gcc-4.9.0-nolibc/am33_2.0-linux/bin/am33_2.0-linux-gcc
38517bce66cSSimon Glassarm       : /opt/arm-eabi-4.6/bin/arm-eabi-gcc
38617bce66cSSimon Glassbfin      : /toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc
387fc3fe1c2SSimon Glassc89       : /usr/bin/c89-gcc
388fc3fe1c2SSimon Glassc99       : /usr/bin/c99-gcc
38917bce66cSSimon Glassfrv       : /toolchains/gcc-4.9.0-nolibc/frv-linux/bin/frv-linux-gcc
39017bce66cSSimon Glassh8300     : /toolchains/gcc-4.9.0-nolibc/h8300-elf/bin/h8300-elf-gcc
39117bce66cSSimon Glasshppa      : /toolchains/gcc-4.9.0-nolibc/hppa-linux/bin/hppa-linux-gcc
39217bce66cSSimon Glasshppa64    : /toolchains/gcc-4.9.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc
39317bce66cSSimon Glassi386      : /toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc
39417bce66cSSimon Glassi586      : /usr/bin/i586-mingw32msvc-gcc
39517bce66cSSimon Glassia64      : /toolchains/gcc-4.9.0-nolibc/ia64-linux/bin/ia64-linux-gcc
39617bce66cSSimon Glassm32r      : /toolchains/gcc-4.9.0-nolibc/m32r-linux/bin/m32r-linux-gcc
39717bce66cSSimon Glassm68k      : /toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc
39817bce66cSSimon Glassmicroblaze: /toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc
39917bce66cSSimon Glassmips      : /toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc
40017bce66cSSimon Glassmips64    : /toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc
40117bce66cSSimon Glassor32      : /toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc
40217bce66cSSimon Glasspowerpc   : /toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc
40317bce66cSSimon Glasspowerpc64 : /toolchains/gcc-4.9.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc
40417bce66cSSimon Glassppc64le   : /toolchains/gcc-4.9.0-nolibc/ppc64le-linux/bin/ppc64le-linux-gcc
40517bce66cSSimon Glasss390x     : /toolchains/gcc-4.9.0-nolibc/s390x-linux/bin/s390x-linux-gcc
406fc3fe1c2SSimon Glasssandbox   : /usr/bin/gcc
40717bce66cSSimon Glasssh4       : /toolchains/gcc-4.6.3-nolibc/sh4-linux/bin/sh4-linux-gcc
40817bce66cSSimon Glasssparc     : /toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc
40917bce66cSSimon Glasssparc64   : /toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc
41017bce66cSSimon Glasstilegx    : /toolchains/gcc-4.6.2-nolibc/tilegx-linux/bin/tilegx-linux-gcc
41117bce66cSSimon Glassx86       : /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-gcc
41217bce66cSSimon Glassx86_64    : /toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc
413fc3fe1c2SSimon Glass
414fc3fe1c2SSimon Glass
415fc3fe1c2SSimon GlassYou can see that everything is covered, even some strange ones that won't
416fc3fe1c2SSimon Glassbe used (c88 and c99). This is a feature.
417fc3fe1c2SSimon Glass
418fc3fe1c2SSimon Glass
419827e37b5SSimon Glass5. Install new toolchains if needed
420827e37b5SSimon Glass
421827e37b5SSimon GlassYou can download toolchains and update the [toolchain] section of the
422827e37b5SSimon Glasssettings file to find them.
423827e37b5SSimon Glass
424827e37b5SSimon GlassTo make this easier, buildman can automatically download and install
425827e37b5SSimon Glasstoolchains from kernel.org. First list the available architectures:
426827e37b5SSimon Glass
4279f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch list
428827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/
429827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/
430827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/
431827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.2.4/
432daab59acSAndy ShevchenkoAvailable architectures: alpha am33_2.0 arm bfin cris crisv32 frv h8300
433827e37b5SSimon Glasshppa hppa64 i386 ia64 m32r m68k mips mips64 or32 powerpc powerpc64 s390x sh4
434827e37b5SSimon Glasssparc sparc64 tilegx x86_64 xtensa
435827e37b5SSimon Glass
436827e37b5SSimon GlassThen pick one and download it:
437827e37b5SSimon Glass
4389f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch or32
439827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/
440827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/
441827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/
442827e37b5SSimon 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
443827e37b5SSimon GlassUnpacking to: /home/sjg/.buildman-toolchains
444827e37b5SSimon GlassTesting
445827e37b5SSimon Glass      - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/.'
446827e37b5SSimon Glass      - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin'
447827e37b5SSimon Glass         - found '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc'
448827e37b5SSimon GlassTool chain test:  OK
449827e37b5SSimon Glass
4508951523cSThomas ChouOr download them all from kernel.org and move them to /toolchains directory,
4518951523cSThomas Chou
4528ea42101SSimon Glass$ ./tools/buildman/buildman --fetch-arch all
4538951523cSThomas Chou$ sudo mkdir -p /toolchains
4548951523cSThomas Chou$ sudo mv ~/.buildman-toolchains/*/* /toolchains/
4558951523cSThomas Chou
4568951523cSThomas ChouFor those not available from kernel.org, download from the following links.
4578951523cSThomas Chou
4588951523cSThomas Chouarc: https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/
459a55bed12SAlexey Brodkin    download/arc-2016.09-release/arc_gnu_2016.09_prebuilt_uclibc_le_archs_linux_install.tar.gz
4608951523cSThomas Choublackfin: http://sourceforge.net/projects/adi-toolchain/files/
4618951523cSThomas Chou    blackfin-toolchain-elf-gcc-4.5-2014R1_45-RC2.x86_64.tar.bz2
4628951523cSThomas Chounds32: http://osdk.andestech.com/packages/
4638951523cSThomas Chou    nds32le-linux-glibc-v1.tgz
4648951523cSThomas Chounios2: http://sourcery.mentor.com/public/gnu_toolchain/nios2-linux-gnu/
4658951523cSThomas Chou    sourceryg++-2015.11-27-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2
4668951523cSThomas Choush: http://sourcery.mentor.com/public/gnu_toolchain/sh-linux-gnu/
4678951523cSThomas Chou    renesas-4.4-200-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2
4688951523cSThomas Chou
4698ea42101SSimon GlassNote openrisc kernel.org toolchain is out of date. Download the latest one from
4708ea42101SSimon Glasshttp://opencores.org/or1k/OpenRISC_GNU_tool_chain#Prebuilt_versions - eg:
471e8aebc47SBin Mengftp://ocuser:ocuser@openrisc.opencores.org/toolchain/gcc-or1k-elf-4.8.1-x86.tar.bz2.
472e8aebc47SBin Meng
473827e37b5SSimon GlassBuildman should now be set up to use your new toolchain.
474827e37b5SSimon Glass
475827e37b5SSimon GlassAt the time of writing, U-Boot has these architectures:
476827e37b5SSimon Glass
477daab59acSAndy Shevchenko   arc, arm, blackfin, m68k, microblaze, mips, nds32, nios2, openrisc
478827e37b5SSimon Glass   powerpc, sandbox, sh, sparc, x86
479827e37b5SSimon Glass
4801246231cSMichal SimekOf these, only arc and nds32 are not available at kernel.org..
481827e37b5SSimon Glass
482827e37b5SSimon Glass
483fc3fe1c2SSimon GlassHow to run it
484fc3fe1c2SSimon Glass=============
485fc3fe1c2SSimon Glass
486fc3fe1c2SSimon GlassFirst do a dry run using the -n flag: (replace <branch> with a real, local
487fc3fe1c2SSimon Glassbranch with a valid upstream)
488fc3fe1c2SSimon Glass
489fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -n
490fc3fe1c2SSimon Glass
491fc3fe1c2SSimon GlassIf it can't detect the upstream branch, try checking out the branch, and
4922a9e2c6aSSimon Glassdoing something like 'git branch --set-upstream-to upstream/master'
4932a9e2c6aSSimon Glassor something similar. Buildman will try to guess a suitable upstream branch
4942a9e2c6aSSimon Glassif it can't find one (you will see a message like" Guessing upstream as ...).
495fc3fe1c2SSimon Glass
496cec83c3eSSimon GlassAs an example:
497fc3fe1c2SSimon Glass
498fc3fe1c2SSimon GlassDry run, so not doing much. But I would do this:
499fc3fe1c2SSimon Glass
500fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
501fc3fe1c2SSimon GlassBuild directory: ../lcd9b
502fc3fe1c2SSimon Glass    5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm
503fc3fe1c2SSimon Glass    c18f1b4 tegra: Use const for pinmux_config_pingroup/table()
504fc3fe1c2SSimon Glass    2f043ae tegra: Add display support to funcmux
505fc3fe1c2SSimon Glass    e349900 tegra: fdt: Add pwm binding and node
506fc3fe1c2SSimon Glass    424a5f0 tegra: fdt: Add LCD definitions for Tegra
507fc3fe1c2SSimon Glass    0636ccf tegra: Add support for PWM
508fc3fe1c2SSimon Glass    a994fe7 tegra: Add SOC support for display/lcd
509fc3fe1c2SSimon Glass    fcd7350 tegra: Add LCD driver
510fc3fe1c2SSimon Glass    4d46e9d tegra: Add LCD support to Nvidia boards
511fc3fe1c2SSimon Glass    991bd48 arm: Add control over cachability of memory regions
512fc3fe1c2SSimon Glass    54e8019 lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
513fc3fe1c2SSimon Glass    d92aff7 lcd: Add support for flushing LCD fb from dcache after update
514fc3fe1c2SSimon Glass    dbd0677 tegra: Align LCD frame buffer to section boundary
515fc3fe1c2SSimon Glass    0cff9b8 tegra: Support control of cache settings for LCD
516fc3fe1c2SSimon Glass    9c56900 tegra: fdt: Add LCD definitions for Seaboard
517fc3fe1c2SSimon Glass    5cc29db lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
518fc3fe1c2SSimon Glass    cac5a23 tegra: Enable display/lcd support on Seaboard
519fc3fe1c2SSimon Glass    49ff541 wip
520fc3fe1c2SSimon Glass
521fc3fe1c2SSimon GlassTotal boards to build for each commit: 1059
522fc3fe1c2SSimon Glass
523fc3fe1c2SSimon GlassThis shows that it will build all 1059 boards, using 4 threads (because
524fc3fe1c2SSimon Glasswe have a 4-core CPU). Each thread will run with -j1, meaning that each
525fc3fe1c2SSimon Glassmake job will use a single CPU. The list of commits to be built helps you
526fc3fe1c2SSimon Glassconfirm that things look about right. Notice that buildman has chosen a
527fc3fe1c2SSimon Glass'base' directory for you, immediately above your source tree.
528fc3fe1c2SSimon Glass
529fc3fe1c2SSimon GlassBuildman works entirely inside the base directory, here ../lcd9b,
530fc3fe1c2SSimon Glasscreating a working directory for each thread, and creating output
531fc3fe1c2SSimon Glassdirectories for each commit and board.
532fc3fe1c2SSimon Glass
533fc3fe1c2SSimon Glass
534fc3fe1c2SSimon GlassSuggested Workflow
535fc3fe1c2SSimon Glass==================
536fc3fe1c2SSimon Glass
537fc3fe1c2SSimon GlassTo run the build for real, take off the -n:
538fc3fe1c2SSimon Glass
539fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch>
540fc3fe1c2SSimon Glass
541fc3fe1c2SSimon GlassBuildman will set up some working directories, and get started. After a
542fc3fe1c2SSimon Glassminute or so it will settle down to a steady pace, with a display like this:
543fc3fe1c2SSimon Glass
544fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread)
545fc3fe1c2SSimon Glass  528   36  124 /19062  1:13:30  : SIMPC8313_SP
546fc3fe1c2SSimon Glass
547fc3fe1c2SSimon GlassThis means that it is building 19062 board/commit combinations. So far it
548cec83c3eSSimon Glasshas managed to successfully build 528. Another 36 have built with warnings,
549fc3fe1c2SSimon Glassand 124 more didn't build at all. Buildman expects to complete the process
5508ea42101SSimon Glassin around an hour and a quarter. Use this time to buy a faster computer.
551fc3fe1c2SSimon Glass
552fc3fe1c2SSimon Glass
553fc3fe1c2SSimon GlassTo find out how the build went, ask for a summary with -s. You can do this
5543e1ded1fSDirk Behmeeither before the build completes (presumably in another terminal) or
555fc3fe1c2SSimon Glassafterwards. Let's work through an example of how this is used:
556fc3fe1c2SSimon Glass
557fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b lcd9b -s
558fc3fe1c2SSimon Glass...
559fc3fe1c2SSimon Glass01: Merge branch 'master' of git://git.denx.de/u-boot-arm
560fc3fe1c2SSimon Glass   powerpc:   + galaxy5200_LOWBOOT
561fc3fe1c2SSimon Glass02: tegra: Use const for pinmux_config_pingroup/table()
562fc3fe1c2SSimon Glass03: tegra: Add display support to funcmux
563fc3fe1c2SSimon Glass04: tegra: fdt: Add pwm binding and node
564fc3fe1c2SSimon Glass05: tegra: fdt: Add LCD definitions for Tegra
565fc3fe1c2SSimon Glass06: tegra: Add support for PWM
566fc3fe1c2SSimon Glass07: tegra: Add SOC support for display/lcd
567fc3fe1c2SSimon Glass08: tegra: Add LCD driver
568fc3fe1c2SSimon Glass09: tegra: Add LCD support to Nvidia boards
569fc3fe1c2SSimon Glass10: arm: Add control over cachability of memory regions
570fc3fe1c2SSimon Glass11: lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment
571fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
572fc3fe1c2SSimon Glass       arm:   + lubbock
573fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
574fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
575fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
576fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
577fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
578fc3fe1c2SSimon Glass18: wip
579fc3fe1c2SSimon Glass
580fc3fe1c2SSimon GlassThis shows which commits have succeeded and which have failed. In this case
581fc3fe1c2SSimon Glassthe build is still in progress so many boards are not built yet (use -u to
582fc3fe1c2SSimon Glasssee which ones). But still we can see a few failures. The galaxy5200_LOWBOOT
583fc3fe1c2SSimon Glassnever builds correctly. This could be a problem with our toolchain, or it
584fc3fe1c2SSimon Glasscould be a bug in the upstream. The good news is that we probably don't need
5858ea42101SSimon Glassto blame our commits. The bad news is that our commits are not tested on that
5868ea42101SSimon Glassboard.
587fc3fe1c2SSimon Glass
588fc3fe1c2SSimon GlassCommit 12 broke lubbock. That's what the '+ lubbock' means. The failure
589fc3fe1c2SSimon Glassis never fixed by a later commit, or you would see lubbock again, in green,
590fc3fe1c2SSimon Glasswithout the +.
591fc3fe1c2SSimon Glass
592fc3fe1c2SSimon GlassTo see the actual error:
593fc3fe1c2SSimon Glass
594fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -se lubbock
595fc3fe1c2SSimon Glass...
596fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update
597fc3fe1c2SSimon Glass       arm:   + lubbock
598fc3fe1c2SSimon Glass+common/libcommon.o: In function `lcd_sync':
599fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
600fc3fe1c2SSimon 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
601fc3fe1c2SSimon Glass+make: *** [/u-boot/lcd9b/.bm-work/00/build/u-boot] Error 139
602fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary
603fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD
604fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard
605fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console
606fc3fe1c2SSimon Glass-/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range'
607fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:125: undefined reference to `flush_dcache_range'
608fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard
609fc3fe1c2SSimon Glass18: wip
610fc3fe1c2SSimon Glass
611fc3fe1c2SSimon GlassSo the problem is in lcd.c, due to missing cache operations. This information
612fc3fe1c2SSimon Glassshould be enough to work out what that commit is doing to break these
613fc3fe1c2SSimon Glassboards. (In this case pxa did not have cache operations defined).
614fc3fe1c2SSimon Glass
6158ea42101SSimon GlassIf you see error lines marked with '-', that means that the errors were fixed
616fc3fe1c2SSimon Glassby that commit. Sometimes commits can be in the wrong order, so that a
617fc3fe1c2SSimon Glassbreakage is introduced for a few commits and fixed by later commits. This
618fc3fe1c2SSimon Glassshows up clearly with buildman. You can then reorder the commits and try
619fc3fe1c2SSimon Glassagain.
620fc3fe1c2SSimon Glass
6218ea42101SSimon GlassAt commit 16, the error moves: you can see that the old error at line 120
622fc3fe1c2SSimon Glassis fixed, but there is a new one at line 126. This is probably only because
6233e1ded1fSDirk Behmewe added some code and moved the broken line further down the file.
624fc3fe1c2SSimon Glass
625fc3fe1c2SSimon GlassIf many boards have the same error, then -e will display the error only
626ed966657SSimon Glassonce. This makes the output as concise as possible. To see which boards have
6278ea42101SSimon Glasseach error, use -l. So it is safe to omit the board name - you will not get
6288ea42101SSimon Glasslots of repeated output for every board.
629fc3fe1c2SSimon Glass
630e30965dbSSimon GlassBuildman tries to distinguish warnings from errors, and shows warning lines
631e30965dbSSimon Glassseparately with a 'w' prefix.
632e30965dbSSimon Glass
633fc3fe1c2SSimon GlassThe full build output in this case is available in:
634fc3fe1c2SSimon Glass
635fc3fe1c2SSimon Glass../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/
636fc3fe1c2SSimon Glass
637fc3fe1c2SSimon Glass   done: Indicates the build was done, and holds the return code from make.
638fc3fe1c2SSimon Glass         This is 0 for a good build, typically 2 for a failure.
639fc3fe1c2SSimon Glass
640fc3fe1c2SSimon Glass   err:  Output from stderr, if any. Errors and warnings appear here.
641fc3fe1c2SSimon Glass
642fc3fe1c2SSimon Glass   log:  Output from stdout. Normally there isn't any since buildman runs
643c81d0d21SSimon Glass         in silent mode. Use -V to force a verbose build (this passes V=1
644c81d0d21SSimon Glass         to 'make')
645fc3fe1c2SSimon Glass
646fc3fe1c2SSimon Glass   toolchain: Shows information about the toolchain used for the build.
647fc3fe1c2SSimon Glass
648fc3fe1c2SSimon Glass   sizes: Shows image size information.
649fc3fe1c2SSimon Glass
6508ea42101SSimon GlassIt is possible to get the build binary output there also. Use the -k option
6518ea42101SSimon Glassfor this. In that case you will also see some output files, like:
652fc3fe1c2SSimon Glass
653fc3fe1c2SSimon Glass   System.map  toolchain  u-boot  u-boot.bin  u-boot.map  autoconf.mk
654fc3fe1c2SSimon Glass   (also SPL versions u-boot-spl and u-boot-spl.bin if available)
655fc3fe1c2SSimon Glass
656fc3fe1c2SSimon Glass
657fc3fe1c2SSimon GlassChecking Image Sizes
658fc3fe1c2SSimon Glass====================
659fc3fe1c2SSimon Glass
660fc3fe1c2SSimon GlassA key requirement for U-Boot is that you keep code/data size to a minimum.
661fc3fe1c2SSimon GlassWhere a new feature increases this noticeably it should normally be put
6628ea42101SSimon Glassbehind a CONFIG flag so that boards can leave it disabled and keep the image
663fc3fe1c2SSimon Glasssize more or less the same with each new release.
664fc3fe1c2SSimon Glass
665fc3fe1c2SSimon GlassTo check the impact of your commits on image size, use -S. For example:
666fc3fe1c2SSimon Glass
667fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-x86 -sS
668fc3fe1c2SSimon GlassSummary of 10 commits for 1066 boards (4 threads, 1 job per thread)
669fc3fe1c2SSimon Glass01: MAKEALL: add support for per architecture toolchains
670fc3fe1c2SSimon Glass02: x86: Add function to get top of usable ram
671fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text -272.0  rodata +41.0
672fc3fe1c2SSimon Glass03: x86: Add basic cache operations
673fc3fe1c2SSimon Glass04: x86: Permit bootstage and timer data to be used prior to relocation
674fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  data +16.0
675fc3fe1c2SSimon Glass05: x86: Add an __end symbol to signal the end of the U-Boot binary
676fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  text +76.0
677fc3fe1c2SSimon Glass06: x86: Rearrange the output input to remove BSS
678fc3fe1c2SSimon Glass       x86: (for 1/3 boards)  bss -2140.0
679fc3fe1c2SSimon Glass07: x86: Support relocation of FDT on start-up
680fc3fe1c2SSimon Glass       x86: +   coreboot-x86
681fc3fe1c2SSimon Glass08: x86: Add error checking to x86 relocation code
682fc3fe1c2SSimon Glass09: x86: Adjust link device tree include file
683fc3fe1c2SSimon Glass10: x86: Enable CONFIG_OF_CONTROL on coreboot
684fc3fe1c2SSimon Glass
685fc3fe1c2SSimon Glass
686fc3fe1c2SSimon GlassYou can see that image size only changed on x86, which is good because this
687fc3fe1c2SSimon Glassseries is not supposed to change any other board. From commit 7 onwards the
688fc3fe1c2SSimon Glassbuild fails so we don't get code size numbers. The numbers are fractional
689fc3fe1c2SSimon Glassbecause they are an average of all boards for that architecture. The
690fc3fe1c2SSimon Glassintention is to allow you to quickly find image size problems introduced by
691fc3fe1c2SSimon Glassyour commits.
692fc3fe1c2SSimon Glass
693fc3fe1c2SSimon GlassNote that the 'text' region and 'rodata' are split out. You should add the
694fc3fe1c2SSimon Glasstwo together to get the total read-only size (reported as the first column
695fc3fe1c2SSimon Glassin the output from binutil's 'size' utility).
696fc3fe1c2SSimon Glass
697fc3fe1c2SSimon GlassA useful option is --step which lets you skip some commits. For example
698fc3fe1c2SSimon Glass--step 2 will show the image sizes for only every 2nd commit (so it will
699fc3fe1c2SSimon Glasscompare the image sizes of the 1st, 3rd, 5th... commits). You can also use
700fc3fe1c2SSimon Glass--step 0 which will compare only the first and last commits. This is useful
7018ea42101SSimon Glassfor an overview of how your entire series affects code size. It will build
7028ea42101SSimon Glassonly the upstream commit and your final branch commit.
703fc3fe1c2SSimon Glass
704fc3fe1c2SSimon GlassYou can also use -d to see a detailed size breakdown for each board. This
705fc3fe1c2SSimon Glasslist is sorted in order from largest growth to largest reduction.
706fc3fe1c2SSimon Glass
7078ea42101SSimon GlassIt is even possible to go a little further with the -B option (--bloat). This
708cec83c3eSSimon Glassshows where U-Boot has bloated, breaking the size change down to the function
709fc3fe1c2SSimon Glasslevel. Example output is below:
710fc3fe1c2SSimon Glass
711fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-mem4 -sSdB
712fc3fe1c2SSimon Glass...
713fc3fe1c2SSimon Glass19: Roll crc32 into hash infrastructure
714fc3fe1c2SSimon Glass       arm: (for 10/10 boards)  all -143.4  bss +1.2  data -4.8  rodata -48.2 text -91.6
715fc3fe1c2SSimon Glass            paz00          :  all +23  bss -4  rodata -29  text +56
716fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64)
717fc3fe1c2SSimon Glass                 function                                   old     new   delta
718fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
719fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
720fc3fe1c2SSimon Glass                 ext4fs_read_file                           540     568     +28
721fc3fe1c2SSimon Glass                 insert_var_value_sub                       688     692      +4
722fc3fe1c2SSimon Glass                 run_list_real                             1996    1992      -4
723fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
724fc3fe1c2SSimon Glass            trimslice      :  all -9  bss +16  rodata -29  text +4
725fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
726fc3fe1c2SSimon Glass                 function                                   old     new   delta
727fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
728fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
729fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
730fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
731fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
732fc3fe1c2SSimon Glass            whistler       :  all -9  bss +16  rodata -29  text +4
733fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
734fc3fe1c2SSimon Glass                 function                                   old     new   delta
735fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
736fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
737fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
738fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
739fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
740fc3fe1c2SSimon Glass            seaboard       :  all -9  bss -28  rodata -29  text +48
741fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56)
742fc3fe1c2SSimon Glass                 function                                   old     new   delta
743fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
744fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
745fc3fe1c2SSimon Glass                 ext4fs_read_file                           548     568     +20
746fc3fe1c2SSimon Glass                 run_list_real                             1996    2000      +4
747fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
748fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
749e57c6e5bSMarcel Ziswiler            colibri_t20    :  all -9  rodata -29  text +20
750fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28)
751fc3fe1c2SSimon Glass                 function                                   old     new   delta
752fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
753fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
754fc3fe1c2SSimon Glass                 read_abs_bbt                               204     208      +4
755fc3fe1c2SSimon Glass                 do_nandboot                                760     756      -4
756fc3fe1c2SSimon Glass                 ext4fs_read_file                           576     568      -8
757fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
758fc3fe1c2SSimon Glass            ventana        :  all -37  bss -12  rodata -29  text +4
759fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12)
760fc3fe1c2SSimon Glass                 function                                   old     new   delta
761fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
762fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
763fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
764fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
765fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
766fc3fe1c2SSimon Glass            harmony        :  all -37  bss -16  rodata -29  text +8
767fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16)
768fc3fe1c2SSimon Glass                 function                                   old     new   delta
769fc3fe1c2SSimon Glass                 hash_command                                80     160     +80
770fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
771fc3fe1c2SSimon Glass                 nand_write_oob_syndrome                    428     432      +4
772fc3fe1c2SSimon Glass                 ext4fs_iterate_dir                         672     668      -4
773fc3fe1c2SSimon Glass                 ext4fs_read_file                           568     548     -20
774fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
775fc3fe1c2SSimon Glass            medcom-wide    :  all -417  bss +28  data -16  rodata -93  text -336
776fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
777fc3fe1c2SSimon Glass                 function                                   old     new   delta
778fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
779fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
780fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
781fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
782fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
783fc3fe1c2SSimon Glass            tec            :  all -449  bss -4  data -16  rodata -93  text -336
784fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288)
785fc3fe1c2SSimon Glass                 function                                   old     new   delta
786fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
787fc3fe1c2SSimon Glass                 do_fat_read_at                            2872    2904     +32
788fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
789fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
790fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
791fc3fe1c2SSimon Glass            plutux         :  all -481  bss +16  data -16  rodata -93  text -388
792fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340)
793fc3fe1c2SSimon Glass                 function                                   old     new   delta
794fc3fe1c2SSimon Glass                 crc32_wd_buf                                 -      56     +56
795fc3fe1c2SSimon Glass                 do_load_serial_bin                        1688    1700     +12
796fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
797fc3fe1c2SSimon Glass                 do_fat_read_at                            2904    2872     -32
798fc3fe1c2SSimon Glass                 do_mem_crc                                 168      68    -100
799fc3fe1c2SSimon Glass                 hash_command                               420     160    -260
800fc3fe1c2SSimon Glass   powerpc: (for 5/5 boards)  all +37.4  data -3.2  rodata -41.8  text +82.4
801fc3fe1c2SSimon Glass            MPC8610HPCD    :  all +55  rodata -29  text +84
802fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
803fc3fe1c2SSimon Glass                 function                                   old     new   delta
804fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
805fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
806fc3fe1c2SSimon Glass            MPC8641HPCN    :  all +55  rodata -29  text +84
807fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
808fc3fe1c2SSimon Glass                 function                                   old     new   delta
809fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
810fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
811fc3fe1c2SSimon Glass            MPC8641HPCN_36BIT:  all +55  rodata -29  text +84
812fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
813fc3fe1c2SSimon Glass                 function                                   old     new   delta
814fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
815fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
816fc3fe1c2SSimon Glass            sbc8641d       :  all +55  rodata -29  text +84
817fc3fe1c2SSimon Glass               u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80)
818fc3fe1c2SSimon Glass                 function                                   old     new   delta
819fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
820fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
821fc3fe1c2SSimon Glass            xpedite517x    :  all -33  data -16  rodata -93  text +76
822fc3fe1c2SSimon Glass               u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64)
823fc3fe1c2SSimon Glass                 function                                   old     new   delta
824fc3fe1c2SSimon Glass                 hash_command                                 -     176    +176
825fc3fe1c2SSimon Glass                 hash_algo                                   16       -     -16
826fc3fe1c2SSimon Glass                 do_mem_crc                                 184      88     -96
827fc3fe1c2SSimon Glass...
828fc3fe1c2SSimon Glass
829fc3fe1c2SSimon Glass
8308ea42101SSimon GlassThis shows that commit 19 has reduced codesize for arm slightly and increased
8318ea42101SSimon Glassit for powerpc. This increase was offset in by reductions in rodata and
8328ea42101SSimon Glassdata/bss.
833fc3fe1c2SSimon Glass
8343e1ded1fSDirk BehmeShown below the summary lines are the sizes for each board. Below each board
8353e1ded1fSDirk Behmeare the sizes for each function. This information starts with:
836fc3fe1c2SSimon Glass
837fc3fe1c2SSimon Glass   add - number of functions added / removed
838fc3fe1c2SSimon Glass   grow - number of functions which grew / shrunk
839fc3fe1c2SSimon Glass   bytes - number of bytes of code added to / removed from all functions,
840fc3fe1c2SSimon Glass            plus the total byte change in brackets
841fc3fe1c2SSimon Glass
842fc3fe1c2SSimon GlassThe change seems to be that hash_command() has increased by more than the
843fc3fe1c2SSimon Glassdo_mem_crc() function has decreased. The function sizes typically add up to
844fc3fe1c2SSimon Glassroughly the text area size, but note that every read-only section except
845fc3fe1c2SSimon Glassrodata is included in 'text', so the function total does not exactly
846fc3fe1c2SSimon Glasscorrespond.
847fc3fe1c2SSimon Glass
848fc3fe1c2SSimon GlassIt is common when refactoring code for the rodata to decrease as the text size
849fc3fe1c2SSimon Glassincreases, and vice versa.
850fc3fe1c2SSimon Glass
851fc3fe1c2SSimon Glass
85262005342SSimon GlassThe .buildman file
85362005342SSimon Glass==================
8544281ad8eSSimon Glass
85562005342SSimon GlassThe .buildman file provides information about the available toolchains and
85662005342SSimon Glassalso allows build flags to be passed to 'make'. It consists of several
85762005342SSimon Glasssections, with the section name in square brackets. Within each section are
85862005342SSimon Glassa set of (tag, value) pairs.
85962005342SSimon Glass
86062005342SSimon Glass'[toolchain]' section
86162005342SSimon Glass
86262005342SSimon Glass    This lists the available toolchains. The tag here doesn't matter, but
86362005342SSimon Glass    make sure it is unique. The value is the path to the toolchain. Buildman
86462005342SSimon Glass    will look in that path for a file ending in 'gcc'. It will then execute
86562005342SSimon Glass    it to check that it is a C compiler, passing only the --version flag to
86662005342SSimon Glass    it. If the return code is 0, buildman assumes that it is a valid C
86762005342SSimon Glass    compiler. It uses the first part of the name as the architecture and
86862005342SSimon Glass    strips off the last part when setting the CROSS_COMPILE environment
86962005342SSimon Glass    variable (parts are delimited with a hyphen).
87062005342SSimon Glass
87162005342SSimon Glass    For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc'
87262005342SSimon Glass    and CROSS_COMPILE will be set to powerpc-linux- when using it.
87362005342SSimon Glass
87462005342SSimon Glass'[toolchain-alias]' section
87562005342SSimon Glass
87662005342SSimon Glass    This converts toolchain architecture names to U-Boot names. For example,
87762005342SSimon Glass    if an x86 toolchains is called i386-linux-gcc it will not normally be
8789b83bfdcSSimon Glass    used for architecture 'x86'. Adding 'x86: i386 x86_64' to this section
8799b83bfdcSSimon Glass    will tell buildman that the i386 and x86_64 toolchains can be used for
8809b83bfdcSSimon Glass    the x86 architecture.
88162005342SSimon Glass
88262005342SSimon Glass'[make-flags]' section
88362005342SSimon Glass
88462005342SSimon Glass    U-Boot's build system supports a few flags (such as BUILD_TAG) which
88562005342SSimon Glass    affect the build product. These flags can be specified in the buildman
88662005342SSimon Glass    settings file. They can also be useful when building U-Boot against other
88762005342SSimon Glass    open source software.
8884281ad8eSSimon Glass
8894281ad8eSSimon Glass    [make-flags]
8904281ad8eSSimon Glass    at91-boards=ENABLE_AT91_TEST=1
8914281ad8eSSimon Glass    snapper9260=${at91-boards} BUILD_TAG=442
8924281ad8eSSimon Glass    snapper9g45=${at91-boards} BUILD_TAG=443
8934281ad8eSSimon Glass
8944281ad8eSSimon Glass    This will use 'make ENABLE_AT91_TEST=1 BUILD_TAG=442' for snapper9260
89561242ac5SAndreas Bießmann    and 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special
89662005342SSimon Glass    variable ${target} is available to access the target name (snapper9260
89762005342SSimon Glass    and snapper9g20 in this case). Variables are resolved recursively. Note
89862005342SSimon Glass    that variables can only contain the characters A-Z, a-z, 0-9, hyphen (-)
89962005342SSimon Glass    and underscore (_).
9004281ad8eSSimon Glass
9014281ad8eSSimon Glass    It is expected that any variables added are dealt with in U-Boot's
9024281ad8eSSimon Glass    config.mk file and documented in the README.
9034281ad8eSSimon Glass
90462005342SSimon Glass    Note that you can pass ad-hoc options to the build using environment
90562005342SSimon Glass    variables, for example:
90662005342SSimon Glass
90762005342SSimon Glass       SOME_OPTION=1234 ./tools/buildman/buildman my_board
90862005342SSimon Glass
9094281ad8eSSimon Glass
910e5a0e5d8SSimon GlassQuick Sanity Check
911e5a0e5d8SSimon Glass==================
912e5a0e5d8SSimon Glass
913e5a0e5d8SSimon GlassIf you have made changes and want to do a quick sanity check of the
9141d8104feSSimon Glasscurrently checked-out source, run buildman without the -b flag. This will
9151d8104feSSimon Glassbuild the selected boards and display build status as it runs (i.e. -v is
9161d8104feSSimon Glassenabled automatically). Use -e to see errors/warnings as well.
917e5a0e5d8SSimon Glass
918e5a0e5d8SSimon Glass
9195abab20dSSimon GlassBuilding Ranges
9205abab20dSSimon Glass===============
9215abab20dSSimon Glass
9225abab20dSSimon GlassYou can build a range of commits by specifying a range instead of a branch
9235abab20dSSimon Glasswhen using the -b flag. For example:
9245abab20dSSimon Glass
9255abab20dSSimon Glass    upstream/master..us-buildman
9265abab20dSSimon Glass
9275abab20dSSimon Glasswill build commits in us-buildman that are not in upstream/master.
9285abab20dSSimon Glass
9295abab20dSSimon Glass
930f79f1e0cSStephen WarrenBuilding Faster
931f79f1e0cSStephen Warren===============
932f79f1e0cSStephen Warren
933f79f1e0cSStephen WarrenBy default, buildman executes 'make mrproper' prior to building the first
934f79f1e0cSStephen Warrencommit for each board. This causes everything to be built from scratch. If you
935f79f1e0cSStephen Warrentrust the build system's incremental build capabilities, you can pass the -I
936f79f1e0cSStephen Warrenflag to skip the 'make mproper' invocation, which will reduce the amount of
937f79f1e0cSStephen Warrenwork 'make' does, and hence speed up the build. This flag will speed up any
938f79f1e0cSStephen Warrenbuildman invocation, since it reduces the amount of work done on any build.
939f79f1e0cSStephen Warren
940f79f1e0cSStephen WarrenOne possible application of buildman is as part of a continual edit, build,
941f79f1e0cSStephen Warrenedit, build, ... cycle; repeatedly applying buildman to the same change or
942f79f1e0cSStephen Warrenseries of changes while making small incremental modifications to the source
943f79f1e0cSStephen Warreneach time. This provides quick feedback regarding the correctness of recent
944f79f1e0cSStephen Warrenmodifications. In this scenario, buildman's default choice of build directory
945f79f1e0cSStephen Warrencauses more build work to be performed than strictly necessary.
946f79f1e0cSStephen Warren
947f79f1e0cSStephen WarrenBy default, each buildman thread uses a single directory for all builds. When a
948f79f1e0cSStephen Warrenthread builds multiple boards, the configuration built in this directory will
949f79f1e0cSStephen Warrencycle through various different configurations, one per board built by the
950f79f1e0cSStephen Warrenthread. Variations in the configuration will force a rebuild of affected source
951f79f1e0cSStephen Warrenfiles when a thread switches between boards. Ideally, such buildman-induced
952f79f1e0cSStephen Warrenrebuilds would not happen, thus allowing the build to operate as efficiently as
953f79f1e0cSStephen Warrenthe build system and source changes allow. buildman's -P flag may be used to
954f79f1e0cSStephen Warrenenable this; -P causes each board to be built in a separate (board-specific)
955f79f1e0cSStephen Warrendirectory, thus avoiding any buildman-induced configuration changes in any
956f79f1e0cSStephen Warrenbuild directory.
957f79f1e0cSStephen Warren
958f79f1e0cSStephen WarrenU-Boot's build system embeds information such as a build timestamp into the
959f79f1e0cSStephen Warrenfinal binary. This information varies each time U-Boot is built. This causes
960f79f1e0cSStephen Warrenvarious files to be rebuilt even if no source changes are made, which in turn
961f79f1e0cSStephen Warrenrequires that the final U-Boot binary be re-linked. This unnecessary work can
962f79f1e0cSStephen Warrenbe avoided by turning off the timestamp feature. This can be achieved by
963f79f1e0cSStephen Warrensetting the SOURCE_DATE_EPOCH environment variable to 0.
964f79f1e0cSStephen Warren
965f79f1e0cSStephen WarrenCombining all of these options together yields the command-line shown below.
966f79f1e0cSStephen WarrenThis will provide the quickest possible feedback regarding the current content
967f79f1e0cSStephen Warrenof the source tree, thus allowing rapid tested evolution of the code.
968f79f1e0cSStephen Warren
969f79f1e0cSStephen Warren    SOURCE_DATE_EPOCH=0 ./tools/buildman/buildman -I -P tegra
970f79f1e0cSStephen Warren
971f79f1e0cSStephen Warren
97294d2ebe5SSimon GlassChecking configuration
97394d2ebe5SSimon Glass======================
97494d2ebe5SSimon Glass
97594d2ebe5SSimon GlassA common requirement when converting CONFIG options to Kconfig is to check
97694d2ebe5SSimon Glassthat the effective configuration has not changed due to the conversion.
97794d2ebe5SSimon GlassBuildman supports this with the -K option, used after a build. This shows
97894d2ebe5SSimon Glassdifferences in effective configuration between one commit and the next.
97994d2ebe5SSimon Glass
98094d2ebe5SSimon GlassFor example:
98194d2ebe5SSimon Glass
98294d2ebe5SSimon Glass    $ buildman -b kc4 -sK
98394d2ebe5SSimon Glass    ...
98494d2ebe5SSimon Glass    43: Convert CONFIG_SPL_USBETH_SUPPORT to Kconfig
98594d2ebe5SSimon Glass    arm:
98694d2ebe5SSimon Glass    + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
98794d2ebe5SSimon Glass    + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
98894d2ebe5SSimon Glass    + all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
98994d2ebe5SSimon Glass    am335x_evm_usbspl :
99094d2ebe5SSimon Glass    + u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
99194d2ebe5SSimon Glass    + u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
99294d2ebe5SSimon Glass    + all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
99394d2ebe5SSimon Glass    44: Convert CONFIG_SPL_USB_HOST_SUPPORT to Kconfig
99494d2ebe5SSimon Glass    ...
99594d2ebe5SSimon Glass
99694d2ebe5SSimon GlassThis shows that commit 44 enabled three new options for the board
99794d2ebe5SSimon Glassam335x_evm_usbspl which were not enabled in commit 43. There is also a
99894d2ebe5SSimon Glasssummary for 'arm' showing all the changes detected for that architecture.
99994d2ebe5SSimon GlassIn this case there is only one board with changes, so 'arm' output is the
100094d2ebe5SSimon Glasssame as 'am335x_evm_usbspl'/
100194d2ebe5SSimon Glass
100294d2ebe5SSimon GlassThe -K option uses the u-boot.cfg, spl/u-boot-spl.cfg and tpl/u-boot-tpl.cfg
100394d2ebe5SSimon Glassfiles which are produced by a build. If all you want is to check the
100494d2ebe5SSimon Glassconfiguration you can in fact avoid doing a full build, using -D. This tells
100594d2ebe5SSimon Glassbuildman to configuration U-Boot and create the .cfg files, but not actually
100694d2ebe5SSimon Glassbuild the source. This is 5-10 times faster than doing a full build.
100794d2ebe5SSimon Glass
1008b464f8e7SSimon GlassBy default buildman considers the follow two configuration methods
1009b464f8e7SSimon Glassequivalent:
1010b464f8e7SSimon Glass
1011b464f8e7SSimon Glass   #define CONFIG_SOME_OPTION
1012b464f8e7SSimon Glass
1013b464f8e7SSimon Glass   CONFIG_SOME_OPTION=y
1014b464f8e7SSimon Glass
1015b464f8e7SSimon GlassThe former would appear in a header filer and the latter in a defconfig
1016b464f8e7SSimon Glassfile. The achieve this, buildman considers 'y' to be '1' in configuration
1017b464f8e7SSimon Glassvariables. This avoids lots of useless output when converting a CONFIG
1018b464f8e7SSimon Glassoption to Kconfig. To disable this behaviour, use --squash-config-y.
1019b464f8e7SSimon Glass
102094d2ebe5SSimon Glass
102148ae4124SAlex KiernanChecking the environment
102248ae4124SAlex Kiernan========================
102348ae4124SAlex Kiernan
102448ae4124SAlex KiernanWhen converting CONFIG options which manipulate the default environment,
102548ae4124SAlex Kiernana common requirement is to check that the default environment has not
102648ae4124SAlex Kiernanchanged due to the conversion. Buildman supports this with the -U option,
102748ae4124SAlex Kiernanused after a build. This shows differences in the default environment
102848ae4124SAlex Kiernanbetween one commit and the next.
102948ae4124SAlex Kiernan
103048ae4124SAlex KiernanFor example:
103148ae4124SAlex Kiernan
103248ae4124SAlex Kiernan$ buildman -b squash brppt1 -sU
103348ae4124SAlex Kiernanboards.cfg is up to date. Nothing to do.
103448ae4124SAlex KiernanSummary of 2 commits for 3 boards (3 threads, 3 jobs per thread)
103548ae4124SAlex Kiernan01: Migrate bootlimit to Kconfig
103648ae4124SAlex Kiernan02: Squashed commit of the following:
103748ae4124SAlex Kiernan   c brppt1_mmc: altbootcmd=mmc dev 1; run mmcboot0; -> mmc dev 1; run mmcboot0
103848ae4124SAlex Kiernan   c brppt1_spi: altbootcmd=mmc dev 1; run mmcboot0; -> mmc dev 1; run mmcboot0
103948ae4124SAlex Kiernan   + brppt1_nand: altbootcmd=run usbscript
104048ae4124SAlex Kiernan   - brppt1_nand:  altbootcmd=run usbscript
104148ae4124SAlex Kiernan(no errors to report)
104248ae4124SAlex Kiernan
104348ae4124SAlex KiernanThis shows that commit 2 modified the value of 'altbootcmd' for 'brppt1_mmc'
104448ae4124SAlex Kiernanand 'brppt1_spi', removing a trailing semicolon. 'brppt1_nand' gained an a
104548ae4124SAlex Kiernanvalue for 'altbootcmd', but lost one for ' altbootcmd'.
104648ae4124SAlex Kiernan
104748ae4124SAlex KiernanThe -U option uses the u-boot.env files which are produced by a build.
104848ae4124SAlex Kiernan
1049*00beb248SSimon Glass
1050*00beb248SSimon GlassBuilding with clang
1051*00beb248SSimon Glass===================
1052*00beb248SSimon Glass
1053*00beb248SSimon GlassTo build with clang (sandbox only), use the -O option to override the
1054*00beb248SSimon Glasstoolchain. For example:
1055*00beb248SSimon Glass
1056*00beb248SSimon Glass   buildman -O clang-7 --board sandbox
1057*00beb248SSimon Glass
1058*00beb248SSimon Glass
1059fc3fe1c2SSimon GlassOther options
1060fc3fe1c2SSimon Glass=============
1061fc3fe1c2SSimon Glass
1062fc3fe1c2SSimon GlassBuildman has various other command line options. Try --help to see them.
1063fc3fe1c2SSimon Glass
10642c3deb97SSimon GlassWhen doing builds, Buildman's return code will reflect the overall result:
10652c3deb97SSimon Glass
10662c3deb97SSimon Glass    0 (success)     No errors or warnings found
10672c3deb97SSimon Glass    128             Errors found
10682c3deb97SSimon Glass    129             Warnings found
10692c3deb97SSimon Glass
1070fc3fe1c2SSimon Glass
10716eede34cSSimon GlassHow to change from MAKEALL
10726eede34cSSimon Glass==========================
10736eede34cSSimon Glass
10746eede34cSSimon GlassBuildman includes most of the features of MAKEALL and is generally faster
10756eede34cSSimon Glassand easier to use. In particular it builds entire branches: if a particular
10766eede34cSSimon Glasscommit introduces an error in a particular board, buildman can easily show
10776eede34cSSimon Glassyou this, even if a later commit fixes that error.
10786eede34cSSimon Glass
10796eede34cSSimon GlassThe reasons to deprecate MAKEALL are:
10806eede34cSSimon Glass- We don't want to maintain two build systems
10816eede34cSSimon Glass- Buildman is typically faster
10826eede34cSSimon Glass- Buildman has a lot more features
10836eede34cSSimon Glass
10846eede34cSSimon GlassBut still, many people will be sad to lose MAKEALL. If you are used to
10856eede34cSSimon GlassMAKEALL, here are a few pointers.
10866eede34cSSimon Glass
10876eede34cSSimon GlassFirst you need to set up your tool chains - see the 'Setting up' section
10886eede34cSSimon Glassfor details. Once you have your required toolchain(s) detected then you are
10896eede34cSSimon Glassready to go.
10906eede34cSSimon Glass
1091e5a0e5d8SSimon GlassTo build the current source tree, run buildman without a -b flag:
1092e5a0e5d8SSimon Glass
1093e5a0e5d8SSimon Glass   ./tools/buildman/buildman <list of things to build>
1094e5a0e5d8SSimon Glass
1095e5a0e5d8SSimon GlassThis will build the current source tree for the given boards and display
1096e5a0e5d8SSimon Glassthe results and errors.
1097e5a0e5d8SSimon Glass
1098e5a0e5d8SSimon GlassHowever buildman usually works on entire branches, and for that you must
1099e5a0e5d8SSimon Glassspecify a board flag:
11006eede34cSSimon Glass
11016eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> <list of things to build>
11026eede34cSSimon Glass
11036eede34cSSimon Glassfollowed by (afterwards, or perhaps concurrently in another terminal):
11046eede34cSSimon Glass
11056eede34cSSimon Glass   ./tools/buildman/buildman -b <branch_name> -s <list of things to build>
11066eede34cSSimon Glass
11076eede34cSSimon Glassto see the results of the build. Rather than showing you all the output,
11086eede34cSSimon Glassbuildman just shows a summary, with red indicating that a commit introduced
11096eede34cSSimon Glassan error and green indicating that a commit fixed an error. Use the -e
1110ed966657SSimon Glassflag to see the full errors and -l to see which boards caused which errors.
11116eede34cSSimon Glass
1112e5a0e5d8SSimon GlassIf you really want to see build results as they happen, use -v when doing a
11131d8104feSSimon Glassbuild (and -e to see the errors/warnings too).
1114e5a0e5d8SSimon Glass
11156eede34cSSimon GlassYou don't need to stick around on that branch while buildman is running. It
11166eede34cSSimon Glasschecks out its own copy of the source code, so you can change branches,
11176eede34cSSimon Glassadd commits, etc. without affecting the build in progress.
11186eede34cSSimon Glass
11196eede34cSSimon GlassThe <list of things to build> can include board names, architectures or the
11206eede34cSSimon Glasslike. There are no flags to disambiguate since ambiguities are rare. Using
11216eede34cSSimon Glassthe examples from MAKEALL:
11226eede34cSSimon Glass
11236eede34cSSimon GlassExamples:
11246eede34cSSimon Glass  - build all Power Architecture boards:
11256eede34cSSimon Glass      MAKEALL -a powerpc
11266eede34cSSimon Glass      MAKEALL --arch powerpc
11276eede34cSSimon Glass      MAKEALL powerpc
11286eede34cSSimon Glass          ** buildman -b <branch> powerpc
11296eede34cSSimon Glass  - build all PowerPC boards manufactured by vendor "esd":
11306eede34cSSimon Glass      MAKEALL -a powerpc -v esd
11316eede34cSSimon Glass          ** buildman -b <branch> esd
11326eede34cSSimon Glass  - build all PowerPC boards manufactured either by "keymile" or "siemens":
11336eede34cSSimon Glass      MAKEALL -a powerpc -v keymile -v siemens
11346eede34cSSimon Glass          ** buildman -b <branch> keymile siemens
11356eede34cSSimon Glass  - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
11366eede34cSSimon Glass      MAKEALL -c mpc83xx -v freescale 4xx
11376eede34cSSimon Glass          ** buildman -b <branch> mpc83xx freescale 4xx
11386eede34cSSimon Glass
11396eede34cSSimon GlassBuildman automatically tries to use all the CPUs in your machine. If you
11406eede34cSSimon Glassare building a lot of boards it will use one thread for every CPU core
11416eede34cSSimon Glassit detects in your machine. This is like MAKEALL's BUILD_NBUILDS option.
11426eede34cSSimon GlassYou can use the -T flag to change the number of threads. If you are only
11436eede34cSSimon Glassbuilding a few boards, buildman will automatically run make with the -j
11446eede34cSSimon Glassflag to increase the number of concurrent make tasks. It isn't normally
11456eede34cSSimon Glassthat helpful to fiddle with this option, but if you use the BUILD_NCPUS
11466eede34cSSimon Glassoption in MAKEALL then -j is the equivalent in buildman.
11476eede34cSSimon Glass
11486eede34cSSimon GlassBuildman puts its output in ../<branch_name> by default but you can change
11496eede34cSSimon Glassthis with the -o option. Buildman normally does out-of-tree builds: use -i
11506eede34cSSimon Glassto disable that if you really want to. But be careful that once you have
11516eede34cSSimon Glassused -i you pollute buildman's copies of the source tree, and you will need
11526eede34cSSimon Glassto remove the build directory (normally ../<branch_name>) to run buildman
11536eede34cSSimon Glassin normal mode (without -i).
11546eede34cSSimon Glass
11556eede34cSSimon GlassBuildman doesn't keep the output result normally, but use the -k option to
11566eede34cSSimon Glassdo this.
11576eede34cSSimon Glass
11586eede34cSSimon GlassPlease read 'Theory of Operation' a few times as it will make a lot of
11596eede34cSSimon Glassthings clearer.
11606eede34cSSimon Glass
11616eede34cSSimon GlassSome options you might like are:
11626eede34cSSimon Glass
11636eede34cSSimon Glass   -B shows which functions are growing/shrinking in which commit - great
11646eede34cSSimon Glass        for finding code bloat.
11656eede34cSSimon Glass   -S shows image sizes for each commit (just an overall summary)
11666eede34cSSimon Glass   -u shows boards that you haven't built yet
11676eede34cSSimon Glass   --step 0 will build just the upstream commit and the last commit of your
11686eede34cSSimon Glass        branch. This is often a quick sanity check that your branch doesn't
11696eede34cSSimon Glass        break anything. But note this does not check bisectability!
11706eede34cSSimon Glass
11716eede34cSSimon Glass
1172fc3fe1c2SSimon GlassTODO
1173fc3fe1c2SSimon Glass====
1174fc3fe1c2SSimon Glass
1175fc3fe1c2SSimon GlassThis has mostly be written in my spare time as a response to my difficulties
1176fc3fe1c2SSimon Glassin testing large series of patches. Apart from tidying up there is quite a
11771d8104feSSimon Glassbit of scope for improvement. Things like better error diffs and easier
11783e1ded1fSDirk Behmeaccess to log files. Also it would be nice if buildman could 'hunt' for
11791d8104feSSimon Glassproblems, perhaps by building a few boards for each arch, or checking
11801d8104feSSimon Glasscommits for changed files and building only boards which use those files.
1181fc3fe1c2SSimon Glass
1182fc3fe1c2SSimon Glass
1183fc3fe1c2SSimon GlassCredits
1184fc3fe1c2SSimon Glass=======
1185fc3fe1c2SSimon Glass
1186fc3fe1c2SSimon GlassThanks to Grant Grundler <grundler@chromium.org> for his ideas for improving
1187fc3fe1c2SSimon Glassthe build speed by building all commits for a board instead of the other
1188fc3fe1c2SSimon Glassway around.
1189fc3fe1c2SSimon Glass
1190fc3fe1c2SSimon Glass
1191fc3fe1c2SSimon GlassSimon Glass
1192fc3fe1c2SSimon Glasssjg@chromium.org
1193fc3fe1c2SSimon GlassHalloween 2012
1194fc3fe1c2SSimon GlassUpdated 12-12-12
1195fc3fe1c2SSimon GlassUpdated 23-02-13
1196