Les détails sur ce paquet sont disponibles dans Section 8.26.2, « Contenu de GCC. »
Le paquet GCC contient la collection de compilateurs GNU, qui inclut les compilateurs C et C++.
GCC requiert les paquets GMP, MPFR et MPC. Comme il se peut que ces paquets ne soient pas inclus dans votre distribution hôte, ils vont être compilés en même temps que GCC. Déballez chaque paquet dans le répertoire des sources de GCC et renommez les répertoires ainsi créés pour que les procédures de construction de GCC les utilisent automatiquement :
Beaucoup d'incompréhensions existent concernant ce chapitre. Les procédures sont les mêmes que celles des autres chapitres, comme expliqué plus haut (Instructions de compilation des paquets). Extrayez d'abord l'archive tar de gcc du répertoire des sources puis rendez-vous dans le répertoire créé. C'est seulement là que vous devriez suivre les instructions ci-dessous.
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.0.tar.xz mv -v gmp-6.2.0 gmp tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
Sur les systèmes x86_64, définissez « lib » comme nom de répertoire par défaut pour les bibliothèques 64 bits :
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac
La documentation de GCC recommande de construire GCC dans un répertoire de construction dédié :
mkdir -v build cd build
Préparez la compilation de GCC :
../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=2.11 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --enable-initfini-array \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++
Voici la signification des options de configure :
--with-glibc-version=2.11
Cette option s'assure que le paquet sera compatible avec la version de glibc de l'hôte. Il est configuré à la version de glibc requise la plus basse spécifiée dans les Prérequis du système hôte.
--with-newlib
Vu qu'aucune bibliothèque C fonctionnelle n'est encore disponible, ceci garantit que la constante inhibit_libc soit définie lors de la construction de libgcc. Cela empêche la compilation d'un code exigeant la prise en charge de la libc.
--without-headers
Lors de la compilation d'un compilateur croisé complet, GCC exige des en-têtes standards compatibles avec le système cible. Pour nos objectifs, ces en-têtes ne seront pas nécessaires. Ce paramètre empêche GCC de les chercher.
--enable-initfini-array
Ce paramètre force l'utilisation de certaines structures de données internes qui sont requises mais ne peuvent pas être détectées lors de la construction d'un compilateur croisé.
--disable-shared
Ce paramètre oblige GCC à lier ses bibliothèques internes de manière statique. On procède ainsi parce que les bibliothèques partagées requièrent glibc, qui n'est pas encore installé sur le système cible.
--disable-multilib
Sur du x86_64, LFS ne prend pas en charge une configuration multilib. Ce paramètre n'a pas d'importance pour x86.
--disable-decimal-float, --disable-threads,
--disable-libatomic, --disable-libgomp, --disable-libquadmath,
--disable-libssp, --disable-libvtv,
--disable-libstdcxx
Ces paramètres désactivent la prise en charge de l'extension pour les nombres décimaux en virgules flottantes, de threading, libatomic, libgomp, libquadmath, libssp, libvtv et de la bibliothèque standard C++. La compilation de ces fonctions va échouer lors de la construction d'un compilateur croisé et celles-ci sont inutiles pour la compilation croisée de la libc temporaire.
--enable-languages=c,c++
Cette option nous assure que seuls les compilateurs C et C++ seront construits. Ce sont les seuls langages actuellement nécessaires.
Compilez GCC en lançant :
make
Installez le paquet :
make install
Cette construction de GCC a installé quelques en-têtes internes au
système. Normalement l'un d'entre eux, limits.h
, incluerait à son tour l'en-tête
limits.h
du système, dans ce cas,
$LFS/usr/include/limits.h
. Cependant,
au moment de la construction de GCC $LFS/usr/include/limits.h
n'existe pas, donc
l'en-tête interne qui vient d'être construit est un fichier
partiel, auto-contenu et n'inclus pas les fonctionnalités étendues
de l'en-tête système. Cela est suffisant pour construire glibc,
mais l'en-tête interne complet sera requis plus tard. Créez une
version complète de l'en-tête interne avec une commande identique à
ce que le système de construction de GCC fait dans des
circonstances normales :
cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
Les détails sur ce paquet sont disponibles dans Section 8.26.2, « Contenu de GCC. »