Up Crosscompiler

TC47

Hier wird eine GCC-Toolchain mit gcc-4.7.0 konfiguiert und gebaut auf einem x86_64, die

Prinzipiell wird die Konfigurierung nicht geändert, so dass diese Anleitung leicht auf andere Versionen adaptiert werden kann.

wgetlist (wget -i wgetlist)

http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/gcc/gcc-4.7.0/gcc-4.7.0.tar.bz2

1binutils

 mkdir buildbinutils-tc47
 cd buildbinutils-tc47/
../binutils-2.22/configure --prefix=/opt/tc47/
make
make install

2gcc-4.7.0

cd gcc-4.7.0/
tar -jxf ../mpfr-3.1.0.tar.bz2
mv mpfr-3.1.0/ mpfr
tar -Jxf ../gmp-5.0.4.tar.xz
mv gmp-5.0.4/ gmp
tar -zxf ../mpc-0.9.tar.gz
mv mpc-0.9/ mpc
mkdir ../gcctc47build
cd ../gcctc47build
../gcc-4.7.0/configure --prefix=/opt/tc47/ --with-local-prefix=/opt/tc47/ --with-gnu-as --with-as=/opt/tc47/bin/as --with-gnuld --with-ld=/opt/tc47/bin/ld --enable-threads --enable-languages=c,c++ --with-mpfr-include=/mnt/lfs/src/gcc-4.7.0/mpfr/src --with-mpfr-lib=/mnt/lfs/src/gcctc47build/mpfr/src/.libs --with-long-double-128 --disable-multilib

Bemerkungen:

3binuitils-cross

../binutils-2.22/configure --prefix=/opt/tc47/ --target=i686-linux-gnu
make
install

4gcc47cross

mkdir gcc-buildcrossi686
cd  gcc-buildcrossi686
../gcc-4.7.0/configure --prefix=/opt/tc47/ --with-local-prefix=/opt/tc47/ --target=i686-linux-gnu --enable-threads --enable-languages=c,c++ --with-mpfr-include=/mnt/lfs/src/gcc-4.7.0/mpfr/src --with-mpfr-lib=$(pwd)/mpfr/src/.libs --disable-multilib --without-headers
make
make install

Bemerkungen:

Nun kann man z.B. Bootloader oder Betriebssystemkerne compilieren.

libgcc

Hier besteht eine zirkuläre Abhängigkeit zur libc (entweder uClibc oder glibc), die z.B. verhindert, das der Startcode der dynamischen libgcc.so gelinkt werden kann. Die statischen Bibliotheken werden aber gebaut und können installiert werden:

BUILDDIR=$(pwd)
cd i686-linux-gnu/libgcc/
ln -s /mnt/lfs/src/uClibc-0.9.33/include/ .
cd include
patch -b -p0 << EOP
--- features.h.vorrudi	2012-02-01 22:21:04.000000000 +0100
+++ features.h	2012-06-16 14:33:41.000000000 +0200
@@ -18,7 +18,7 @@
 
 #ifndef	_FEATURES_H
 #define	_FEATURES_H	1
-
+#include"libc-symbols.h"
 /* These are defined by the user (or the compiler)
    to specify the desired environment:
EOP
cd $BUILDDIR
make all-target-libgcc
cd $BUILDDIR/i686-linux-gnu/libgcc/
cp libgc*.a /opt/tc47/lib/gcc/i686-linux-gnu/4.7.0

Die libcsymbols.h wird aber nur zum Zweck der libgcc.a Generierung benötigt. Daher muss der Patch vor dem installieren wieder entfernt werden.

Die Startcodedateien müssen noch installiert werden:

cd $BUILDDIR/i686-linux-gnu/libgcc/
cp c*.o /opt/tc47/lib/gcc/i686-linux-gnu/4.7.0/

Verzeichnislayout

/opt/tc47/i686-linux-gnu/{include,sys-include,lib,bin}
hier sind die Cross-Tools (bin) bzw. Biblioteken (lib) für das Zielsystems mit includes

Offene Fragen

Wie hängt --sysroot=... mit dem Linker zusammen? Linker schimpft: this linker was not configured to use sysroots. Den Linker kann man mit --with-build-sysroot=... konfigurieren. Kann man verschiedene Sysroots machen ? (Anwendungsfall: eine Toolchain für verschiedene Systeme)

Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber