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, laquelle contient 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 :
There are frequent misunderstandings about this chapter. The procedures are the same as every other chapter, as explained earlier (Instructions de construction des paquets). First, extract the gcc-12.2.0 tarball from the sources directory, and then change to the directory created. Only then should you proceed with the instructions below.
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 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.36 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --enable-default-pie \ --enable-default-ssp \ --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 configuration :
--with-glibc-version=2.36
This option specifies the version of Glibc which will be used on the target. It is not relevant to the libc of the host distro because everything compiled by pass1 GCC will run in the chroot environment, which is isolated from libc of the host distro.
--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-default-pie et
--enable-default-ssp
Ces paramètres permettent à GCC de compiler des programmes avec des fonctionnalités de durcissement (plus d'information dans remarque sur PIE et SSP au chapitre 8) par défaut. Elles ne sont pas vraiment requises à ce niveau, puisque le compilateur ne sera utilisé que pour produire les exécutables temporaires. Mais il est plus propre d'avoir des paquets temporaires aussi proches que possible des paquets finals.
--disable-shared
This switch forces GCC to link its internal libraries statically. We need this because the shared libraries require Glibc, which is not yet installed on the target system.
--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
This build of GCC has installed a couple of internal system
headers. Normally one of them, limits.h
, would in turn include the corresponding
system limits.h
header, in this case,
$LFS/usr/include/limits.h
. However,
at the time of this build of GCC $LFS/usr/include/limits.h
does not exist, so the
internal header that has just been installed is a partial,
self-contained file and does not include the extended features of
the system header. This is adequate for building Glibc, but the
full internal header will be needed later. Create a full version of
the internal header using a command that is identical to what the
GCC build system does in normal circumstances:
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. »