Toolchain

The toolchain is a set of binaries, system libraries and tools which allow you to build (in our case, cross-compile) u-boot and the kernel for a target platform. This will, to some limited extent, need to match the target rootfs. A large and incompatible change has taken place recently, through the Hard Float ABI. Now, two different debian and ubuntu ports are binary incompatible with each other.

= Part of distributions =

Recent (from 12.04 on)
A complete cross toolchain is available as a package, just run:

apt-get install gcc-arm-linux-gnueabihf

Older
For older versions, you need to use an external repository.

add-apt-repository ppa:linaro-maintainers/toolchain apt-get update apt-get install gcc-arm-linux-gnueabihf

Debian
To install Cross-development Toolchains for Debian follow the instructions on emdebian.org.

Note: Emdebian's armhf-toolchain is only available for Debian/unstable at the moment.

Edit your /etc/apt/sources.list as approriate and advised above: deb http://www.emdebian.org/debian/ unstable main Install Cross Compiler and build utilities: apt-get install emdebian-archive-keyring apt-get update apt-get install gcc-4.7-arm-linux-gnueabihf You might want additional tools for building a sunxi kernel that are not related to the cross-compiler: apt-get install build-essential git debootstrap u-boot-tools Create a ~/bin to store symlinks to specific version of the cross-compiler-tools so they are found by the kernel build system: mkdir ~/bin cd ~/bin for i in /usr/bin/arm-linux-gnueabihf*-4.7 ; do j=${i##/usr/bin/}; ln -s $i ${j%%-4.7} ; done

Usually ~/bin is already included in $PATH, otherwise you will need to add these lines in your .profile: if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
 * 1) set PATH so it includes user's private bin if it exists

= Standalone =

These standalone toolchains are big tarballs which come with everything you need.

Download
Linaro has been very good at changing the location and availability of just about everything, making it very hard to keep a wiki up to date which refers to it. So the below download locations might be stale already.

Currently, the main selection page is here.

It lists the following toolchains:
 * gcc-linaro 4.5 (4.5-2012.03):
 * gcc-linaro 4.6 (4.6-2013.05):
 * gcc-linaro 4.7 (4.7-2014.06):
 * gcc-linaro 4.8 (4.8-2014.04):
 * gcc-linaro 4.9 (4.9-2014.07): (this link will go dead the quickest.)

When in doubt, try 4.7 first.

'''WARNING: Do not use the 4.8 gcc versions of the linaro toolchain to build legacy kernels (sunxi-3.4 etc.), those seem to have issues building the kernel. Use an earlier version instead.'''.

Usage
Take a gcc-linaro-. - . .tar.xz file and untar it. You will find a bin directory in there. Temporarily add it to the environment you are building from:

export PATH="$PATH":/home/user/folder/gcc-linaro-arm-linux-gnueabihf-*_linux/bin/

no hardfloat?
Recent linaro toolchains are Hard Float (hf), this will be used throughout the wiki you see something like: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Replace arm-linux-gnueabihf- with arm-linux-gnueabi- if your are not using a hardfloat toolchain.

Code Sourcery
Another option is to install the Sourcery toolchain from Code Sourcery (now in Mentor Graphics). Download Code Sourcery G++ 2010 9-50 https://sourcery.mentor.com/sgpp/lite/arm/portal/release1600 (official link, email registration required)

Direct link: https://netst.org/pub/linux/ARM/CodeSourcery/arm-2010.09-50-arm-none-linux-gnueabi.bin (unofficial link)

chmod +x arm-2010.09-50-arm-none-linux-gnueabi.bin ./arm-2010.09-50-arm-none-linux-gnueabi.bin

If you are using Ubuntu, you may need to switch to use bash shell (instead of dash shell) sudo dpkg-reconfigure -plow dash     ( then choose [No], this changes from using dash shell to using bash shell )

It will now install CodeSourcery with a GUI installer

Follow default settings and do Next, Next, Next, etc…

It should install in: ~/CodeSourcery/     ( for example: /home/penguin/CodeSourcery/ )

Make sure the CodeSourcery binaries are added to your path (if your username is penguin, then this should be correct):

echo "export PATH=~/CodeSourcery/Sourcery_G++_Lite/bin:\${PATH}" >> ~/.bashrc export PATH=~/CodeSourcery/Sourcery_G++_Lite/bin:$PATH  (or you can just spawn a new terminal window to update the path) echo $PATH (make sure your path is updated)

= External links =
 * Homepage ( mentor.com )
 * Direct download ( mentor.com )