Emdebian Toolchain

Get the binaries

Firstly, add emdebian-archive-keyring from Debian:

apt-get install emdebian-archive-keyring

This page has been created to tell about latest status and what things could be done to improve Emdebian toolchain.

To use this toolchain add to your /etc/apt/sources.list or /etc/apt/sources.list.d/emdebian.sources.list:

Currently, toolchains for Squeeze are preferred.

If using Wheezy or unstable, add a Squeeze source for your own architecture

echo "deb http://ftp.us.debian.org/debian/ squeeze main" >> /etc/apt/sources.list.d/emdebian.list

using your normal Debian mirror for dependencies which are no longer in wheezy or unstable.

If you skip this on Wheezy the following apt-get command will complain with:

The following packages have unmet dependencies:
gcc-4.4-arm-linux-gnueabi : Depends: cpp-4.4-arm-linux-gnueabi (= 4.4.5-8) but it is not going to be installed

# -- Emdebian cross toolchains
# deb http://www.emdebian.org/debian/ unstable main
# deb http://www.emdebian.org/debian/ testing main
deb http://www.emdebian.org/debian/ squeeze main
# deb http://www.emdebian.org/debian/ lenny main

Search and install packages for the $ARCH that you need, for example 'armel':

$ apt-cache search armel

The cross compiler for armel uses the arm-linux-gnueabi triplet name:

apt-get install g++-4.4-arm-linux-gnueabi

Get all the libraries you need

For most users:

apt-get install xapt

For Squeeze, xapt is available in backports. To enable, see the backports instructions.

Fetch any dependencies you might need for your custom software which needs to be built using the cross compiler. e.g. for armel


xapt -a armel libfoo-dev

Wheezy and later

xapt -a armel -m libfoo-dev

Lenny only

Need to install apt-cross on Lenny only

apt-get install apt-cross dpkg-cross


apt-cross -a $ARCH -u

Fetch your cross favorite library

apt-cross -a $ARCH -i $LIBRARY

GDB Cross package

You can also search for gdb cross package.

There is a know issue on gdb cross package (version <7.0).

# apt-get install gdb-arm-linux-gnu
dpkg: error processing /var/cache/apt/archives/gdb-arm-linux-gnu_6.8-3_i386.deb (--unpack):
 trying to overwrite `/usr/share/man/man1/gdb.1.gz', which is also in package gdb
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Processing triggers for man-db ...
Errors were encountered while processing:
E: Sub-process /usr/bin/dpkg returned an error code (1)

Until it gets fixed, you could work arround it with

# dpkg -i --force-overwrite \

Build your own from sources

Use buildcross (from experimental) to do the hard job or manually you can do:

$ dpkg-cross -a <debian_arch> -b linux-libc-dev_XXX_<debian_arch>.deb
$ dpkg-cross -a <debian_arch> -b libc6_XXX_<debian_arch>.deb
$ dpkg-cross -a <debian_arch> -b libc6-dev_XXX_<debian_arch>.deb

# You can also try to get this packages with xapt tool:
$ sudo xapt -a <debian_arch> linux-libc-dev libc6 libc6-dev zlib1g-dev libmpfr-dev libgmp3-dev 

$ apt-get source binutils; cd binutils-*
$ TARGET=<your-target> dpkg-buildpackage -b -uc -us
$ cd..
$ sudo dpkg -i *.deb
# So far we got linux kernel headers, libc6 libraries and headers, and binutils under /usr/<triplet>/

$ apt-get source gcc-4.X
$ cd gcc-4.X-*
$ GCC_TARGET=${ARCH} DEB_CROSS=yes fakeroot debian/rules control
        GCC_TARGET=${ARCH} DEB_CROSS=yes dpkg-buildpackage -us -uc -rfakeroot

$ apt-get source gdb
$ cd gdb-*
$ GDB_TARGET=${ARCH} dpkg-buildpackage -rfakeroot -uc -us

# Install the packages and enjoy!

Build for an specific mcpu, mabi, etc..

> Has anyone looked at what gains can be had by rebuilding > packages with, say, Cortex-A8 or other optimizations for processors that > support them?

Well, it has a VFP FPU, so floating point apps will run N times faster, and GCC optimizes some kinds of integer loops into SIMD instructions for the NEON, beside the different instruction timing info and pipeline description for better instruction scheduling.

The easiest way to try this is to make fake versions of gcc and put them at the start of the PATH:

mkdir ~/cortex
cat > ~/cortex/gcc << EOF
#! /bin/sh

exec gcc-4.3 -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=softfp "$@"
chmod 755 ~/cortex/gcc
ln -s gcc ~/cortex/cc
ln -s gcc ~/cortex/gcc-4.3
ln -s gcc ~/cortex/arm-linux-gnueabi-gcc

and fool the build system into using them

PATH=~/cortex:$PATH dpkg-buildpackage -rfakeroot -B

I'd be interested to know what difference it makes to non-FP applications (if you have some tests, it would be nice to post them to debian-arm@ mailing lists) Stolen bits from Martin site

Emdebian.org toolchain autobuilder (deprecated)

Emdebian uses buildcross to build the toolchains, paamboli adds an upper layer to buildcross to do distributed building using secure shells.

Emdebian discourages to use this set of scripts to build one toolchain, as it can ruin your system if you do not have the proper set up. EmdebianToolchainAutobuilder page contains some more information on this topic.


Cross tools in Debian

Enabling -source packages build depends

Forking privately


Using The Toolchain outside a chroot

Some people use a chroot of sid and emdebian from another debian-derivative host system. The toolchain as it is installed in the chroot is *almost* capable of being used as-is from outside.

The only problem is the symlinks pointing back/forth to /etc/alternatives (see .../usr/bin/arm-linux-gnueabi-gcc pointing eventualy to the .../usr/bin/arm-linux-gnueabi-gcc-4.3 binary) -- these are absolute path and will not work on the host. You can manualy remove these link and replace them by relative equivalents and you will get a fully working toolchain accessible from anywhere. This script might help you to pack your toolchain and relocate it as you wish (Kudos to Bus Error).


Build old style compilers


Build sysroot compilers


Build multiarch compilers

See http://wiki.debian.org/MultiarchCrossToolchains