1fc3fe1c2SSimon Glass# Copyright (c) 2013 The Chromium OS Authors. 2fc3fe1c2SSimon Glass# 31a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 4fc3fe1c2SSimon Glass# 5fc3fe1c2SSimon Glass 66eede34cSSimon Glass(Please read 'How to change from MAKEALL' if you are used to that tool) 76eede34cSSimon Glass 8fc3fe1c2SSimon GlassWhat is this? 9fc3fe1c2SSimon Glass============= 10fc3fe1c2SSimon Glass 11fc3fe1c2SSimon GlassThis tool handles building U-Boot to check that you have not broken it 12fc3fe1c2SSimon Glasswith your patch series. It can build each individual commit and report 13fc3fe1c2SSimon Glasswhich boards fail on which commits, and which errors come up. It aims 14fc3fe1c2SSimon Glassto make full use of multi-processor machines. 15fc3fe1c2SSimon Glass 16fc3fe1c2SSimon GlassA key feature of buildman is its output summary, which allows warnings, 17fc3fe1c2SSimon Glasserrors or image size increases in a particular commit or board to be 18fc3fe1c2SSimon Glassquickly identified and the offending commit pinpointed. This can be a big 19fc3fe1c2SSimon Glasshelp for anyone working with >10 patches at a time. 20fc3fe1c2SSimon Glass 21fc3fe1c2SSimon Glass 22fc3fe1c2SSimon GlassCaveats 23fc3fe1c2SSimon Glass======= 24fc3fe1c2SSimon Glass 25fc3fe1c2SSimon GlassBuildman can be stopped and restarted, in which case it will continue 26fc3fe1c2SSimon Glasswhere it left off. This should happen cleanly and without side-effects. 27fc3fe1c2SSimon GlassIf not, it is a bug, for which a patch would be welcome. 28fc3fe1c2SSimon Glass 29fc3fe1c2SSimon GlassBuildman gets so tied up in its work that it can ignore the outside world. 30fc3fe1c2SSimon GlassYou may need to press Ctrl-C several times to quit it. Also it will print 31*8ea42101SSimon Glassout various exceptions when stopped. You may have to kill it since the 32*8ea42101SSimon GlassCtrl-C handling is somewhat broken. 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 42e5a0e5d8SSimon Glassprogress information (except with -v, see below). All the output (errors, 433e1ded1fSDirk Behmewarnings and binaries if you ask for them) is stored in output 44e5a0e5d8SSimon Glassdirectories, which you can look at while the build is progressing, or when 45e5a0e5d8SSimon Glassit is finished. 46fc3fe1c2SSimon Glass 47*8ea42101SSimon GlassBuildman is designed to build entire git branches, i.e. muliple commits. It 48*8ea42101SSimon Glasscan be run repeatedly on the same branch. In this case it will automatically 49*8ea42101SSimon Glassrebuild commits which have changed (and remove its old results for that 50*8ea42101SSimon Glasscommit). It is possible to build a branch for one board, then later build it 51*8ea42101SSimon Glassfor another board. If you want buildman to re-build a commit it has already 52*8ea42101SSimon Glassbuilt (e.g. because of a toolchain update), use the -f flag. 53*8ea42101SSimon Glass 54fc3fe1c2SSimon GlassBuildman produces a concise summary of which boards succeeded and failed. 55fc3fe1c2SSimon GlassIt shows which commit introduced which board failure using a simple 56fc3fe1c2SSimon Glassred/green colour coding. Full error information can be requested, in which 57fc3fe1c2SSimon Glasscase it is de-duped and displayed against the commit that introduced the 58fc3fe1c2SSimon Glasserror. An example workflow is below. 59fc3fe1c2SSimon Glass 60fc3fe1c2SSimon GlassBuildman stores image size information and can report changes in image size 61fc3fe1c2SSimon Glassfrom commit to commit. An example of this is below. 62fc3fe1c2SSimon Glass 63fc3fe1c2SSimon GlassBuildman starts multiple threads, and each thread builds for one board at 64fc3fe1c2SSimon Glassa time. A thread starts at the first commit, configures the source for your 65fc3fe1c2SSimon Glassboard and builds it. Then it checks out the next commit and does an 66fc3fe1c2SSimon Glassincremental build. Eventually the thread reaches the last commit and stops. 67fc3fe1c2SSimon GlassIf errors or warnings are found along the way, the thread will reconfigure 68fc3fe1c2SSimon Glassafter every commit, and your build will be very slow. This is because a 69fc3fe1c2SSimon Glassfile that produces just a warning would not normally be rebuilt in an 70fc3fe1c2SSimon Glassincremental build. 71fc3fe1c2SSimon Glass 72fc3fe1c2SSimon GlassBuildman works in an entirely separate place from your U-Boot repository. 73fc3fe1c2SSimon GlassIt creates a separate working directory for each thread, and puts the 74fc3fe1c2SSimon Glassoutput files in the working directory, organised by commit name and board 75fc3fe1c2SSimon Glassname, in a two-level hierarchy. 76fc3fe1c2SSimon Glass 77fc3fe1c2SSimon GlassBuildman is invoked in your U-Boot directory, the one with the .git 78fc3fe1c2SSimon Glassdirectory. It clones this repository into a copy for each thread, and the 79fc3fe1c2SSimon Glassthreads do not affect the state of your git repository. Any checkouts done 80fc3fe1c2SSimon Glassby the thread affect only the working directory for that thread. 81fc3fe1c2SSimon Glass 82fc3fe1c2SSimon GlassBuildman automatically selects the correct tool chain for each board. You 83fc3fe1c2SSimon Glassmust supply suitable tool chains, but buildman takes care of selecting the 84fc3fe1c2SSimon Glassright one. 85fc3fe1c2SSimon Glass 86e5a0e5d8SSimon GlassBuildman generally builds a branch (with the -b flag), and in this case 87e5a0e5d8SSimon Glassbuilds the upstream commit as well, for comparison. It cannot build 88e5a0e5d8SSimon Glassindividual commits at present, unless (maybe) you point it at an empty 89e5a0e5d8SSimon Glassbranch. Put all your commits in a branch, set the branch's upstream to a 90e5a0e5d8SSimon Glassvalid value, and all will be well. Otherwise buildman will perform random 91e5a0e5d8SSimon Glassactions. Use -n to check what the random actions might be. 92e5a0e5d8SSimon Glass 931d8104feSSimon GlassIf you just want to build the current source tree, leave off the -b flag 941d8104feSSimon Glassand add -e. This will display results and errors as they happen. You can 951d8104feSSimon Glassstill look at them later using -se. Note that buildman will assume that the 961d8104feSSimon Glasssource has changed, and will build all specified boards in this case. 97fc3fe1c2SSimon Glass 98fc3fe1c2SSimon GlassBuildman is optimised for building many commits at once, for many boards. 99fc3fe1c2SSimon GlassOn multi-core machines, Buildman is fast because it uses most of the 100fc3fe1c2SSimon Glassavailable CPU power. When it gets to the end, or if you are building just 101fc3fe1c2SSimon Glassa few commits or boards, it will be pretty slow. As a tip, if you don't 102fc3fe1c2SSimon Glassplan to use your machine for anything else, you can use -T to increase the 103fc3fe1c2SSimon Glassnumber of threads beyond the default. 104fc3fe1c2SSimon Glass 1058426d8b0SStephen WarrenBuildman lets you build all boards, or a subset. Specify the subset by passing 1068426d8b0SStephen Warrencommand-line arguments that list the desired board name, architecture name, 1078426d8b0SStephen WarrenSOC name, or anything else in the boards.cfg file. Multiple arguments are 1088426d8b0SStephen Warrenallowed. Each argument will be interpreted as a regular expression, so 1098426d8b0SStephen Warrenbehaviour is a superset of exact or substring matching. Examples are: 1108426d8b0SStephen Warren 1118426d8b0SStephen Warren* 'tegra20' All boards with a Tegra20 SoC 1128426d8b0SStephen Warren* 'tegra' All boards with any Tegra Soc (Tegra20, Tegra30, Tegra114...) 1138426d8b0SStephen Warren* '^tegra[23]0$' All boards with either Tegra20 or Tegra30 SoC 1148426d8b0SStephen Warren* 'powerpc' All PowerPC boards 115fc3fe1c2SSimon Glass 1166131beabSSimon GlassWhile the default is to OR the terms together, you can also make use of 1176131beabSSimon Glassthe '&' operator to limit the selection: 1186131beabSSimon Glass 1196131beabSSimon Glass* 'freescale & arm sandbox' All Freescale boards with ARM architecture, 1206131beabSSimon Glass plus sandbox 1216131beabSSimon Glass 1223cf4ae6fSSimon GlassYou can also use -x to specifically exclude some boards. For example: 1233cf4ae6fSSimon Glass 1243cf4ae6fSSimon Glass buildmand arm -x nvidia,freescale,.*ball$ 1253cf4ae6fSSimon Glass 1263cf4ae6fSSimon Glassmeans to build all arm boards except nvidia, freescale and anything ending 1273cf4ae6fSSimon Glasswith 'ball'. 1283cf4ae6fSSimon Glass 1293e1ded1fSDirk BehmeIt is convenient to use the -n option to see what will be built based on 1306131beabSSimon Glassthe subset given. 1316131beabSSimon Glass 132fc3fe1c2SSimon GlassBuildman does not store intermediate object files. It optionally copies 133fc3fe1c2SSimon Glassthe binary output into a directory when a build is successful. Size 134fc3fe1c2SSimon Glassinformation is always recorded. It needs a fair bit of disk space to work, 135fc3fe1c2SSimon Glasstypically 250MB per thread. 136fc3fe1c2SSimon Glass 137fc3fe1c2SSimon Glass 138fc3fe1c2SSimon GlassSetting up 139fc3fe1c2SSimon Glass========== 140fc3fe1c2SSimon Glass 141fc3fe1c2SSimon Glass1. Get the U-Boot source. You probably already have it, but if not these 142fc3fe1c2SSimon Glasssteps should get you started with a repo and some commits for testing. 143fc3fe1c2SSimon Glass 144fc3fe1c2SSimon Glass$ cd /path/to/u-boot 145fc3fe1c2SSimon Glass$ git clone git://git.denx.de/u-boot.git . 146fc3fe1c2SSimon Glass$ git checkout -b my-branch origin/master 147fc3fe1c2SSimon Glass$ # Add some commits to the branch, reading for testing 148fc3fe1c2SSimon Glass 14962005342SSimon Glass2. Create ~/.buildman to tell buildman where to find tool chains (see 'The 15062005342SSimon Glass.buildman file' later for details). As an example: 151fc3fe1c2SSimon Glass 152fc3fe1c2SSimon Glass# Buildman settings file 153fc3fe1c2SSimon Glass 154fc3fe1c2SSimon Glass[toolchain] 155fc3fe1c2SSimon Glassroot: / 156fc3fe1c2SSimon Glassrest: /toolchains/* 157fc3fe1c2SSimon Glasseldk: /opt/eldk-4.2 158e9569478SSimon Glassarm: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux 159e9569478SSimon Glassaarch64: /opt/linaro/gcc-linaro-aarch64-none-elf-4.8-2013.10_linux 160fc3fe1c2SSimon Glass 161fc3fe1c2SSimon Glass[toolchain-alias] 162fc3fe1c2SSimon Glassx86: i386 163fc3fe1c2SSimon Glassblackfin: bfin 164fc3fe1c2SSimon Glassnds32: nds32le 165e8aebc47SBin Mengopenrisc: or1k 166fc3fe1c2SSimon Glass 167fc3fe1c2SSimon Glass 168fc3fe1c2SSimon GlassThis selects the available toolchain paths. Add the base directory for 169fc3fe1c2SSimon Glasseach of your toolchains here. Buildman will search inside these directories 170fc3fe1c2SSimon Glassand also in any '/usr' and '/usr/bin' subdirectories. 171fc3fe1c2SSimon Glass 172fc3fe1c2SSimon GlassMake sure the tags (here root: rest: and eldk:) are unique. 173fc3fe1c2SSimon Glass 174fc3fe1c2SSimon GlassThe toolchain-alias section indicates that the i386 toolchain should be used 175fc3fe1c2SSimon Glassto build x86 commits. 176fc3fe1c2SSimon Glass 17717bce66cSSimon GlassNote that you can also specific exactly toolchain prefixes if you like: 17817bce66cSSimon Glass 17917bce66cSSimon Glass[toolchain-prefix] 18017bce66cSSimon Glassarm: /opt/arm-eabi-4.6/bin/arm-eabi- 18117bce66cSSimon Glass 18217bce66cSSimon Glassor even: 18317bce66cSSimon Glass 18417bce66cSSimon Glass[toolchain-prefix] 18517bce66cSSimon Glassarm: /opt/arm-eabi-4.6/bin/arm-eabi-gcc 18617bce66cSSimon Glass 18717bce66cSSimon GlassThis tells buildman that you want to use this exact toolchain for the arm 18817bce66cSSimon Glassarchitecture. This will override any toolchains found by searching using the 18917bce66cSSimon Glass[toolchain] settings. 19017bce66cSSimon Glass 19117bce66cSSimon GlassSince the toolchain prefix is an explicit request, buildman will report an 19217bce66cSSimon Glasserror if a toolchain is not found with that prefix. The current PATH will be 19317bce66cSSimon Glasssearched, so it is possible to use: 19417bce66cSSimon Glass 19517bce66cSSimon Glass[toolchain-prefix] 19617bce66cSSimon Glassarm: arm-none-eabi- 19717bce66cSSimon Glass 19817bce66cSSimon Glassand buildman will find arm-none-eabi-gcc in /usr/bin if you have it installed. 199fc3fe1c2SSimon Glass 20034699696SSimon Glass3. Make sure you have the require Python pre-requisites 20134699696SSimon Glass 202827e37b5SSimon GlassBuildman uses multiprocessing, Queue, shutil, StringIO, ConfigParser and 203827e37b5SSimon Glassurllib2. These should normally be available, but if you get an error like 204827e37b5SSimon Glassthis then you will need to obtain those modules: 20534699696SSimon Glass 20634699696SSimon Glass ImportError: No module named multiprocessing 20734699696SSimon Glass 20834699696SSimon Glass 20934699696SSimon Glass4. Check the available toolchains 210fc3fe1c2SSimon Glass 211fc3fe1c2SSimon GlassRun this check to make sure that you have a toolchain for every architecture. 212fc3fe1c2SSimon Glass 213fc3fe1c2SSimon Glass$ ./tools/buildman/buildman --list-tool-chains 214fc3fe1c2SSimon GlassScanning for tool chains 21517bce66cSSimon Glass - scanning prefix '/opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-' 21617bce66cSSimon GlassTool chain test: OK, arch='x86', priority 1 21717bce66cSSimon Glass - scanning prefix '/opt/arm-eabi-4.6/bin/arm-eabi-' 21817bce66cSSimon GlassTool chain test: OK, arch='arm', priority 1 21917bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/i386-linux' 22017bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/.' 22117bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin' 22217bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc' 22317bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/usr/bin' 22417bce66cSSimon GlassTool chain test: OK, arch='i386', priority 4 22517bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/aarch64-linux' 22617bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/.' 22717bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin' 22817bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc' 22917bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/usr/bin' 23017bce66cSSimon GlassTool chain test: OK, arch='aarch64', priority 4 23117bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/microblaze-linux' 23217bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/.' 23317bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin' 23417bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc' 23517bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/usr/bin' 23617bce66cSSimon GlassTool chain test: OK, arch='microblaze', priority 4 23717bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/mips64-linux' 23817bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/.' 23917bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin' 24017bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc' 24117bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/usr/bin' 24217bce66cSSimon GlassTool chain test: OK, arch='mips64', priority 4 24317bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc64-linux' 24417bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/.' 24517bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin' 24617bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc' 24717bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/usr/bin' 24817bce66cSSimon GlassTool chain test: OK, arch='sparc64', priority 4 24917bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi' 25017bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/.' 25117bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin' 25217bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc' 25317bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/usr/bin' 25417bce66cSSimon GlassTool chain test: OK, arch='arm', priority 3 25517bce66cSSimon 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 25617bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/sparc-linux' 25717bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/.' 25817bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin' 25917bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc' 26017bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/usr/bin' 26117bce66cSSimon GlassTool chain test: OK, arch='sparc', priority 4 26217bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/mips-linux' 26317bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/.' 26417bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin' 26517bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc' 26617bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/usr/bin' 26717bce66cSSimon GlassTool chain test: OK, arch='mips', priority 4 26817bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/x86_64-linux' 26917bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/.' 27017bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin' 27117bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc' 27217bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' 27317bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/usr/bin' 27417bce66cSSimon GlassTool chain test: OK, arch='x86_64', priority 4 27517bce66cSSimon GlassTool chain test: OK, arch='x86_64', priority 4 27617bce66cSSimon 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 27717bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/m68k-linux' 27817bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/.' 27917bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin' 28017bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc' 28117bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/usr/bin' 28217bce66cSSimon GlassTool chain test: OK, arch='m68k', priority 4 28317bce66cSSimon Glass - scanning path '/toolchains/gcc-4.9.0-nolibc/powerpc-linux' 28417bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/.' 28517bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin' 28617bce66cSSimon Glass - found '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc' 28717bce66cSSimon Glass - looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/usr/bin' 28817bce66cSSimon GlassTool chain test: OK, arch='powerpc', priority 4 28917bce66cSSimon Glass - scanning path '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux' 29017bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/.' 29117bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin' 29217bce66cSSimon Glass - found '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc' 29317bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/usr/bin' 29417bce66cSSimon GlassTool chain test: OK, arch='bfin', priority 6 29517bce66cSSimon Glass - scanning path '/toolchains/gcc-4.6.3-nolibc/sparc-linux' 29617bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/.' 29717bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin' 29817bce66cSSimon Glass - found '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' 29917bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/usr/bin' 30017bce66cSSimon GlassTool chain test: OK, arch='sparc', priority 4 30117bce66cSSimon 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 30217bce66cSSimon Glass - scanning path '/toolchains/gcc-4.6.3-nolibc/mips-linux' 30317bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/.' 30417bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin' 30517bce66cSSimon Glass - found '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' 30617bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/usr/bin' 30717bce66cSSimon GlassTool chain test: OK, arch='mips', priority 4 30817bce66cSSimon 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 30917bce66cSSimon Glass - scanning path '/toolchains/gcc-4.6.3-nolibc/m68k-linux' 31017bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/.' 31117bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin' 31217bce66cSSimon Glass - found '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' 31317bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/usr/bin' 31417bce66cSSimon GlassTool chain test: OK, arch='m68k', priority 4 31517bce66cSSimon 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 31617bce66cSSimon Glass - scanning path '/toolchains/gcc-4.6.3-nolibc/powerpc-linux' 31717bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/.' 31817bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin' 31917bce66cSSimon Glass - found '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc' 32017bce66cSSimon Glass - looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/usr/bin' 32117bce66cSSimon GlassTool chain test: OK, arch='powerpc', priority 4 32217bce66cSSimon GlassTool chain test: OK, arch='or32', priority 4 32317bce66cSSimon Glass - scanning path '/toolchains/gcc-4.2.4-nolibc/avr32-linux' 32417bce66cSSimon Glass - looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/.' 32517bce66cSSimon Glass - looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/bin' 32617bce66cSSimon Glass - found '/toolchains/gcc-4.2.4-nolibc/avr32-linux/bin/avr32-linux-gcc' 32717bce66cSSimon Glass - looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/usr/bin' 32817bce66cSSimon GlassTool chain test: OK, arch='avr32', priority 4 329fc3fe1c2SSimon Glass - scanning path '/' 330fc3fe1c2SSimon Glass - looking in '/.' 331fc3fe1c2SSimon Glass - looking in '/bin' 332fc3fe1c2SSimon Glass - looking in '/usr/bin' 33317bce66cSSimon Glass - found '/usr/bin/i586-mingw32msvc-gcc' 334fc3fe1c2SSimon Glass - found '/usr/bin/c89-gcc' 335fc3fe1c2SSimon Glass - found '/usr/bin/x86_64-linux-gnu-gcc' 33617bce66cSSimon Glass - found '/usr/bin/gcc' 33717bce66cSSimon Glass - found '/usr/bin/c99-gcc' 33817bce66cSSimon Glass - found '/usr/bin/arm-linux-gnueabi-gcc' 33917bce66cSSimon Glass - found '/usr/bin/aarch64-linux-gnu-gcc' 34017bce66cSSimon Glass - found '/usr/bin/winegcc' 34117bce66cSSimon Glass - found '/usr/bin/arm-linux-gnueabihf-gcc' 34217bce66cSSimon GlassTool chain test: OK, arch='i586', priority 11 34317bce66cSSimon GlassTool chain test: OK, arch='c89', priority 11 34417bce66cSSimon GlassTool chain test: OK, arch='x86_64', priority 4 34517bce66cSSimon GlassToolchain '/usr/bin/x86_64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4 34617bce66cSSimon GlassTool chain test: OK, arch='sandbox', priority 11 34717bce66cSSimon GlassTool chain test: OK, arch='c99', priority 11 34817bce66cSSimon GlassTool chain test: OK, arch='arm', priority 4 34917bce66cSSimon GlassToolchain '/usr/bin/arm-linux-gnueabi-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1 35017bce66cSSimon GlassTool chain test: OK, arch='aarch64', priority 4 35117bce66cSSimon GlassToolchain '/usr/bin/aarch64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'aarch64' has priority 4 35217bce66cSSimon GlassTool chain test: OK, arch='sandbox', priority 11 35317bce66cSSimon GlassToolchain '/usr/bin/winegcc' at priority 11 will be ignored because another toolchain for arch 'sandbox' has priority 11 35417bce66cSSimon GlassTool chain test: OK, arch='arm', priority 4 35517bce66cSSimon GlassToolchain '/usr/bin/arm-linux-gnueabihf-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1 35617bce66cSSimon GlassList of available toolchains (34): 35717bce66cSSimon Glassaarch64 : /toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc 35817bce66cSSimon Glassalpha : /toolchains/gcc-4.9.0-nolibc/alpha-linux/bin/alpha-linux-gcc 35917bce66cSSimon Glassam33_2.0 : /toolchains/gcc-4.9.0-nolibc/am33_2.0-linux/bin/am33_2.0-linux-gcc 36017bce66cSSimon Glassarm : /opt/arm-eabi-4.6/bin/arm-eabi-gcc 36117bce66cSSimon Glassavr32 : /toolchains/gcc-4.2.4-nolibc/avr32-linux/bin/avr32-linux-gcc 36217bce66cSSimon Glassbfin : /toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc 363fc3fe1c2SSimon Glassc89 : /usr/bin/c89-gcc 364fc3fe1c2SSimon Glassc99 : /usr/bin/c99-gcc 36517bce66cSSimon Glassfrv : /toolchains/gcc-4.9.0-nolibc/frv-linux/bin/frv-linux-gcc 36617bce66cSSimon Glassh8300 : /toolchains/gcc-4.9.0-nolibc/h8300-elf/bin/h8300-elf-gcc 36717bce66cSSimon Glasshppa : /toolchains/gcc-4.9.0-nolibc/hppa-linux/bin/hppa-linux-gcc 36817bce66cSSimon Glasshppa64 : /toolchains/gcc-4.9.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc 36917bce66cSSimon Glassi386 : /toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc 37017bce66cSSimon Glassi586 : /usr/bin/i586-mingw32msvc-gcc 37117bce66cSSimon Glassia64 : /toolchains/gcc-4.9.0-nolibc/ia64-linux/bin/ia64-linux-gcc 37217bce66cSSimon Glassm32r : /toolchains/gcc-4.9.0-nolibc/m32r-linux/bin/m32r-linux-gcc 37317bce66cSSimon Glassm68k : /toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc 37417bce66cSSimon Glassmicroblaze: /toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc 37517bce66cSSimon Glassmips : /toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc 37617bce66cSSimon Glassmips64 : /toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc 37717bce66cSSimon Glassor32 : /toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc 37817bce66cSSimon Glasspowerpc : /toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc 37917bce66cSSimon Glasspowerpc64 : /toolchains/gcc-4.9.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc 38017bce66cSSimon Glassppc64le : /toolchains/gcc-4.9.0-nolibc/ppc64le-linux/bin/ppc64le-linux-gcc 38117bce66cSSimon Glasss390x : /toolchains/gcc-4.9.0-nolibc/s390x-linux/bin/s390x-linux-gcc 382fc3fe1c2SSimon Glasssandbox : /usr/bin/gcc 38317bce66cSSimon Glasssh4 : /toolchains/gcc-4.6.3-nolibc/sh4-linux/bin/sh4-linux-gcc 38417bce66cSSimon Glasssparc : /toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc 38517bce66cSSimon Glasssparc64 : /toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc 38617bce66cSSimon Glasstilegx : /toolchains/gcc-4.6.2-nolibc/tilegx-linux/bin/tilegx-linux-gcc 38717bce66cSSimon Glassx86 : /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-gcc 38817bce66cSSimon Glassx86_64 : /toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc 389fc3fe1c2SSimon Glass 390fc3fe1c2SSimon Glass 391fc3fe1c2SSimon GlassYou can see that everything is covered, even some strange ones that won't 392fc3fe1c2SSimon Glassbe used (c88 and c99). This is a feature. 393fc3fe1c2SSimon Glass 394fc3fe1c2SSimon Glass 395827e37b5SSimon Glass5. Install new toolchains if needed 396827e37b5SSimon Glass 397827e37b5SSimon GlassYou can download toolchains and update the [toolchain] section of the 398827e37b5SSimon Glasssettings file to find them. 399827e37b5SSimon Glass 400827e37b5SSimon GlassTo make this easier, buildman can automatically download and install 401827e37b5SSimon Glasstoolchains from kernel.org. First list the available architectures: 402827e37b5SSimon Glass 4039f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch list 404827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ 405827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/ 406827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/ 407827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.2.4/ 408827e37b5SSimon GlassAvailable architectures: alpha am33_2.0 arm avr32 bfin cris crisv32 frv h8300 409827e37b5SSimon Glasshppa hppa64 i386 ia64 m32r m68k mips mips64 or32 powerpc powerpc64 s390x sh4 410827e37b5SSimon Glasssparc sparc64 tilegx x86_64 xtensa 411827e37b5SSimon Glass 412827e37b5SSimon GlassThen pick one and download it: 413827e37b5SSimon Glass 4149f244b27SBin Meng$ ./tools/buildman/buildman --fetch-arch or32 415827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ 416827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.2/ 417827e37b5SSimon GlassChecking: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.5.1/ 418827e37b5SSimon 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 419827e37b5SSimon GlassUnpacking to: /home/sjg/.buildman-toolchains 420827e37b5SSimon GlassTesting 421827e37b5SSimon Glass - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/.' 422827e37b5SSimon Glass - looking in '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin' 423827e37b5SSimon Glass - found '/home/sjg/.buildman-toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc' 424827e37b5SSimon GlassTool chain test: OK 425827e37b5SSimon Glass 4268951523cSThomas ChouOr download them all from kernel.org and move them to /toolchains directory, 4278951523cSThomas Chou 428*8ea42101SSimon Glass$ ./tools/buildman/buildman --fetch-arch all 4298951523cSThomas Chou$ sudo mkdir -p /toolchains 4308951523cSThomas Chou$ sudo mv ~/.buildman-toolchains/*/* /toolchains/ 4318951523cSThomas Chou 4328951523cSThomas ChouFor those not available from kernel.org, download from the following links. 4338951523cSThomas Chou 4348951523cSThomas Chouarc: https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/ 4358951523cSThomas Chou arc_gnu_2015.06_prebuilt_uclibc_le_archs_linux_install.tar.gz 4368951523cSThomas Choublackfin: http://sourceforge.net/projects/adi-toolchain/files/ 4378951523cSThomas Chou blackfin-toolchain-elf-gcc-4.5-2014R1_45-RC2.x86_64.tar.bz2 4388951523cSThomas Chounds32: http://osdk.andestech.com/packages/ 4398951523cSThomas Chou nds32le-linux-glibc-v1.tgz 4408951523cSThomas Chounios2: http://sourcery.mentor.com/public/gnu_toolchain/nios2-linux-gnu/ 4418951523cSThomas Chou sourceryg++-2015.11-27-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2 4428951523cSThomas Choush: http://sourcery.mentor.com/public/gnu_toolchain/sh-linux-gnu/ 4438951523cSThomas Chou renesas-4.4-200-sh-linux-gnu-i686-pc-linux-gnu.tar.bz2 4448951523cSThomas Chou 445*8ea42101SSimon GlassNote openrisc kernel.org toolchain is out of date. Download the latest one from 446*8ea42101SSimon Glasshttp://opencores.org/or1k/OpenRISC_GNU_tool_chain#Prebuilt_versions - eg: 447e8aebc47SBin Mengftp://ocuser:ocuser@openrisc.opencores.org/toolchain/gcc-or1k-elf-4.8.1-x86.tar.bz2. 448e8aebc47SBin Meng 449827e37b5SSimon GlassBuildman should now be set up to use your new toolchain. 450827e37b5SSimon Glass 451827e37b5SSimon GlassAt the time of writing, U-Boot has these architectures: 452827e37b5SSimon Glass 453827e37b5SSimon Glass arc, arm, avr32, blackfin, m68k, microblaze, mips, nds32, nios2, openrisc 454827e37b5SSimon Glass powerpc, sandbox, sh, sparc, x86 455827e37b5SSimon Glass 4561246231cSMichal SimekOf these, only arc and nds32 are not available at kernel.org.. 457827e37b5SSimon Glass 458827e37b5SSimon Glass 459fc3fe1c2SSimon GlassHow to run it 460fc3fe1c2SSimon Glass============= 461fc3fe1c2SSimon Glass 462fc3fe1c2SSimon GlassFirst do a dry run using the -n flag: (replace <branch> with a real, local 463fc3fe1c2SSimon Glassbranch with a valid upstream) 464fc3fe1c2SSimon Glass 465fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -n 466fc3fe1c2SSimon Glass 467fc3fe1c2SSimon GlassIf it can't detect the upstream branch, try checking out the branch, and 4682a9e2c6aSSimon Glassdoing something like 'git branch --set-upstream-to upstream/master' 4692a9e2c6aSSimon Glassor something similar. Buildman will try to guess a suitable upstream branch 4702a9e2c6aSSimon Glassif it can't find one (you will see a message like" Guessing upstream as ...). 471fc3fe1c2SSimon Glass 472cec83c3eSSimon GlassAs an example: 473fc3fe1c2SSimon Glass 474fc3fe1c2SSimon GlassDry run, so not doing much. But I would do this: 475fc3fe1c2SSimon Glass 476fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread) 477fc3fe1c2SSimon GlassBuild directory: ../lcd9b 478fc3fe1c2SSimon Glass 5bb3505 Merge branch 'master' of git://git.denx.de/u-boot-arm 479fc3fe1c2SSimon Glass c18f1b4 tegra: Use const for pinmux_config_pingroup/table() 480fc3fe1c2SSimon Glass 2f043ae tegra: Add display support to funcmux 481fc3fe1c2SSimon Glass e349900 tegra: fdt: Add pwm binding and node 482fc3fe1c2SSimon Glass 424a5f0 tegra: fdt: Add LCD definitions for Tegra 483fc3fe1c2SSimon Glass 0636ccf tegra: Add support for PWM 484fc3fe1c2SSimon Glass a994fe7 tegra: Add SOC support for display/lcd 485fc3fe1c2SSimon Glass fcd7350 tegra: Add LCD driver 486fc3fe1c2SSimon Glass 4d46e9d tegra: Add LCD support to Nvidia boards 487fc3fe1c2SSimon Glass 991bd48 arm: Add control over cachability of memory regions 488fc3fe1c2SSimon Glass 54e8019 lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment 489fc3fe1c2SSimon Glass d92aff7 lcd: Add support for flushing LCD fb from dcache after update 490fc3fe1c2SSimon Glass dbd0677 tegra: Align LCD frame buffer to section boundary 491fc3fe1c2SSimon Glass 0cff9b8 tegra: Support control of cache settings for LCD 492fc3fe1c2SSimon Glass 9c56900 tegra: fdt: Add LCD definitions for Seaboard 493fc3fe1c2SSimon Glass 5cc29db lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console 494fc3fe1c2SSimon Glass cac5a23 tegra: Enable display/lcd support on Seaboard 495fc3fe1c2SSimon Glass 49ff541 wip 496fc3fe1c2SSimon Glass 497fc3fe1c2SSimon GlassTotal boards to build for each commit: 1059 498fc3fe1c2SSimon Glass 499fc3fe1c2SSimon GlassThis shows that it will build all 1059 boards, using 4 threads (because 500fc3fe1c2SSimon Glasswe have a 4-core CPU). Each thread will run with -j1, meaning that each 501fc3fe1c2SSimon Glassmake job will use a single CPU. The list of commits to be built helps you 502fc3fe1c2SSimon Glassconfirm that things look about right. Notice that buildman has chosen a 503fc3fe1c2SSimon Glass'base' directory for you, immediately above your source tree. 504fc3fe1c2SSimon Glass 505fc3fe1c2SSimon GlassBuildman works entirely inside the base directory, here ../lcd9b, 506fc3fe1c2SSimon Glasscreating a working directory for each thread, and creating output 507fc3fe1c2SSimon Glassdirectories for each commit and board. 508fc3fe1c2SSimon Glass 509fc3fe1c2SSimon Glass 510fc3fe1c2SSimon GlassSuggested Workflow 511fc3fe1c2SSimon Glass================== 512fc3fe1c2SSimon Glass 513fc3fe1c2SSimon GlassTo run the build for real, take off the -n: 514fc3fe1c2SSimon Glass 515fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> 516fc3fe1c2SSimon Glass 517fc3fe1c2SSimon GlassBuildman will set up some working directories, and get started. After a 518fc3fe1c2SSimon Glassminute or so it will settle down to a steady pace, with a display like this: 519fc3fe1c2SSimon Glass 520fc3fe1c2SSimon GlassBuilding 18 commits for 1059 boards (4 threads, 1 job per thread) 521fc3fe1c2SSimon Glass 528 36 124 /19062 1:13:30 : SIMPC8313_SP 522fc3fe1c2SSimon Glass 523fc3fe1c2SSimon GlassThis means that it is building 19062 board/commit combinations. So far it 524cec83c3eSSimon Glasshas managed to successfully build 528. Another 36 have built with warnings, 525fc3fe1c2SSimon Glassand 124 more didn't build at all. Buildman expects to complete the process 526*8ea42101SSimon Glassin around an hour and a quarter. Use this time to buy a faster computer. 527fc3fe1c2SSimon Glass 528fc3fe1c2SSimon Glass 529fc3fe1c2SSimon GlassTo find out how the build went, ask for a summary with -s. You can do this 5303e1ded1fSDirk Behmeeither before the build completes (presumably in another terminal) or 531fc3fe1c2SSimon Glassafterwards. Let's work through an example of how this is used: 532fc3fe1c2SSimon Glass 533fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b lcd9b -s 534fc3fe1c2SSimon Glass... 535fc3fe1c2SSimon Glass01: Merge branch 'master' of git://git.denx.de/u-boot-arm 536fc3fe1c2SSimon Glass powerpc: + galaxy5200_LOWBOOT 537fc3fe1c2SSimon Glass02: tegra: Use const for pinmux_config_pingroup/table() 538fc3fe1c2SSimon Glass03: tegra: Add display support to funcmux 539fc3fe1c2SSimon Glass04: tegra: fdt: Add pwm binding and node 540fc3fe1c2SSimon Glass05: tegra: fdt: Add LCD definitions for Tegra 541fc3fe1c2SSimon Glass06: tegra: Add support for PWM 542fc3fe1c2SSimon Glass07: tegra: Add SOC support for display/lcd 543fc3fe1c2SSimon Glass08: tegra: Add LCD driver 544fc3fe1c2SSimon Glass09: tegra: Add LCD support to Nvidia boards 545fc3fe1c2SSimon Glass10: arm: Add control over cachability of memory regions 546fc3fe1c2SSimon Glass11: lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment 547fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update 548fc3fe1c2SSimon Glass arm: + lubbock 549fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary 550fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD 551fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard 552fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console 553fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard 554fc3fe1c2SSimon Glass18: wip 555fc3fe1c2SSimon Glass 556fc3fe1c2SSimon GlassThis shows which commits have succeeded and which have failed. In this case 557fc3fe1c2SSimon Glassthe build is still in progress so many boards are not built yet (use -u to 558fc3fe1c2SSimon Glasssee which ones). But still we can see a few failures. The galaxy5200_LOWBOOT 559fc3fe1c2SSimon Glassnever builds correctly. This could be a problem with our toolchain, or it 560fc3fe1c2SSimon Glasscould be a bug in the upstream. The good news is that we probably don't need 561*8ea42101SSimon Glassto blame our commits. The bad news is that our commits are not tested on that 562*8ea42101SSimon Glassboard. 563fc3fe1c2SSimon Glass 564fc3fe1c2SSimon GlassCommit 12 broke lubbock. That's what the '+ lubbock' means. The failure 565fc3fe1c2SSimon Glassis never fixed by a later commit, or you would see lubbock again, in green, 566fc3fe1c2SSimon Glasswithout the +. 567fc3fe1c2SSimon Glass 568fc3fe1c2SSimon GlassTo see the actual error: 569fc3fe1c2SSimon Glass 570fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b <branch> -se lubbock 571fc3fe1c2SSimon Glass... 572fc3fe1c2SSimon Glass12: lcd: Add support for flushing LCD fb from dcache after update 573fc3fe1c2SSimon Glass arm: + lubbock 574fc3fe1c2SSimon Glass+common/libcommon.o: In function `lcd_sync': 575fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range' 576fc3fe1c2SSimon 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 577fc3fe1c2SSimon Glass+make: *** [/u-boot/lcd9b/.bm-work/00/build/u-boot] Error 139 578fc3fe1c2SSimon Glass13: tegra: Align LCD frame buffer to section boundary 579fc3fe1c2SSimon Glass14: tegra: Support control of cache settings for LCD 580fc3fe1c2SSimon Glass15: tegra: fdt: Add LCD definitions for Seaboard 581fc3fe1c2SSimon Glass16: lcd: Add CONFIG_CONSOLE_SCROLL_LINES option to speed console 582fc3fe1c2SSimon Glass-/u-boot/lcd9b/.bm-work/00/common/lcd.c:120: undefined reference to `flush_dcache_range' 583fc3fe1c2SSimon Glass+/u-boot/lcd9b/.bm-work/00/common/lcd.c:125: undefined reference to `flush_dcache_range' 584fc3fe1c2SSimon Glass17: tegra: Enable display/lcd support on Seaboard 585fc3fe1c2SSimon Glass18: wip 586fc3fe1c2SSimon Glass 587fc3fe1c2SSimon GlassSo the problem is in lcd.c, due to missing cache operations. This information 588fc3fe1c2SSimon Glassshould be enough to work out what that commit is doing to break these 589fc3fe1c2SSimon Glassboards. (In this case pxa did not have cache operations defined). 590fc3fe1c2SSimon Glass 591*8ea42101SSimon GlassIf you see error lines marked with '-', that means that the errors were fixed 592fc3fe1c2SSimon Glassby that commit. Sometimes commits can be in the wrong order, so that a 593fc3fe1c2SSimon Glassbreakage is introduced for a few commits and fixed by later commits. This 594fc3fe1c2SSimon Glassshows up clearly with buildman. You can then reorder the commits and try 595fc3fe1c2SSimon Glassagain. 596fc3fe1c2SSimon Glass 597*8ea42101SSimon GlassAt commit 16, the error moves: you can see that the old error at line 120 598fc3fe1c2SSimon Glassis fixed, but there is a new one at line 126. This is probably only because 5993e1ded1fSDirk Behmewe added some code and moved the broken line further down the file. 600fc3fe1c2SSimon Glass 601fc3fe1c2SSimon GlassIf many boards have the same error, then -e will display the error only 602ed966657SSimon Glassonce. This makes the output as concise as possible. To see which boards have 603*8ea42101SSimon Glasseach error, use -l. So it is safe to omit the board name - you will not get 604*8ea42101SSimon Glasslots of repeated output for every board. 605fc3fe1c2SSimon Glass 606e30965dbSSimon GlassBuildman tries to distinguish warnings from errors, and shows warning lines 607e30965dbSSimon Glassseparately with a 'w' prefix. 608e30965dbSSimon Glass 609fc3fe1c2SSimon GlassThe full build output in this case is available in: 610fc3fe1c2SSimon Glass 611fc3fe1c2SSimon Glass../lcd9b/12_of_18_gd92aff7_lcd--Add-support-for/lubbock/ 612fc3fe1c2SSimon Glass 613fc3fe1c2SSimon Glass done: Indicates the build was done, and holds the return code from make. 614fc3fe1c2SSimon Glass This is 0 for a good build, typically 2 for a failure. 615fc3fe1c2SSimon Glass 616fc3fe1c2SSimon Glass err: Output from stderr, if any. Errors and warnings appear here. 617fc3fe1c2SSimon Glass 618fc3fe1c2SSimon Glass log: Output from stdout. Normally there isn't any since buildman runs 619c81d0d21SSimon Glass in silent mode. Use -V to force a verbose build (this passes V=1 620c81d0d21SSimon Glass to 'make') 621fc3fe1c2SSimon Glass 622fc3fe1c2SSimon Glass toolchain: Shows information about the toolchain used for the build. 623fc3fe1c2SSimon Glass 624fc3fe1c2SSimon Glass sizes: Shows image size information. 625fc3fe1c2SSimon Glass 626*8ea42101SSimon GlassIt is possible to get the build binary output there also. Use the -k option 627*8ea42101SSimon Glassfor this. In that case you will also see some output files, like: 628fc3fe1c2SSimon Glass 629fc3fe1c2SSimon Glass System.map toolchain u-boot u-boot.bin u-boot.map autoconf.mk 630fc3fe1c2SSimon Glass (also SPL versions u-boot-spl and u-boot-spl.bin if available) 631fc3fe1c2SSimon Glass 632fc3fe1c2SSimon Glass 633fc3fe1c2SSimon GlassChecking Image Sizes 634fc3fe1c2SSimon Glass==================== 635fc3fe1c2SSimon Glass 636fc3fe1c2SSimon GlassA key requirement for U-Boot is that you keep code/data size to a minimum. 637fc3fe1c2SSimon GlassWhere a new feature increases this noticeably it should normally be put 638*8ea42101SSimon Glassbehind a CONFIG flag so that boards can leave it disabled and keep the image 639fc3fe1c2SSimon Glasssize more or less the same with each new release. 640fc3fe1c2SSimon Glass 641fc3fe1c2SSimon GlassTo check the impact of your commits on image size, use -S. For example: 642fc3fe1c2SSimon Glass 643fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-x86 -sS 644fc3fe1c2SSimon GlassSummary of 10 commits for 1066 boards (4 threads, 1 job per thread) 645fc3fe1c2SSimon Glass01: MAKEALL: add support for per architecture toolchains 646fc3fe1c2SSimon Glass02: x86: Add function to get top of usable ram 647fc3fe1c2SSimon Glass x86: (for 1/3 boards) text -272.0 rodata +41.0 648fc3fe1c2SSimon Glass03: x86: Add basic cache operations 649fc3fe1c2SSimon Glass04: x86: Permit bootstage and timer data to be used prior to relocation 650fc3fe1c2SSimon Glass x86: (for 1/3 boards) data +16.0 651fc3fe1c2SSimon Glass05: x86: Add an __end symbol to signal the end of the U-Boot binary 652fc3fe1c2SSimon Glass x86: (for 1/3 boards) text +76.0 653fc3fe1c2SSimon Glass06: x86: Rearrange the output input to remove BSS 654fc3fe1c2SSimon Glass x86: (for 1/3 boards) bss -2140.0 655fc3fe1c2SSimon Glass07: x86: Support relocation of FDT on start-up 656fc3fe1c2SSimon Glass x86: + coreboot-x86 657fc3fe1c2SSimon Glass08: x86: Add error checking to x86 relocation code 658fc3fe1c2SSimon Glass09: x86: Adjust link device tree include file 659fc3fe1c2SSimon Glass10: x86: Enable CONFIG_OF_CONTROL on coreboot 660fc3fe1c2SSimon Glass 661fc3fe1c2SSimon Glass 662fc3fe1c2SSimon GlassYou can see that image size only changed on x86, which is good because this 663fc3fe1c2SSimon Glassseries is not supposed to change any other board. From commit 7 onwards the 664fc3fe1c2SSimon Glassbuild fails so we don't get code size numbers. The numbers are fractional 665fc3fe1c2SSimon Glassbecause they are an average of all boards for that architecture. The 666fc3fe1c2SSimon Glassintention is to allow you to quickly find image size problems introduced by 667fc3fe1c2SSimon Glassyour commits. 668fc3fe1c2SSimon Glass 669fc3fe1c2SSimon GlassNote that the 'text' region and 'rodata' are split out. You should add the 670fc3fe1c2SSimon Glasstwo together to get the total read-only size (reported as the first column 671fc3fe1c2SSimon Glassin the output from binutil's 'size' utility). 672fc3fe1c2SSimon Glass 673fc3fe1c2SSimon GlassA useful option is --step which lets you skip some commits. For example 674fc3fe1c2SSimon Glass--step 2 will show the image sizes for only every 2nd commit (so it will 675fc3fe1c2SSimon Glasscompare the image sizes of the 1st, 3rd, 5th... commits). You can also use 676fc3fe1c2SSimon Glass--step 0 which will compare only the first and last commits. This is useful 677*8ea42101SSimon Glassfor an overview of how your entire series affects code size. It will build 678*8ea42101SSimon Glassonly the upstream commit and your final branch commit. 679fc3fe1c2SSimon Glass 680fc3fe1c2SSimon GlassYou can also use -d to see a detailed size breakdown for each board. This 681fc3fe1c2SSimon Glasslist is sorted in order from largest growth to largest reduction. 682fc3fe1c2SSimon Glass 683*8ea42101SSimon GlassIt is even possible to go a little further with the -B option (--bloat). This 684cec83c3eSSimon Glassshows where U-Boot has bloated, breaking the size change down to the function 685fc3fe1c2SSimon Glasslevel. Example output is below: 686fc3fe1c2SSimon Glass 687fc3fe1c2SSimon Glass$ ./tools/buildman/buildman -b us-mem4 -sSdB 688fc3fe1c2SSimon Glass... 689fc3fe1c2SSimon Glass19: Roll crc32 into hash infrastructure 690fc3fe1c2SSimon Glass arm: (for 10/10 boards) all -143.4 bss +1.2 data -4.8 rodata -48.2 text -91.6 691fc3fe1c2SSimon Glass paz00 : all +23 bss -4 rodata -29 text +56 692fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 3/-2 bytes: 168/-104 (64) 693fc3fe1c2SSimon Glass function old new delta 694fc3fe1c2SSimon Glass hash_command 80 160 +80 695fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 696fc3fe1c2SSimon Glass ext4fs_read_file 540 568 +28 697fc3fe1c2SSimon Glass insert_var_value_sub 688 692 +4 698fc3fe1c2SSimon Glass run_list_real 1996 1992 -4 699fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 700fc3fe1c2SSimon Glass trimslice : all -9 bss +16 rodata -29 text +4 701fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) 702fc3fe1c2SSimon Glass function old new delta 703fc3fe1c2SSimon Glass hash_command 80 160 +80 704fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 705fc3fe1c2SSimon Glass ext4fs_iterate_dir 672 668 -4 706fc3fe1c2SSimon Glass ext4fs_read_file 568 548 -20 707fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 708fc3fe1c2SSimon Glass whistler : all -9 bss +16 rodata -29 text +4 709fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) 710fc3fe1c2SSimon Glass function old new delta 711fc3fe1c2SSimon Glass hash_command 80 160 +80 712fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 713fc3fe1c2SSimon Glass ext4fs_iterate_dir 672 668 -4 714fc3fe1c2SSimon Glass ext4fs_read_file 568 548 -20 715fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 716fc3fe1c2SSimon Glass seaboard : all -9 bss -28 rodata -29 text +48 717fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 3/-2 bytes: 160/-104 (56) 718fc3fe1c2SSimon Glass function old new delta 719fc3fe1c2SSimon Glass hash_command 80 160 +80 720fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 721fc3fe1c2SSimon Glass ext4fs_read_file 548 568 +20 722fc3fe1c2SSimon Glass run_list_real 1996 2000 +4 723fc3fe1c2SSimon Glass do_nandboot 760 756 -4 724fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 725e57c6e5bSMarcel Ziswiler colibri_t20 : all -9 rodata -29 text +20 726fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 2/-3 bytes: 140/-112 (28) 727fc3fe1c2SSimon Glass function old new delta 728fc3fe1c2SSimon Glass hash_command 80 160 +80 729fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 730fc3fe1c2SSimon Glass read_abs_bbt 204 208 +4 731fc3fe1c2SSimon Glass do_nandboot 760 756 -4 732fc3fe1c2SSimon Glass ext4fs_read_file 576 568 -8 733fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 734fc3fe1c2SSimon Glass ventana : all -37 bss -12 rodata -29 text +4 735fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 1/-3 bytes: 136/-124 (12) 736fc3fe1c2SSimon Glass function old new delta 737fc3fe1c2SSimon Glass hash_command 80 160 +80 738fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 739fc3fe1c2SSimon Glass ext4fs_iterate_dir 672 668 -4 740fc3fe1c2SSimon Glass ext4fs_read_file 568 548 -20 741fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 742fc3fe1c2SSimon Glass harmony : all -37 bss -16 rodata -29 text +8 743fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 2/-3 bytes: 140/-124 (16) 744fc3fe1c2SSimon Glass function old new delta 745fc3fe1c2SSimon Glass hash_command 80 160 +80 746fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 747fc3fe1c2SSimon Glass nand_write_oob_syndrome 428 432 +4 748fc3fe1c2SSimon Glass ext4fs_iterate_dir 672 668 -4 749fc3fe1c2SSimon Glass ext4fs_read_file 568 548 -20 750fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 751fc3fe1c2SSimon Glass medcom-wide : all -417 bss +28 data -16 rodata -93 text -336 752fc3fe1c2SSimon Glass u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288) 753fc3fe1c2SSimon Glass function old new delta 754fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 755fc3fe1c2SSimon Glass do_fat_read_at 2872 2904 +32 756fc3fe1c2SSimon Glass hash_algo 16 - -16 757fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 758fc3fe1c2SSimon Glass hash_command 420 160 -260 759fc3fe1c2SSimon Glass tec : all -449 bss -4 data -16 rodata -93 text -336 760fc3fe1c2SSimon Glass u-boot: add: 1/-1, grow: 1/-2 bytes: 88/-376 (-288) 761fc3fe1c2SSimon Glass function old new delta 762fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 763fc3fe1c2SSimon Glass do_fat_read_at 2872 2904 +32 764fc3fe1c2SSimon Glass hash_algo 16 - -16 765fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 766fc3fe1c2SSimon Glass hash_command 420 160 -260 767fc3fe1c2SSimon Glass plutux : all -481 bss +16 data -16 rodata -93 text -388 768fc3fe1c2SSimon Glass u-boot: add: 1/-1, grow: 1/-3 bytes: 68/-408 (-340) 769fc3fe1c2SSimon Glass function old new delta 770fc3fe1c2SSimon Glass crc32_wd_buf - 56 +56 771fc3fe1c2SSimon Glass do_load_serial_bin 1688 1700 +12 772fc3fe1c2SSimon Glass hash_algo 16 - -16 773fc3fe1c2SSimon Glass do_fat_read_at 2904 2872 -32 774fc3fe1c2SSimon Glass do_mem_crc 168 68 -100 775fc3fe1c2SSimon Glass hash_command 420 160 -260 776fc3fe1c2SSimon Glass powerpc: (for 5/5 boards) all +37.4 data -3.2 rodata -41.8 text +82.4 777fc3fe1c2SSimon Glass MPC8610HPCD : all +55 rodata -29 text +84 778fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) 779fc3fe1c2SSimon Glass function old new delta 780fc3fe1c2SSimon Glass hash_command - 176 +176 781fc3fe1c2SSimon Glass do_mem_crc 184 88 -96 782fc3fe1c2SSimon Glass MPC8641HPCN : all +55 rodata -29 text +84 783fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) 784fc3fe1c2SSimon Glass function old new delta 785fc3fe1c2SSimon Glass hash_command - 176 +176 786fc3fe1c2SSimon Glass do_mem_crc 184 88 -96 787fc3fe1c2SSimon Glass MPC8641HPCN_36BIT: all +55 rodata -29 text +84 788fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) 789fc3fe1c2SSimon Glass function old new delta 790fc3fe1c2SSimon Glass hash_command - 176 +176 791fc3fe1c2SSimon Glass do_mem_crc 184 88 -96 792fc3fe1c2SSimon Glass sbc8641d : all +55 rodata -29 text +84 793fc3fe1c2SSimon Glass u-boot: add: 1/0, grow: 0/-1 bytes: 176/-96 (80) 794fc3fe1c2SSimon Glass function old new delta 795fc3fe1c2SSimon Glass hash_command - 176 +176 796fc3fe1c2SSimon Glass do_mem_crc 184 88 -96 797fc3fe1c2SSimon Glass xpedite517x : all -33 data -16 rodata -93 text +76 798fc3fe1c2SSimon Glass u-boot: add: 1/-1, grow: 0/-1 bytes: 176/-112 (64) 799fc3fe1c2SSimon Glass function old new delta 800fc3fe1c2SSimon Glass hash_command - 176 +176 801fc3fe1c2SSimon Glass hash_algo 16 - -16 802fc3fe1c2SSimon Glass do_mem_crc 184 88 -96 803fc3fe1c2SSimon Glass... 804fc3fe1c2SSimon Glass 805fc3fe1c2SSimon Glass 806*8ea42101SSimon GlassThis shows that commit 19 has reduced codesize for arm slightly and increased 807*8ea42101SSimon Glassit for powerpc. This increase was offset in by reductions in rodata and 808*8ea42101SSimon Glassdata/bss. 809fc3fe1c2SSimon Glass 8103e1ded1fSDirk BehmeShown below the summary lines are the sizes for each board. Below each board 8113e1ded1fSDirk Behmeare the sizes for each function. This information starts with: 812fc3fe1c2SSimon Glass 813fc3fe1c2SSimon Glass add - number of functions added / removed 814fc3fe1c2SSimon Glass grow - number of functions which grew / shrunk 815fc3fe1c2SSimon Glass bytes - number of bytes of code added to / removed from all functions, 816fc3fe1c2SSimon Glass plus the total byte change in brackets 817fc3fe1c2SSimon Glass 818fc3fe1c2SSimon GlassThe change seems to be that hash_command() has increased by more than the 819fc3fe1c2SSimon Glassdo_mem_crc() function has decreased. The function sizes typically add up to 820fc3fe1c2SSimon Glassroughly the text area size, but note that every read-only section except 821fc3fe1c2SSimon Glassrodata is included in 'text', so the function total does not exactly 822fc3fe1c2SSimon Glasscorrespond. 823fc3fe1c2SSimon Glass 824fc3fe1c2SSimon GlassIt is common when refactoring code for the rodata to decrease as the text size 825fc3fe1c2SSimon Glassincreases, and vice versa. 826fc3fe1c2SSimon Glass 827fc3fe1c2SSimon Glass 82862005342SSimon GlassThe .buildman file 82962005342SSimon Glass================== 8304281ad8eSSimon Glass 83162005342SSimon GlassThe .buildman file provides information about the available toolchains and 83262005342SSimon Glassalso allows build flags to be passed to 'make'. It consists of several 83362005342SSimon Glasssections, with the section name in square brackets. Within each section are 83462005342SSimon Glassa set of (tag, value) pairs. 83562005342SSimon Glass 83662005342SSimon Glass'[toolchain]' section 83762005342SSimon Glass 83862005342SSimon Glass This lists the available toolchains. The tag here doesn't matter, but 83962005342SSimon Glass make sure it is unique. The value is the path to the toolchain. Buildman 84062005342SSimon Glass will look in that path for a file ending in 'gcc'. It will then execute 84162005342SSimon Glass it to check that it is a C compiler, passing only the --version flag to 84262005342SSimon Glass it. If the return code is 0, buildman assumes that it is a valid C 84362005342SSimon Glass compiler. It uses the first part of the name as the architecture and 84462005342SSimon Glass strips off the last part when setting the CROSS_COMPILE environment 84562005342SSimon Glass variable (parts are delimited with a hyphen). 84662005342SSimon Glass 84762005342SSimon Glass For example powerpc-linux-gcc will be noted as a toolchain for 'powerpc' 84862005342SSimon Glass and CROSS_COMPILE will be set to powerpc-linux- when using it. 84962005342SSimon Glass 85062005342SSimon Glass'[toolchain-alias]' section 85162005342SSimon Glass 85262005342SSimon Glass This converts toolchain architecture names to U-Boot names. For example, 85362005342SSimon Glass if an x86 toolchains is called i386-linux-gcc it will not normally be 8549b83bfdcSSimon Glass used for architecture 'x86'. Adding 'x86: i386 x86_64' to this section 8559b83bfdcSSimon Glass will tell buildman that the i386 and x86_64 toolchains can be used for 8569b83bfdcSSimon Glass the x86 architecture. 85762005342SSimon Glass 85862005342SSimon Glass'[make-flags]' section 85962005342SSimon Glass 86062005342SSimon Glass U-Boot's build system supports a few flags (such as BUILD_TAG) which 86162005342SSimon Glass affect the build product. These flags can be specified in the buildman 86262005342SSimon Glass settings file. They can also be useful when building U-Boot against other 86362005342SSimon Glass open source software. 8644281ad8eSSimon Glass 8654281ad8eSSimon Glass [make-flags] 8664281ad8eSSimon Glass at91-boards=ENABLE_AT91_TEST=1 8674281ad8eSSimon Glass snapper9260=${at91-boards} BUILD_TAG=442 8684281ad8eSSimon Glass snapper9g45=${at91-boards} BUILD_TAG=443 8694281ad8eSSimon Glass 8704281ad8eSSimon Glass This will use 'make ENABLE_AT91_TEST=1 BUILD_TAG=442' for snapper9260 87161242ac5SAndreas Bießmann and 'make ENABLE_AT91_TEST=1 BUILD_TAG=443' for snapper9g45. A special 87262005342SSimon Glass variable ${target} is available to access the target name (snapper9260 87362005342SSimon Glass and snapper9g20 in this case). Variables are resolved recursively. Note 87462005342SSimon Glass that variables can only contain the characters A-Z, a-z, 0-9, hyphen (-) 87562005342SSimon Glass and underscore (_). 8764281ad8eSSimon Glass 8774281ad8eSSimon Glass It is expected that any variables added are dealt with in U-Boot's 8784281ad8eSSimon Glass config.mk file and documented in the README. 8794281ad8eSSimon Glass 88062005342SSimon Glass Note that you can pass ad-hoc options to the build using environment 88162005342SSimon Glass variables, for example: 88262005342SSimon Glass 88362005342SSimon Glass SOME_OPTION=1234 ./tools/buildman/buildman my_board 88462005342SSimon Glass 8854281ad8eSSimon Glass 886e5a0e5d8SSimon GlassQuick Sanity Check 887e5a0e5d8SSimon Glass================== 888e5a0e5d8SSimon Glass 889e5a0e5d8SSimon GlassIf you have made changes and want to do a quick sanity check of the 8901d8104feSSimon Glasscurrently checked-out source, run buildman without the -b flag. This will 8911d8104feSSimon Glassbuild the selected boards and display build status as it runs (i.e. -v is 8921d8104feSSimon Glassenabled automatically). Use -e to see errors/warnings as well. 893e5a0e5d8SSimon Glass 894e5a0e5d8SSimon Glass 8955abab20dSSimon GlassBuilding Ranges 8965abab20dSSimon Glass=============== 8975abab20dSSimon Glass 8985abab20dSSimon GlassYou can build a range of commits by specifying a range instead of a branch 8995abab20dSSimon Glasswhen using the -b flag. For example: 9005abab20dSSimon Glass 9015abab20dSSimon Glass upstream/master..us-buildman 9025abab20dSSimon Glass 9035abab20dSSimon Glasswill build commits in us-buildman that are not in upstream/master. 9045abab20dSSimon Glass 9055abab20dSSimon Glass 906f79f1e0cSStephen WarrenBuilding Faster 907f79f1e0cSStephen Warren=============== 908f79f1e0cSStephen Warren 909f79f1e0cSStephen WarrenBy default, buildman executes 'make mrproper' prior to building the first 910f79f1e0cSStephen Warrencommit for each board. This causes everything to be built from scratch. If you 911f79f1e0cSStephen Warrentrust the build system's incremental build capabilities, you can pass the -I 912f79f1e0cSStephen Warrenflag to skip the 'make mproper' invocation, which will reduce the amount of 913f79f1e0cSStephen Warrenwork 'make' does, and hence speed up the build. This flag will speed up any 914f79f1e0cSStephen Warrenbuildman invocation, since it reduces the amount of work done on any build. 915f79f1e0cSStephen Warren 916f79f1e0cSStephen WarrenOne possible application of buildman is as part of a continual edit, build, 917f79f1e0cSStephen Warrenedit, build, ... cycle; repeatedly applying buildman to the same change or 918f79f1e0cSStephen Warrenseries of changes while making small incremental modifications to the source 919f79f1e0cSStephen Warreneach time. This provides quick feedback regarding the correctness of recent 920f79f1e0cSStephen Warrenmodifications. In this scenario, buildman's default choice of build directory 921f79f1e0cSStephen Warrencauses more build work to be performed than strictly necessary. 922f79f1e0cSStephen Warren 923f79f1e0cSStephen WarrenBy default, each buildman thread uses a single directory for all builds. When a 924f79f1e0cSStephen Warrenthread builds multiple boards, the configuration built in this directory will 925f79f1e0cSStephen Warrencycle through various different configurations, one per board built by the 926f79f1e0cSStephen Warrenthread. Variations in the configuration will force a rebuild of affected source 927f79f1e0cSStephen Warrenfiles when a thread switches between boards. Ideally, such buildman-induced 928f79f1e0cSStephen Warrenrebuilds would not happen, thus allowing the build to operate as efficiently as 929f79f1e0cSStephen Warrenthe build system and source changes allow. buildman's -P flag may be used to 930f79f1e0cSStephen Warrenenable this; -P causes each board to be built in a separate (board-specific) 931f79f1e0cSStephen Warrendirectory, thus avoiding any buildman-induced configuration changes in any 932f79f1e0cSStephen Warrenbuild directory. 933f79f1e0cSStephen Warren 934f79f1e0cSStephen WarrenU-Boot's build system embeds information such as a build timestamp into the 935f79f1e0cSStephen Warrenfinal binary. This information varies each time U-Boot is built. This causes 936f79f1e0cSStephen Warrenvarious files to be rebuilt even if no source changes are made, which in turn 937f79f1e0cSStephen Warrenrequires that the final U-Boot binary be re-linked. This unnecessary work can 938f79f1e0cSStephen Warrenbe avoided by turning off the timestamp feature. This can be achieved by 939f79f1e0cSStephen Warrensetting the SOURCE_DATE_EPOCH environment variable to 0. 940f79f1e0cSStephen Warren 941f79f1e0cSStephen WarrenCombining all of these options together yields the command-line shown below. 942f79f1e0cSStephen WarrenThis will provide the quickest possible feedback regarding the current content 943f79f1e0cSStephen Warrenof the source tree, thus allowing rapid tested evolution of the code. 944f79f1e0cSStephen Warren 945f79f1e0cSStephen Warren SOURCE_DATE_EPOCH=0 ./tools/buildman/buildman -I -P tegra 946f79f1e0cSStephen Warren 947f79f1e0cSStephen Warren 948fc3fe1c2SSimon GlassOther options 949fc3fe1c2SSimon Glass============= 950fc3fe1c2SSimon Glass 951fc3fe1c2SSimon GlassBuildman has various other command line options. Try --help to see them. 952fc3fe1c2SSimon Glass 9532c3deb97SSimon GlassWhen doing builds, Buildman's return code will reflect the overall result: 9542c3deb97SSimon Glass 9552c3deb97SSimon Glass 0 (success) No errors or warnings found 9562c3deb97SSimon Glass 128 Errors found 9572c3deb97SSimon Glass 129 Warnings found 9582c3deb97SSimon Glass 959fc3fe1c2SSimon Glass 9606eede34cSSimon GlassHow to change from MAKEALL 9616eede34cSSimon Glass========================== 9626eede34cSSimon Glass 9636eede34cSSimon GlassBuildman includes most of the features of MAKEALL and is generally faster 9646eede34cSSimon Glassand easier to use. In particular it builds entire branches: if a particular 9656eede34cSSimon Glasscommit introduces an error in a particular board, buildman can easily show 9666eede34cSSimon Glassyou this, even if a later commit fixes that error. 9676eede34cSSimon Glass 9686eede34cSSimon GlassThe reasons to deprecate MAKEALL are: 9696eede34cSSimon Glass- We don't want to maintain two build systems 9706eede34cSSimon Glass- Buildman is typically faster 9716eede34cSSimon Glass- Buildman has a lot more features 9726eede34cSSimon Glass 9736eede34cSSimon GlassBut still, many people will be sad to lose MAKEALL. If you are used to 9746eede34cSSimon GlassMAKEALL, here are a few pointers. 9756eede34cSSimon Glass 9766eede34cSSimon GlassFirst you need to set up your tool chains - see the 'Setting up' section 9776eede34cSSimon Glassfor details. Once you have your required toolchain(s) detected then you are 9786eede34cSSimon Glassready to go. 9796eede34cSSimon Glass 980e5a0e5d8SSimon GlassTo build the current source tree, run buildman without a -b flag: 981e5a0e5d8SSimon Glass 982e5a0e5d8SSimon Glass ./tools/buildman/buildman <list of things to build> 983e5a0e5d8SSimon Glass 984e5a0e5d8SSimon GlassThis will build the current source tree for the given boards and display 985e5a0e5d8SSimon Glassthe results and errors. 986e5a0e5d8SSimon Glass 987e5a0e5d8SSimon GlassHowever buildman usually works on entire branches, and for that you must 988e5a0e5d8SSimon Glassspecify a board flag: 9896eede34cSSimon Glass 9906eede34cSSimon Glass ./tools/buildman/buildman -b <branch_name> <list of things to build> 9916eede34cSSimon Glass 9926eede34cSSimon Glassfollowed by (afterwards, or perhaps concurrently in another terminal): 9936eede34cSSimon Glass 9946eede34cSSimon Glass ./tools/buildman/buildman -b <branch_name> -s <list of things to build> 9956eede34cSSimon Glass 9966eede34cSSimon Glassto see the results of the build. Rather than showing you all the output, 9976eede34cSSimon Glassbuildman just shows a summary, with red indicating that a commit introduced 9986eede34cSSimon Glassan error and green indicating that a commit fixed an error. Use the -e 999ed966657SSimon Glassflag to see the full errors and -l to see which boards caused which errors. 10006eede34cSSimon Glass 1001e5a0e5d8SSimon GlassIf you really want to see build results as they happen, use -v when doing a 10021d8104feSSimon Glassbuild (and -e to see the errors/warnings too). 1003e5a0e5d8SSimon Glass 10046eede34cSSimon GlassYou don't need to stick around on that branch while buildman is running. It 10056eede34cSSimon Glasschecks out its own copy of the source code, so you can change branches, 10066eede34cSSimon Glassadd commits, etc. without affecting the build in progress. 10076eede34cSSimon Glass 10086eede34cSSimon GlassThe <list of things to build> can include board names, architectures or the 10096eede34cSSimon Glasslike. There are no flags to disambiguate since ambiguities are rare. Using 10106eede34cSSimon Glassthe examples from MAKEALL: 10116eede34cSSimon Glass 10126eede34cSSimon GlassExamples: 10136eede34cSSimon Glass - build all Power Architecture boards: 10146eede34cSSimon Glass MAKEALL -a powerpc 10156eede34cSSimon Glass MAKEALL --arch powerpc 10166eede34cSSimon Glass MAKEALL powerpc 10176eede34cSSimon Glass ** buildman -b <branch> powerpc 10186eede34cSSimon Glass - build all PowerPC boards manufactured by vendor "esd": 10196eede34cSSimon Glass MAKEALL -a powerpc -v esd 10206eede34cSSimon Glass ** buildman -b <branch> esd 10216eede34cSSimon Glass - build all PowerPC boards manufactured either by "keymile" or "siemens": 10226eede34cSSimon Glass MAKEALL -a powerpc -v keymile -v siemens 10236eede34cSSimon Glass ** buildman -b <branch> keymile siemens 10246eede34cSSimon Glass - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: 10256eede34cSSimon Glass MAKEALL -c mpc83xx -v freescale 4xx 10266eede34cSSimon Glass ** buildman -b <branch> mpc83xx freescale 4xx 10276eede34cSSimon Glass 10286eede34cSSimon GlassBuildman automatically tries to use all the CPUs in your machine. If you 10296eede34cSSimon Glassare building a lot of boards it will use one thread for every CPU core 10306eede34cSSimon Glassit detects in your machine. This is like MAKEALL's BUILD_NBUILDS option. 10316eede34cSSimon GlassYou can use the -T flag to change the number of threads. If you are only 10326eede34cSSimon Glassbuilding a few boards, buildman will automatically run make with the -j 10336eede34cSSimon Glassflag to increase the number of concurrent make tasks. It isn't normally 10346eede34cSSimon Glassthat helpful to fiddle with this option, but if you use the BUILD_NCPUS 10356eede34cSSimon Glassoption in MAKEALL then -j is the equivalent in buildman. 10366eede34cSSimon Glass 10376eede34cSSimon GlassBuildman puts its output in ../<branch_name> by default but you can change 10386eede34cSSimon Glassthis with the -o option. Buildman normally does out-of-tree builds: use -i 10396eede34cSSimon Glassto disable that if you really want to. But be careful that once you have 10406eede34cSSimon Glassused -i you pollute buildman's copies of the source tree, and you will need 10416eede34cSSimon Glassto remove the build directory (normally ../<branch_name>) to run buildman 10426eede34cSSimon Glassin normal mode (without -i). 10436eede34cSSimon Glass 10446eede34cSSimon GlassBuildman doesn't keep the output result normally, but use the -k option to 10456eede34cSSimon Glassdo this. 10466eede34cSSimon Glass 10476eede34cSSimon GlassPlease read 'Theory of Operation' a few times as it will make a lot of 10486eede34cSSimon Glassthings clearer. 10496eede34cSSimon Glass 10506eede34cSSimon GlassSome options you might like are: 10516eede34cSSimon Glass 10526eede34cSSimon Glass -B shows which functions are growing/shrinking in which commit - great 10536eede34cSSimon Glass for finding code bloat. 10546eede34cSSimon Glass -S shows image sizes for each commit (just an overall summary) 10556eede34cSSimon Glass -u shows boards that you haven't built yet 10566eede34cSSimon Glass --step 0 will build just the upstream commit and the last commit of your 10576eede34cSSimon Glass branch. This is often a quick sanity check that your branch doesn't 10586eede34cSSimon Glass break anything. But note this does not check bisectability! 10596eede34cSSimon Glass 10606eede34cSSimon Glass 1061fc3fe1c2SSimon GlassTODO 1062fc3fe1c2SSimon Glass==== 1063fc3fe1c2SSimon Glass 1064fc3fe1c2SSimon GlassThis has mostly be written in my spare time as a response to my difficulties 1065fc3fe1c2SSimon Glassin testing large series of patches. Apart from tidying up there is quite a 10661d8104feSSimon Glassbit of scope for improvement. Things like better error diffs and easier 10673e1ded1fSDirk Behmeaccess to log files. Also it would be nice if buildman could 'hunt' for 10681d8104feSSimon Glassproblems, perhaps by building a few boards for each arch, or checking 10691d8104feSSimon Glasscommits for changed files and building only boards which use those files. 1070fc3fe1c2SSimon Glass 1071*8ea42101SSimon GlassA specific problem to fix is that Ctrl-C does not exit buildman cleanly when 1072*8ea42101SSimon Glassmultiple builder threads are active. 1073fc3fe1c2SSimon Glass 1074fc3fe1c2SSimon GlassCredits 1075fc3fe1c2SSimon Glass======= 1076fc3fe1c2SSimon Glass 1077fc3fe1c2SSimon GlassThanks to Grant Grundler <grundler@chromium.org> for his ideas for improving 1078fc3fe1c2SSimon Glassthe build speed by building all commits for a board instead of the other 1079fc3fe1c2SSimon Glassway around. 1080fc3fe1c2SSimon Glass 1081fc3fe1c2SSimon Glass 1082fc3fe1c2SSimon GlassSimon Glass 1083fc3fe1c2SSimon Glasssjg@chromium.org 1084fc3fe1c2SSimon GlassHalloween 2012 1085fc3fe1c2SSimon GlassUpdated 12-12-12 1086fc3fe1c2SSimon GlassUpdated 23-02-13 1087