Logiciels Libres et Systèmes Embarqués


3.5. GCC d'amorce

GCC est le compilateur du projet GNU. Il est capable de compiler un nombre impressionnant de langages (C, C++, Fortran, ADA, Java, ...), mais nous n'utiliserons que le C et le C++. J'ai choisi de ne pas utiliser la version 4.0 de GCC simplement parce qu'elle est trop récente. En effet, le passage de la version 3.4 à la 4.0 a entraîné un changement interne trop important pour qu'on puisse l'utiliser en production dès les premiers jours.

La GlibC est nécessaire à la compilation de GCC, or il faut GCC pour que la GlibC soit elle-même compilée... C'est l'histoire du chien qui se mort la queue. Le problème est compliqué, mais la solution l'est encore plus. La figure 3.1 illustre la solution utilisée.

Figure 3.1. Solution au problème de dépendance

Solution au problème de dépendance

Dans un premier temps, il faut compiler un GCC minimal, mais suffisant pour pouvoir compiler la GlibC :

bash# cd gcc-3.4.3
bash# mkdir -p build-gcc-bootstrap; cd build-gcc-bootstrap
bash# ../configure --target=$TARGET             \
                   --prefix=$PREFIX             \
                   --with-sysroot=$SYSROOT      \
                   --with-local-prefix=$SYSROOT \
                   --with-cpu=405               \
                   --disable-shared             \
                   --disable-multilib           \
                   --disable-threads            \
                   --enable-languages=c
bash# make all-gcc
bash# make install-gcc
bash# cd ../..

--with-local-prefix

permet d'installer les fichiers d'en-tête dans le répertoire /usr/include au lieu de /usr/local/include (relativement à $SYSROOT).

--disable-shared

précise qu'il faut compiler les bibliothèques statiques uniquement (et pas les dynamiques). Cela permet simplement de gagner du temps à la compilation de ce GCC d'amorce.

--disable-multilib-

précise qu'il ne faut pas inclure le support des variantes de cette architecture. Cela permet dans un premier temps de gagner du temps (et de la place), mais aussi de contourner un bogue potentiel qui pourrait survenir lors de la compilation.

--with-cpu

précise le type du processeur.

--disable-threads

désactive le support des processus légers, puisque la bibliothèque pthreads n'est pas encore prête.

--enable-languages=c

active le support du langage C uniquement, car la GlibC est écrite en C. Cela permet un gain de temps appréciable.