5.9. GCC-4.2.4 croisé - Fin

Le paquet GCC contient la collection de compilateurs GNU, qui inclut les compilateurs C et C++.

5.9.1. Installation du compilateur croisé GCC

Le correctif suivant active des corrections d'erreurs de compilation avec le noyau :

patch -Np1 -i ../gcc-4.2.4-PR31490-1.patch

Faites deux ajustements essentiels pour le fichier specs de GCC pour vous assurer que GCC utilise notre environnement de construction :

patch -Np1 -i ../gcc-4.2.4-specs-1.patch

Pour être sûr que les deux outils utilise la bonne syntaxe, appliquez le correctif suivant :

patch -Np1 -i ../gcc-4.2.4-posix-1.patch

Le correctif suivant assure que gcc ne cherche pas libgcc_s.so dans le répertoire /usr lors de la compilation croisée :

patch -Np1 -i ../gcc-4.2.4-cross_search_paths-1.patch

Modifiez la spec StartFile pour pointer vers le bon emplacement des bibliothèques :

echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/linux.h

Maintenant, modifiez le chemin de recherche include par défaut du préprocesseur c de GCC pour n'utiliser que /tools :

cp -v gcc/Makefile.in{,.orig}
sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
    gcc/Makefile.in.orig > gcc/Makefile.in

Enfin, désactivez -B dans configure, afin qu'il ne touche pas aux fichiers d'en-tête de l'hôte :

cp -v configure{,.orig}
sed -e  '/FLAGS_FOR_TARGET.*\/lib\//s@-B[^ ]*/lib/@@g' configure.orig > \
    configure

La documentation de GCC recommande de construire GCC en dehors du répertoire source, c'est-à-dire dans un répertoire dédié :

mkdir -v ../gcc-build
cd ../gcc-build

Préparez la compilation de GCC :

../gcc-4.2.4/configure --prefix=/cross-tools \
    --target=${CLFS_TARGET} --host=${CLFS_HOST} --disable-multilib \
    --with-local-prefix=/tools --disable-nls --enable-shared \
    --enable-languages=c,c++ --enable-__cxa_atexit \
    --enable-c99 --enable-long-long --enable-threads=posix

Voici la signification des nouvelles options de configure :

--enable-languages=c,c++

Cette option nous assure que seuls les compilateurs C et C++ sont construits.

--enable-__cxa_atexit

Cette option permet l'utilisation de __cxa_atexit, plutôt que de atexit, pour enregistrer les destructeurs C++ pour les statiques locales et les objets globaux, et elle sert essentiellement pour une gestion des destructeurs respectant totalement les standards. Il affecte aussi les ABI C++, ce qui produit des bibliothèques C++ partagées et des programmes C++ interopérables avec d'autres distributions Linux.

--enable-c99

Active le support C99 pour les programmes C.

--enable-long-long

Active le support du type long long dans le compilateur.

--enable-threads=posix

Ceci active la gestion d'exception C++ pour le code multi-tâches.

Continuez en compilant le paquet :

make AS_FOR_TARGET="${CLFS_TARGET}-as" \
    LD_FOR_TARGET="${CLFS_TARGET}-ld"

Installez le paquet :

make install

Les détails sur ce paquet sont disponibles dans Section 10.10.2, “Contenu de GCC.”