Les détails sur ce paquet sont disponibles dans Section 6.16.2, « Contenu de GCC. »
Le paquet GCC contient la collection de compilateurs GNU, qui inclut les compilateurs C et C++.
GCC exige maintenant les paquets GMP, MPFR et MPC. Comce il se peut que ces paquets ne soient pas inclus dans votre distribution hôte, ils vont être compilés avec GCC :
tar -jxf ../mpfr-3.0.0.tar.bz2 mv -v mpfr-3.0.0 mpfr tar -jxf ../gmp-5.0.2.tar.bz2 mv -v gmp-5.0.2 gmp tar -zxf ../mpc-0.8.2.tar.gz mv -v mpc-0.8.2 mpc
Il faut activer le paramètre -fPIC
par défaut à cette étape, afin
que Glibc détecte plus tard dans ce chapitre un compilateur PIC.
Glibc activera du code selon que le compilateur est PIC ou pas.
Modifiez GCC pour que -fPIC
soit par défaut :
cp -v gcc/config/i386/linux.h{,.orig} sed 's/^\(#define CC1_SPEC.*\)\("\)$/\1 %{fno-pic|fno-PIC|fpic|fPIC:;:-fPIC}\2/' \ gcc/config/i386/linux.h.orig > gcc/config/i386/linux.h cp -v gcc/config/i386/x86-64.h{,.orig} sed 's/^\(#define CC1_SPEC.*\)\("\)$/\1 %{fno-pic|fno-PIC|fpic|fPIC:;:-fPIC}\2/' \ gcc/config/i386/x86-64.h.orig > gcc/config/i386/x86-64.h
La documentation de GCC recommande de ne pas construire GCC dans le répertoire des sources mais dans un répertoire de construction dédié :
mkdir -v ../gcc-build cd ../gcc-build
Préparez la compilation de GCC :
../gcc-4.5.3/configure \ --target=$LFS_TGT --prefix=/tools \ --disable-nls --disable-shared --disable-multilib \ --disable-decimal-float --disable-threads \ --disable-libmudflap --disable-libssp \ --disable-libgomp --enable-languages=c \ --with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \ --without-ppl --without-cloog
Voici la signification des options de configure :
--disable-shared
Ce paramètre oblige GCC à lier ses bibliothèques internes de manière statique. On procède ainsi pour éviter les problèmes avec le système hôte.
--disable-decimal-float, --disable-threads,
--disable-libmudflap, --disable-libssp,
--disable-libgomp
Ces paramètres désactivent le support de l'extension ayant un point flottant décimal, du threading, respectivement de libmudflap, libssp et libgomp. Ces fonctionnalités ne parviendront pas à se construire lors de la construction d'un compilateur croisé et ne sont pas nécessaires pour la tâche de compilation croisée de la libc temporaire.
--disable-multilib
Sur du x86_64, LFS ne supporte pas encore une configuration multilib (plusieurs bibliothèques). Ce paramètre n'a pas d'importance pour x86.
--enable-languages=c
Cette option nous assure que seul le compilateur C sera construit. C'est le seul langage actuellement nécessaire.
--with-gmp-include=...
Cette option dit à GCC où se situent les en-têtes de GMP.
--with-gmp-lib=...
Cette option dit à GCC où se trouve la bibliothèque de GMP.
--without-ppl,
--without-cloog
Ces paramètres empêche GCC de se construire contre les bibliothèques PPL et CLooG qui peuvent être présentes sur le système hôte, mais qui ne seront pas disponibles dans l'environnement chroot.
Compilez GCC en lançant :
make gcc_cv_libc_provides_ssp=yes
La variable gcc_cv_libc_provides_ssp=yes
est
nécessaires sur certains systèmes hôtes pour s'assurer que la
fonction SSP de Glibc soit utilisée à la place de celle de
libssp.so
.
La compilation est maintenant terminée. À ce point, la suite de tests devrait être lancée. Mais, comme nous l'avons dit plus tôt, l'ensemble de travail de la suite de tests n'est pas encore en place. Les bénéfices à lancer les tests maintenant seraient minimes car les programmes de la première passe seront bientôt remplacés.
Installez le paquet :
make install
L'utilisation de --disable-shared
signifie que le
fichier libgcc_eh.a
n'est pas créé et
installé. Le paquet Glibc dépend de cette bibliothèque puisqu'il
utilise -lgcc_eh
à
l'intérieur de son système de construction. On peut satisfaire
cette dépendance en créant un lien symbolique vers libgcc.a
, puisque ce fichier va finir par
contenir les objets normalement contenus dans libgcc_eh.a
:
ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \ sed 's/libgcc/&_eh/'`
Les détails sur ce paquet sont disponibles dans Section 6.16.2, « Contenu de GCC. »