In this document I will describe how to build a toolchain for ARM.

setup build environment

In this document we will install the toolchain in the users home directory under $HOME/arm-elf.

Installation will take place in /tmp/toolchain.

$ mkdir -p /tmp/toolchain/src

$ mkdir -p /tmp/toolchain/arm-elf

$ mkdir -p $HOME/arm-elf/bin

$ export PATH=$HOME/arm-elf/bin:$PATH

binutils

Download binutils from http://ftp.gnu.org/gnu/binutils/binutils-2.21.1.tar.gz

$ cd /tmp/toolchain/src

$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1.tar.gz

$ tar -zxvf binutils-2.21.1.tar.gz

Configure and build.

$ cd /tmp/toolchain/arm-elf

$ mkdir binutils

$ cd binutils

$ ../../src/binutils-2.21.1/configure –prefix=$HOME/arm-elf –target=arm-elf –disable-nls

$ make

$ make install

gcc

checkout trunk version of gcc from svn

$ cd /tmp/toolchain/src

$ svn co svn checkout svn://gcc.gnu.org/svn/gcc/trunk gcc-trunk

configure and build gcc

$ cd /tmp/toolchain/arm-elf

$ mkdir gcc

$ cd gcc

$ ../../src/gcc-trunk/configure –prefix=$HOME/arm-elf –target=arm-elf –disable-werror –disable-nls –enable-interwork –enable-multilib –enable-languages=“c,c++” –enable-target-optspace –with-float=soft –with-newlib –with-headers=/home/alios/src/toolchain/src/newlib/newlib/libc/include/ –with-system-zlib –disable-shared

$ make

$ make install

newlib

checkout newlib from cvs

$ cd /tmp/toolchain/src

$ cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login ## use 'anoncvs' as password

$ cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib

configure and build

$ cd /tmp/toolchain/arm-elf

$ mkdir newlib

$ cd newlib

$ ../../src/newlib/configure –prefix=$HOME/arm-elf –target=arm-elf –enable-interwork –enable-multilib –enable-target-optspace –with-float=soft

$ make

$ make install