Differences between revisions 49 and 50
Revision 49 as of 2015-05-23 20:04:25
Size: 3548
Editor: wookey
Comment:
Revision 50 as of 2015-05-23 22:52:25
Size: 4196
Editor: wookey
Comment: Correct confiused HOST/TARGET references. Add cross-gcc-defaults references
Deletions are marked like this. Additions are marked like this.
Line 15: Line 15:
== I want a combination of BUILD x HOST not in Debian (on jessie or later) == == Nomenclature ==
Line 17: Line 17:
=== HOST is a debian release architecture === 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)
Line 19: Line 20:
If HOST is a debian release architecture then this is fairly straightforward: == 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:
Line 47: Line 52:
=== Building corresponding binutils and gcc-metapackages ===
Line 56: Line 63:
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.
Line 67: Line 82:
=== HOST is not a debian release architecture === === TARGET is not a debian release architecture ===
Line 69: Line 84:
If HOST 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. cross-toolchain-base packages exist in Ubuntu for this for some architectures, but the procedure is broken in Debian at the time of writing (May 2015) so you'll need to fiddle with patches. We do hope to have this working soon. 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.

(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-<gccver>-<arch> source package

TARGET_LIST=<hostarch> cross-gcc-gensource <gccver>

Fill in your own <hostarch> and <gccver> above. (e.g. TARGET_LIST="armel armhf" 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-<buildarch>) a cross-gcc-<gccver>-<arch> source package for each arch in the TARGET_LIST.

Note: in jessie cross-gcc-gensource will fail if dash is your default shell. (). 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-<gccver>-<arch>
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 <triplet>-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-<hostarch>
dpkg --add-architecture <hostarch>
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.

<some instructions here would be helpful>