Des détails sur ce paquet se trouvent sur Section 10.18.2, « Contenu de GCC. »
Le paquet GCC contient la collection de compilateurs GNU, qui contient les compilateurs C et C++.
Ici nous allons compiler GCC, en tant que compilateur croisé qui
créera des exécutables pour notre architecture cible, statiquement
pour qu'il n'ait pas besoin de chercher les fichiers de démarrage
de Glibc, qui n'existent pas encore dans /tools
. Nous utiliserons ce compilateur croisé,
plus l'éditeur de liens croisé que nous venons d'installer avec
Binutils, pour compiler Glibc. Après l'installation de Glibc dans
/tools
, nous pourrons reconstruire
GCC pour qu'il puisse construire des exécutables qui se lient aux
bibliothèques dans /tools
.
Faites quelques ajustements essentiels pour le fichier specs de GCC pour vous assurer que GCC utilise notre environnement de construction :
patch -Np1 -i ../gcc-7.1.0-pure64_specs-1.patch
Modifiez la spec StartFile afin que GCC regarde dans /tools
:
echo -en '\n#undef STANDARD_STARTFILE_PREFIX_1\n#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"\n' >> gcc/config/linux.h echo -en '\n#undef STANDARD_STARTFILE_PREFIX_2\n#define STANDARD_STARTFILE_PREFIX_2 ""\n' >> gcc/config/linux.h
Nous allons créer un faux limits.h
pour que la construction n'utilise pas celui fourni par la distrib
hôte :
touch /tools/include/limits.h
La documentation de GCC recommande de construire GCC en dehors du répertoire des sources dans un répertoire dédié :
mkdir -v ../gcc-build cd ../gcc-build
Préparez la compilation de GCC :
AR=ar \ LDFLAGS="-Wl,-rpath,/cross-tools/lib" \ ../gcc-7.1.0/configure \ --prefix=/cross-tools \ --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ --target=${CLFS_TARGET} \ --with-sysroot=${CLFS} \ --with-local-prefix=/tools \ --with-native-system-header-dir=/tools/include \ --disable-shared \ --with-mpfr=/cross-tools \ --with-gmp=/cross-tools \ --with-isl=/cross-tools \ --with-mpc=/cross-tools \ --without-headers \ --with-newlib \ --disable-decimal-float \ --disable-libgomp \ --disable-libssp \ --disable-libatomic \ --disable-libitm \ --disable-libsanitizer \ --disable-libquadmath \ --disable-libvtv \ --disable-libcilkrts \ --disable-libcilkrts \ --disable-threads \ --disable-multilib \ --enable-languages=c \ --with-abi=64 \ --with-glibc-version=2.25
Voici la signification des nouvelles options de configure :
--build=${CLFS_HOST}
Cela spécifie le système sur lequel le compilateur croisé est construit.
--with-local-prefix=/tools
Le but de ce paramètre est de supprimer /usr/local/include
du chemin de recherche
d'en-têtes de gcc. Ce n'est pas
absolument nécessaire, mais cela aide à minimiser l'influence
du système hôte.
--with-native-system-headers-dir=/tools/include
Ce paramètre s'assure que GCC cherchera les en-têtes système
dans /tools/include
et qu'il ne
cherchera pas dans les en-têtes du système hôte.
--disable-shared
Cela dit à GCC de ne pas créer de bibliothèque partagée.
--without-headers
Désactive l'utilisation de la Libc de la cible par GCC lors de la compilation croisée.
--with-newlib
Cela fait que GCC active le drapeau inhibit_libc
, qui évite que libgcc
ne construise du code qui utilise le
support de la libc.
--disable-decimal-float
Désactive le support pour l'extension de point flottant en C.
--disable-lib*
Ces options évitent que GCC ne construire un certain nombre de bibliothèques qui ne sont pas encore requises.
--disable-threads
Cela évitera que GCC ne cherche les fichiers d'en-tête multi-thread, comme ils n'ont pas encore été créés pour cette architecture. GCC pourra trouver les informations de multi-thread après la création des en-têtes de Glibc.
--with-system-zlib
Cela dit à GCC de se lier au zlib du système plutôt que celui dans son arborescence des sources.
--enable-languages=c
Cette option s'assure que seul le compilateur C est construit.
--with-glibc-version=2.25
Requis lors du bootstrapping d'une chaîne croisée sans les fichiers d'en-têtes disponibles pour construire le compilateur initial.
Continuez en compilant le paquet :
make all-gcc all-target-libgcc
Voici la signification des nouvelles options de make :
all-gcc
all-target-libgcc
Compile seulement les parties de GCC qui sont requises à ce moment, plutôt que le paquet complet.
Installez le paquet :
make install-gcc install-target-libgcc
Des détails sur ce paquet se trouvent sur Section 10.18.2, « Contenu de GCC. »