Les détails sur ce paquet sont disponibles dans Section 8.27.2, « Contenu de GCC. »
Le paquet GCC contient la collection de compilateurs GNU, laquelle contient les compilateurs C et C++.
Comme pour la première construction de GCC, les paquets GMP, MPFR et MPC sont requis. Déballez les archives et déplacez-les dans les répertoires avec le nom requis :
tar -xf ../mpfr-4.2.0.tar.xz mv -v mpfr-4.2.0 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.3.1.tar.gz mv -v mpc-1.3.1 mpc
Si vous construisez sur x86_64, changez le nom de répertoire par défaut pour les bibliothèques 64 bits en « lib » :
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac
Remplacez la règle de construction des en-têtes de libgcc et libstdc++, pour permettre la construction de ces bibliothèques avec la prise en charge des threads POSIX :
sed '/thread_header =/s/@.*@/gthr-posix.h/' \ -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
Créez de nouveau un répertoire de construction séparé :
mkdir -v build cd build
Avant de commencer la construction de GCC, rappelez-vous d'effacer (avec unset) toute variable d'environnement surchargeant les options d'optimisation par défaut.
Maintenant, préparez la compilation de GCC :
../configure \ --build=$(../config.guess) \ --host=$LFS_TGT \ --target=$LFS_TGT \ LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \ --prefix=/usr \ --with-build-sysroot=$LFS \ --enable-default-pie \ --enable-default-ssp \ --disable-nls \ --disable-multilib \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libsanitizer \ --disable-libssp \ --disable-libvtv \ --enable-languages=c,c++
Voici la signification des nouvelles options de configure :
--with-build-sysroot=$LFS
Normalement, utiliser --host
s'assure qu'un
compilateur croisé est utilisé pour construire GCC, et ce
compilateur sait qu'il doit chercher les en-têtes et les
bibliothèques dans $LFS
. Mais
le système de construction de GCC utilise d'autres outils qui
ne connaissent pas cet emplacement. Ce paramètre est requis
pour qu'ils trouvent les fichiers requis dans $LFS
et non sur l'hôte.
--target=$LFS_TGT
Comme nous effectuons une compilation croisée de GCC, il
n'est pas possible de construire les bibliothèques de la
cible (libgcc
et libstdc++
) avec les binaires GCC
précédemment compilés : ces binaires ne fonctionneront
pas sur l'hôte. Le système de construction de GCC essayera
d'utiliser les compilateurs C et C++ de l'hôte pour
contourner cela par défaut. La construction des bibliothèques
GCC de la cible avec une version différente de GCC n'est pas
prise en charge, donc utiliser les compilateurs de l'hôte
peut causer des échecs de construction. Ce paramètre s'assure
de construire les bibliothèques avec GCC passe 1.
LDFLAGS_FOR_TARGET=...
Permet à libstdc++
d'utliiser
la bibliothèque partagée libgcc
en cours de construction dans cette passe, au lieu de la
version statique construite avec GCC passe 1. C'est requis
pour la prise en charge de la gestion des exceptions C++.
--disable-libsanitizer
Désactive les bibliothèques d'assainissement GCC à
l'exécution. Elles ne sont pas requises pour l'installation
temporaire. Ce paramètre est requis pour construire GCC sans
avoir installé libcrypt
pour
la cible. Dans gcc-pass1 il était
sous-entendu par --disable-libstdcxx
, mais
maintenant nous devons le passer explicitement.
Compilez le paquet :
make
Installez le paquet :
make DESTDIR=$LFS install
Comme touche finale, créez un lien symbolique utilitaire. De nombreux programmes et scripts lancent cc au lieu de gcc, pour que les programmes restent génériques et donc utilisables sur n'importe quel type de système UNIX où le compilateur C de GNU n'est pas toujours installé. Lancer cc laisse l'administrateur système libre de décider quel compilateur C installer :
ln -sv gcc $LFS/usr/bin/cc
Les détails sur ce paquet sont disponibles dans Section 8.27.2, « Contenu de GCC. »