Release Process for the Linaro Binary Builds

This process is run shortly after the mid-month Linaro toolchain source release and prepares the binary builds for the main end of month release.


The toolchain release is the third to last Thursday. The Linaro release is the last Thursday.

The binary versions are updated no later than a week after the toolchain release.

During release week:

  • Friday: last patches land
  • Monday: release process started, release candidate build started
  • Monday or Tuesday: release candidate testing
  • Tuesday or Wednesday: publish, notify Release managers

Terminology is the top level Linaro build script at contrib/linaro/


This step is expected to start earlier in case there are unexpected fails.

  1. Checkout a fresh source tree: bzr branch lp:~linaro-toolchain-dev/crosstool-ng/linaro

  2. Check the GCC and GDB versions in config/{cc,debug}/
  3. Check the GCC and GDB versions in samples/linaro-*/crosstool.config
  4. Check the GCC and GDB versions in contrib/linaro/patches/{gcc. gdb}
  5. Grep for the previous version number across the whole tree and check
  6. Reset SPIN to empty if necessary
  7. Refresh the Windows installer file (documented in "Binary build" section of

  8. When building a prerelease with the source in an unofficial location: Add the URL to function do_cc_get() in scripts/build/cc/ - after the tarball is released, remove the URL
  9. Push and wait for the test build to complete

Create candidate

The auto builders have finished running the build.

  1. Tag the repo: bzr tag

  2. Make the release tarball: make -f contrib/linaro/ release

  3. Copy the tarball to the builders: scp builds/release/*.bz2

  4. Go to

  5. Login and return
  6. Enter as the job

  7. Select i686-lucid

  8. Click Spawn

  9. Spawn AARCH64 build:
    • Wait about 10 minutes. After is not in the wait queue of "i686-lucid" (check

    • Enter as the job

    • Enter CROSSTOOL_NG_TARGETS = aarch64-linux-gnu aarch64-none-elf into Special instructions.

    • Select i686-lucid

    • Click Spawn

    • Repeat for CROSSTOOL_NG_TARGETS = arm-none-eabi
    • Repeat for CROSSTOOL_NG_TARGETS = armeb-linux-gnueabihf armeb-none-eabi
    • Repeat for CROSSTOOL_NG_TARGETS = aarch64_be-linux-gnu aarch64_be-none-elf


In case that we need respin a build,

  1. Update the SPIN in contrib/linaro/ to -01, -02, and so on.
  2. Make the release tarball: make -f contrib/linaro/ release. Note in this step, the tarball name will have the SPIN:$(SPIN).

  3. Following the steps in "Create candidate" to create candidate with new name.


The auto builders have finished building the candidate.

  1. Fetch the builds from S3. This is done by ssh-ing to, and running s3cmd get s3://linaro-toolchain-builds/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar.xz (same for all other resulting files, s3cmd ls s3://linaro-toolchain-builds/ to see available files). Perhaps use

  2. Open the Linaro Binary Release Checksheet Template

  3. Save as Linaro Binaries Release Checksheet

  4. Using fresh virtual machines, run the checksheet for Precise, RHEL5 and Windows 7

Here are the steps to run 'misc' tests:

Here are steps to run "Package tests":

  • Add the toolchain dir to PATH
  • cd linaro crosstool-ng/contrib/linaro/tests/
  • make fetch
  • make
  • mv install install.a9

// The following is to test armvt4 soft float toolchain

  • make clean
  • mv Makefile Makefile.a9
  • mv Makefile.armv4t Makefile
  • make
  • mv install install.v4t
  • scp -r install* to a A9 multiarch system (

  • ssh to A9 system
    • For A9 test:
      • cd install.a9 export LD_LIBRARY_PATH=.../install.a9/lib
      • /bin/grep "1234" . -r
      • /bin/arm-linux-gnueabihf-aspell --help
    • For v4t test:
      • cd install.v4t export LD_LIBRARY_PATH=.../install.v4t/lib
      • /bin/grep "1234" . -r
      • /bin/arm-linux-gnueabihf-aspell --help

Here are steps for gdb server test:

  • scp gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/arm-linux-gnueabihf/debug-root/usr/bin/gdbserver to the A9 system.
  • ssh the A9 system
    • On A9 system,
      • cd misc (just copied in previous test)
      • ../gdbserver --remote-debug --multi localhost:1234 ./sort.elf
  • On Precise host system, run the gdb an connect to the gdb server.
  • On Win7 and RHEL5, we just try to run gdb, set breakpoint and quit.

Notes: Need test both ARMv7-A Hardfloat and AArch64 targets. Refer on how to setup an ARMV8 simulation.

AArch64 test is similar with ARMv7-A except:

  • Ignore the armv4t build and test in misc and package tests.
  • Ignore the gdb server test.

If the test fails, bump the spin and repeat.


The build is finished and tested.

  1. Bump SPIN in to tomorrows date
  2. Commit
  3. Push the tag and spin bump


  1. Create a release against the milestone in Launchpad (such as this)

  2. Fill in the release notes similar to
    The Linaro Toolchain and Builds and Baselines Working Groups are pleased to announce the release of the Linaro Toolchain Binaries, a pre-built version of Linaro GCC and Linaro GDB that runs on generic Linux or Windows and targets the glibc Linaro Evaluation Build.
    Uses include:
     * Cross compiling ARM applications from your laptop
     * Remote debugging
     * Build the Linux kernel for your board
    What's included:
     * Linaro GCC 4.8
     * Linaro GDB 7.6.1
     * A statically linked gdbserver
     * A system root
     * Manuals under share/doc/
    The system root contains the basic header files and libraries to link your programs against.
    Interesting changes include:
     * The sample configurations no longer require the LSB tools
     * The build now works behind a HTTP proxy
    The Linux version is supported on Ubuntu 10.04.3 and 12.04, Debian 6.0.2, Fedora 16, openSUSE 12.1, Red Hat Enterprise Linux Workstation 5.7 and later, and should run on any Linux Standard Base 3.0 compatible distribution.  Please see the README about running on x86_64 hosts.
    The Windows version is supported on Windows XP Pro SP3, Windows Vista Business SP2, and Windows 7 Pro SP1.
    The binaries and build scripts are available from:
    Need help?  Ask a question on
    Already on Launchpad?  Submit a bug at
    On IRC?  See us on #linaro on Freenode.
    Other ways that you can contact us or get involved are listed at
  3. Use contrib/linaro/ to push the binaries to Launchpad. Use EC2 if required. Upload crosstool-ng tarball ( and README manually (Get README.txt from the build e.g. gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/share/doc/gcc-linaro-arm-linux-gnueabihf/README.txt).

  4. Verify the MD5 sum of the uploads
  5. Download the files and check that they extract correctly

Update others

  1. Create a new milestone for the next release
  2. Change all Fix committed tickets against the milestone to Fix released

  3. Push the current release information at WorkingGroups/ToolChain to the previous releases page

  4. Update the current release table


Create a new project announcment Launchpad with the title Linaro Toolchain Binaries released and release notes as body.

Send an e-mail to Linaro Toolchain mailing list <> with the subject [ANNOUNCE] Linaro Toolchain Binaries released and release notes as body.


Unsupported variants are updated with each build scripts release. The binary builds are updated on demand and released via

The variants are:

  • arm-none-eabi: a Cortex-M3 bare metal configuration
  • arm-linux-gnueabihf-raspbian: a ARMv6 hard float configuration for the Raspberry Pi

To build a variant:

  • Wait for the main release to complete and be archived
  • Spawn a new job named like crosstool-ng-linaro-1.13.1-4.8-2012.11-20121127 with CROSSTOOL_NG_TARGETS = arm-none-eabi arm-linux-gnueabihf-raspbian or similar.

Note that the _src tarball is named after the crosstool-ng version and will overwrite the tarball from the main release.

CategoryHowTo CategoryProcess

WorkingGroups/ToolChain/BinaryBuild/ReleaseProcess (last modified 2013-11-28 03:52:56)