5.5.1. Installation von Cross GCC
GCC erfordert jetzt die Pakete GMP, MPFR und MPC. Da diese Pakete möglicherweise nicht in Ihrer Host-Distribution enthalten sind, werden sie mit GCC erstellt. Entpacken Sie jedes Paket in das GCC-Quellverzeichnis und benennen Sie die resultierenden Verzeichnisse um, damit die GCC-Build-Prozeduren sie automatisch verwenden:
Note
Zu diesem Kapitel kommt es häufig zu Missverständnissen. Die Verfahren sind die gleichen wie in jedem anderen Kapitel, wie zuvor erläutert (Anweisungen zur Paketerstellung). Extrahieren Sie zunächst den gcc-Tarball aus dem Quellverzeichnis und wechseln Sie dann in das erstellte Verzeichnis. Erst dann sollten Sie mit den folgenden Anweisungen fortfahren.
Note
Zu diesem Kapitel kommt es häufig zu Missverständnissen. Die Verfahren sind die gleichen wie in jedem anderen Kapitel, wie zuvor erläutert (Anweisungen zur Paketerstellung). Extrahieren Sie zunächst den gcc-Tarball aus dem Quellverzeichnis und wechseln Sie dann in das erstellte Verzeichnis. Erst dann sollten Sie mit den folgenden Anweisungen fortfahren.
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
in gcc/config/{linux,i386/linux{,64}}.h
in gcc/config/{linux,i386/linux{,64}}.h
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $file.orig > $file
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $file.orig > $file
Der folgende Befehl ändert den Speicherort des standardmäßigen dynamischen Linkers von GCC, um den in installierten zu verwenden /Werkzeuge. Es entfernt auch / usr / include aus GCCs Include-Suchpfad. Ausgabe:
für Datei tun
cp -uv sed -e
-e
für Datei tun
cp -uv sed -e
-e
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig
erledigt
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig
erledigt
Falls es schwierig erscheint, dem oben Gesagten zu folgen, lassen Sie es uns etwas aufschlüsseln. Zuerst kopieren wir die Dateien gcc/config/linux.h, gcc/config/i386/linux.h und gcc/config/i368/linux64.h in eine Datei mit demselben Namen, aber mit dem angehängten Suffix „.orig“. Dann stellt der erste sed-Ausdruck „/tools“ jeder Instanz von „/lib/ld“, „/lib64/ld“ oder „/lib32/ld“ voran, während der zweite hartcodierte Instanzen von „/usr“ ersetzt. Als nächstes fügen wir unsere Definitionsanweisungen hinzu, die das Standard-Startdateipräfix am Ende der Datei ändern. Beachten Sie, dass das abschließende „/“ in „/tools/lib/“ erforderlich ist. Schließlich verwenden wir aufnehmen um den Zeitstempel der kopierten Dateien zu aktualisieren. Bei Verwendung in Verbindung mit ZentralprozessorDies verhindert unerwartete Änderungen an den Originaldateien, falls die Befehle versehentlich zweimal ausgeführt werden.
Legen Sie abschließend auf x86_64-Hosts den Standardverzeichnisnamen für 64-Bit-Bibliotheken auf „lib“ fest:
Fall $(uname -m) in x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
Fall $(uname -m) in x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
Die GCC-Dokumentation empfiehlt, GCC in einem dedizierten Build-Verzeichnis zu erstellen:
mkdir -v build cd build
mkdir -v build cd build
Bereiten Sie GCC für die Kompilierung vor:
../konfigurieren \
--target=$LFS_TGT \
--prefix=/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-sprachen=c,c++
../konfigurieren \
--target=$LFS_TGT \
--prefix=/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-sprachen=c,c++
Die Bedeutung der Konfigurationsoptionen:
--with-newlib
Da noch keine funktionierende C-Bibliothek verfügbar ist, wird dadurch sichergestellt, dass die inhibitor_libc-Konstante beim Erstellen von libgcc definiert wird. Dies verhindert das Kompilieren von Code, der libc-Unterstützung erfordert.
--ohne-Header
Beim Erstellen eines vollständigen Cross-Compilers benötigt GCC Standard-Header, die mit dem Zielsystem kompatibel sind. Für unsere Zwecke werden diese Header nicht benötigt. Dieser Schalter verhindert, dass GCC nach ihnen sucht.
--with-local-prefix=/tools
Das lokale Präfix ist der Speicherort im System, an dem GCC nach lokal installierten Include-Dateien sucht. Der Standardwert ist / usr/local. Einstellung auf /Werkzeuge Hilft dabei, den Host-Standort beizubehalten Verzeichnis / usr / local außerhalb des Suchpfads dieses GCC.
--with-native-system-header-dir=/tools/include
Standardmäßig wird nach GCC gesucht / usr / include für Systemheader. In Verbindung mit dem Sysroot-Schalter würde dies normalerweise zu „ $LFS/usr/include. Die Header, die in den nächsten beiden Abschnitten installiert werden, gehen jedoch zu $LFS/tools/include. Dieser Schalter stellt sicher, dass gcc sie korrekt findet. Im zweiten Durchgang von GCC stellt derselbe Schalter sicher, dass keine Header vom Hostsystem gefunden werden.
--disable-shared
Dieser Schalter zwingt GCC dazu, seine internen Bibliotheken statisch zu verknüpfen. Wir tun dies, um mögliche Probleme mit dem Hostsystem zu vermeiden.
--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx
Diese Schalter deaktivieren die Unterstützung für die dezimale Gleitkommaerweiterung, Threading, libatomic, libgomp,
libquadmath, libssp, libvtv bzw. die C++-Standardbibliothek. Diese Funktionen können beim Erstellen eines Cross-Compilers nicht kompiliert werden und sind für die Aufgabe der Cross-Kompilierung der temporären libc nicht erforderlich.
--disable-multilib
Auf x86_64 unterstützt LFS noch keine Multilib-Konfiguration. Dieser Schalter ist für x86 unbedenklich.
--enable-sprachen=c,c++
Diese Option stellt sicher, dass nur die C- und C++-Compiler erstellt werden. Dies sind die einzigen Sprachen, die jetzt benötigt werden.
Kompilieren Sie GCC, indem Sie Folgendes ausführen:
um
um
Die Kompilierung ist nun abgeschlossen. Zu diesem Zeitpunkt würde die Testsuite normalerweise ausgeführt, aber wie bereits erwähnt, ist das Testsuite-Framework noch nicht vorhanden. Die Vorteile der Durchführung der Tests sind zu diesem Zeitpunkt minimal, da die Programme aus diesem ersten Durchgang bald ersetzt werden.
Installieren Sie das Paket:
make install
make install