Most of the components of the 64-bit ARM toolchain have been released, so I've put together some details on building a cross compiler for aarch64. At present, this is only binutils & compiler (ie, no libc), so is probably not useful for applications. However, I have a 64-bit ARM kernel building without any trouble.
Update: looking for an easy way to install a cross-compiler on Ubuntu or debian? Check out aarch64 cross compiler packages for Ubuntu & Debian.
pre-built toolchain
If you're simply looking to download a cross compiler, here's one I've built earlier: aarch64-cross.tar.gz (.tar.gz, 85MB). It's built for an x86_64 build machine, using Ubuntu 12.04 LTS, but should work with other distributions too.
The toolchain is configured for paths in /opt/cross/
. To install it, do a:
[jk@pecola ~]$ sudo mkdir /opt/cross [jk@pecola ~]$ sudo chown $USER /opt/cross [jk@pecola ~]$ tar -C /opt/cross/ -xf aarch64-x86_64-cross.tar.gz
If you'd like to build your own, here's how:
initial setup
We're going to be building in ~/build/aarch64-toolchain/
, and installing into /opt/cross/aarch64/
. If you'd prefer to use other paths, simply change these in the commands below.
[jk@pecola ~]$ mkdir -p ~/build/arm64-toolchain/ [jk@pecola ~]$ cd ~/build/arm64-toolchain/ [jk@pecola ~]$ prefix=/opt/cross/aarch64/
We'll also need a few packages for the build:
[jk@pecola ~]$ sudo apt-get install bison flex libmpfr-dev libmpc-dev texinfo
binutils
I have a git repository with a recent version of ARM's aarch64 support, plus a few minor updates at git://kernel.ubuntu.com/jk/arm64/binutils.git (or browse the gitweb view). To build:
Update: arm64 support has been merged into upstream binutils, so you can now use the official git repository. The commit 02b16151
builds successfully for me.
[jk@pecola arm64-toolchain]$ git clone git://gcc.gnu.org/git/binutils.git [jk@pecola arm64-toolchain]$ cd binutils [jk@pecola binutils]$ ./configure --prefix=$prefix --target=aarch64-none-linux [jk@pecola binutils]$ make [jk@pecola binutils]$ make install [jk@pecola binutils]$ cd ..
kernel headers
Next up, the kernel headers. I'm using Catalin Marinas' kernel tree on kernel.org here. We don't need to do a full build (we don't have a compiler yet..), just the headers_install
target.
[jk@pecola arm64-toolchain]$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64.git [jk@pecola arm64-toolchain]$ cd linux-aarch64 [jk@pecola linux-aarch64]$ git reset --hard b6fe1645 [jk@pecola linux-aarch64]$ make ARCH=arm64 INSTALL_HDR_PATH=$prefix headers_install [jk@pecola linux-aarch64]$ cd ..
gcc
And now we should have things ready for the compiler build. I have a git tree up at git://kernel.ubuntu.com/jk/arm64/gcc.git (gitweb), but this is just the aarch64 branch of upstream gcc.
[jk@pecola arm64-toolchain]$ git clone git://kernel.ubuntu.com/jk/arm64/gcc.git [jk@pecola arm64-toolchain]$ cd gcc/aarch64-branch/ [jk@pecola aarch64-branch]$ git reset --hard d6a1e14b [jk@pecola aarch64-branch]$ ./configure --prefix=$prefix \ --target=aarch64-none-linux --enable-languages=c \ --disable-threads --disable-shared --disable-libmudflap \ --disable-libssp --disable-libgomp --disable-libquadmath [jk@pecola aarch64-branch]$ make [jk@pecola aarch64-branch]$ make install [jk@pecola aarch64-branch]$ cd ../..
That's it! You should have a working compiler for arm64 kernels in /opt/cross/aarch64
.
I've used your build instructions (Ubuntu 12.04) and I have the following comments for you:
=== binutils ===
I could not locate "libmfpr-dev", did you mean "libmpfr-dev" instead?
The binutils/opcodes/Makefile uses the option "-Werror" which causes the build to fail on my machine due to warnings. This might be replaced by "-Wno-error"
=== gcc ===
Thank you very much, at least it seems that the compiler is available in /opt/cross/aarch64
regards, Benedikt