(Crosstoolchain documentation is now collected and indexed on CrossToolchains) = Building a Cross Compiler = Very few people need to build a cross-toolchain. It is a complicated business and unless you are doing something really quite obscure you should just install a suitable apt-able toolchain. Installation info is on CrossToolchains. We'll say that again: '''MOST PEOPLE SHOULDN'T BE BUILDING THEIR OWN CROSS-TOOLCHAIN - THEY SHOULD JUST INSTALL A PRE-BUILT ONE LIKE ANY OTHER PACKAGE'''. But there are reasons why you might need to do this. = I really do want to build a cross compiler = Pick the most relevant heading from the list below. == Nomenclature == TARGET is the architecture the compiler builds code for. HOST (same as BUILD in this case) is the architecture the compiler runs on (and is currently being built on) == I want a combination of HOST x TARGET not in Debian (on jessie or later) == === TARGET is a debian release architecture === If TARGET is a debian release architecture then this is fairly straightforward: * Install the cross-gcc-dev binary package {{{ apt-get install cross-gcc-dev }}} This is available from jessie (Debian 8) onwards * Generate a cross-gcc-- source package {{{ TARGET_LIST= HOST_LIST= cross-gcc-gensource }}} Fill in your own , and above. (e.g. {{{TARGET_LIST="armel armhf" HOST_LIST="amd64" cross-gcc-gensource 4.9}}}) In jessie only '4.9' is supported as a gcc version. This will generate (in a directory called cross-gcc-packages-) a cross-gcc-- source package for each arch in the TARGET_LIST. '''Note''': in jessie cross-gcc-gensource will fail if dash is your default shell. (DebianBug:#780583). Either set the /bin/sh link to bash {{{sudo ln -sf bash /bin/sh}}} or add {{{SHELL := bash}}} near the start of /usr/share/cross-gcc/template/rules.generic (fixed in cross-gcc 17) * Build it {{{ cd cross-gcc-- sbuild -d jessie }}} You will need sbuild 0.64.3 or later installed, and a suitable chroot or build env for the target suite. You will also need a -binutils package. === Building corresponding binutils and gcc-metapackages === If the cross-binutils you need is not available on your arch, build one (or more) like this: {{{ apt-get source cross-binutils cd cross-binutils-0.23 sudo apt-get build-dep cross-binutils TARGET_LIST="arm64" HOST_LIST="armhf" debian/rules control TARGET_LIST="arm64" HOST_LIST="armhf" dpkg-buildpackage }}} To make your toolchain convenient to use you need a set of metapackages which provide links from tools to versioned tools (so gcc-arm-linux-gnueabihf links to gcc-4.9-arm-linux-gnueabihf etc). The cross-gcc-defaults package provides those: {{{ apt-get source cross-gcc-defaults cd cross-gcc-defaults-0.7 TARGET_LIST='armhf' debian/generate-pkgfiles.pl dpkg-buildpackage }}} cross-gcc-defaults is available in the jessie external toolchain repository and in unstable. A more manual build of cross-gcc, probably best done in a chroot, could be {{{ cd packages/cross-gcc-4.9- dpkg --add-architecture apt-get update [install build-deps] dpkg-buildpackage }}} (This essentially automates the procedure described on MultiarchCrossToolchainBuild). === TARGET is not a debian release architecture === If TARGET is not a debian release architecture (debian-ports architecture or a new arch), then it may be much harder because you need to do a full kernel/libc/gcc bootstrap. The cross-toolchain-base package (in unstable) can do this for some architectures. The rebootstrap tool can do it for any architecture. === I want the very latest arm support === Linaro's cross-toolchains (tarball install, sadly) are very up to date with patches and support, and may well be useful. But they are supplied as a binary tarball, not as debian packages. === I want toolchain packages for wheezy === The packages on emdebian.org aimed at wheezy have been uninstallable for a long time. Install buildcross from experimental and use that to build your own.