Development environment

This page describes how to setup a cross compiler on a linux x86 host tailored for the Raspberry  Pi cpu's.

The follow libc and libgcc libraries are available :

pi@xubuntu:/opt/gnuarm-hardfp$ arm-none-eabi-gcc -print-multi-lib
.;
armv8-a/cortex-a53/hardfp/fp-armv8;@march=armv8-a@mtune=cortex-a53@mfloat-abi=hard@mfpu=fp-armv8
armv8-a/cortex-a53/hardfp/neon-fp-armv8;@march=armv8-a@mtune=cortex-a53@mfloat-abi=hard@mfpu=neon-fp-armv8
armv7-a/cortex-a7/hardfp/vfpv4;@march=armv7-a@mtune=cortex-a7@mfloat-abi=hard@mfpu=vfpv4
armv7-a/cortex-a7/hardfp/neon-vfpv4;@march=armv7-a@mtune=cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4
armv6zk/arm1176jzf-s/hardfp/vfp;@march=armv6zk@mtune=arm1176jzf-s@mfloat-abi=hard@mfpu=vfp

pi@xubuntu:/opt/gnuarm-hardfp$ find $PREFIX -name libc.a | sort
./arm-none-eabi/lib/armv6zk/arm1176jzf-s/hardfp/vfp/libc.a
./arm-none-eabi/lib/armv7-a/cortex-a7/hardfp/neon-vfpv4/libc.a
./arm-none-eabi/lib/armv7-a/cortex-a7/hardfp/vfpv4/libc.a
./arm-none-eabi/lib/armv8-a/cortex-a53/hardfp/fp-armv8/libc.a
./arm-none-eabi/lib/armv8-a/cortex-a53/hardfp/neon-fp-armv8/libc.a
./arm-none-eabi/lib/libc.a

pi@xubuntu:/opt/gnuarm-hardfp$ find $PREFIX -name libgcc.a | sort
./lib/gcc/arm-none-eabi/4.9.3/armv6zk/arm1176jzf-s/hardfp/vfp/libgcc.a
./lib/gcc/arm-none-eabi/4.9.3/armv7-a/cortex-a7/hardfp/neon-vfpv4/libgcc.a
./lib/gcc/arm-none-eabi/4.9.3/armv7-a/cortex-a7/hardfp/vfpv4/libgcc.a
./lib/gcc/arm-none-eabi/4.9.3/armv8-a/cortex-a53/hardfp/fp-armv8/libgcc.a
./lib/gcc/arm-none-eabi/4.9.3/armv8-a/cortex-a53/hardfp/neon-fp-armv8/libgcc.a
./lib/gcc/arm-none-eabi/4.9.3/libgcc.a

Install the gcc compiler with extras

sudo -i
apt-get update && apt-get upgrade
apt-get install gcc g++ make bison byacc flex gnat gawk perl zlibc

Create the target directory for the cross compiler.

mkdir /opt/gnuarm-hardfp
chown -R pi:pi /opt/gnuarm-hardfp
exit

Setup the variables

export TARGET=arm-none-eabi
export PREFIX=/opt/gnuarm-hardfp
export PATH=$PATH:$PREFIX/bin

BINUTILS=binutils-2.25
GCC=gcc-4.9.3
NEWLIB=newlib-2.2.0

Get the archives

 cd
/opt/gnuarm-hardfp

 wget http://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2
 wget http://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.bz2
 wget ftp://sourceware.org/pub/newlib/$NEWLIB.tar.gz


Extract the archives

tar xvf $BINUTILS.tar.bz2
tar xvf $GCC.tar.bz2
tar xzvf $NEWLIB.tar.gz

Remove the archives

rm -rf $BINUTILS.tar.bz2 $GCC.tar.bz2 $NEWLIB.tar.gz

Download the gcc prerequisites

cd /opt/gnuarm-hardfp/$GCC
./contrib/download_prerequisites
cd -

Make sure that all configure files have execute rights

find /opt/gnuarm-hardfp/$GCC -name configure | xargs chmod a+x

Copy the multilib config file

cp t-arm-elf $GCC/gcc/config/arm/

Build the binutils

mkdir build-binutils
cd build-binutils
../$BINUTILS/configure --target=$TARGET --prefix=$PREFIX
make -j 4 all
make install

Build the GCC minimum configuration

mkdir ../build-gcc
cd ../build-gcc
../$GCC/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-newlib --enable-languages="c,c++" --with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 --with-mode=arm --with-float=hard
make -j 4 all-gcc
make install-gcc

Build the newlib

mkdir ../build-newlib
cd ../build-newlib
../$NEWLIB/configure --target=$TARGET --prefix=$PREFIX --disable-newlib-supplied-syscalls
make -j 4
make install

Build GCC again with newlib

cd ../build-gcc
../$GCC/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-newlib --enable-languages="c,c++" --with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 --with-mode=arm --with-float=hard
make -j 4 all
make install

Build the gcc libraries

make -j 4 all-target-libgcc CFLAGS_FOR_TARGET="-g -O3"
make install-target-libgcc

Display the build results and remove the build directories

arm-none-eabi-gcc -print-multi-lib

cd $PREFIX
rm -rf build-*


find -name libc.a | sort
find -name libgcc.a | sort

Add the bin path to the pi profile

vi ~pi/.profile
export PATH=/opt/gnuarm-hardfp/bin:$PATH

ċ
build_gcc-pre.sh
(1k)
Arjan van Vught,
Aug 7, 2015, 5:05 AM
ċ
build_gcc.sh
(1k)
Arjan van Vught,
Aug 7, 2015, 7:45 AM
ċ
t-arm-elf
(3k)
Arjan van Vught,
Mar 25, 2016, 10:46 AM
Comments