Comme nous l'avons vu dans l'introduction, il est fréquent de modifier les sources des outils de développement pour qu'ils puissent être compilés. Dans notre cas, nous avons deux modifications à effectuer, la première se situe dans le fichier sysdeps/generic/wordexp.c
:
- static void + static inline void internal_function __attribute__ ((always_inline)) exec_comm_child (char *comm, int *fildes, int showerr, int noexec)
L'autre modification se trouve dans le fichier fichier Makerules
:
+ install-lib-all: $(inst_slibdir)/libc.so$(libc.so-version) \ + $(inst_slibdir)/libc-$(version).so \ + $(inst_libdir)/libc.so \ + $(inst_libdir)/libc.a \ + install-lib install:
Cette dernière modification permet de ne compiler que la bibliothèque C et pas les applications qui vont avec. En effet, celles-ci ont besoin de la bibliothèque gcc_eh
qui ne sera disponible que lorsque GCC sera re-compilé avec la GlibC. La GlibC est ensuite configurée de la manière suivante :
bash# cd glibc-2.3.5/ bash# mkdir -p build-glibc; cd build-glibc bash# CFLAGS="-O -mcpu=405" \ ../configure --host=$TARGET \ --build=`arch` \ --prefix=/usr \ --with-sysroot=$SYSROOT \ --without-tls \ --without-fp \ --enable-shared \ --enable-add-ons=linuxthreads \ --with-headers=$SYSROOT/usr/include
CFLAGS="-O -mcpu=405"
précisent les options à passer au compilateur. La première indique qu'il faut compiler avec optimisations (indispensable pour la GlibC) et la seconde précise le type du processeur.
--build
indique à la GlibC que l'on fait de la cross-compilation. Le `arch` est simplement remplacé par le résultat de cette commande ("i686" dans notre cas).
--without-tls
indique que l'on ne veut pas le support des "Thread Local Storage" (TLS). En effet, cela est uniquement disponible dans les noyaux Linux qui possède la "Native Posix Threads Library" (NPTL), c'est à dire tous les noyaux 2.6 d'origine et tous les noyaux 2.4 modifiés en conséquence (ce qui n'est pas notre cas).
--without-fp
précise que l'on n'a pas d'unité flottante.
--enable-shared
précise que l'on veut aussi les bibliothèques dynamiques (les fameux fichiers
.so
)--enable-add-ons
indique que l'on inclut le support de la bibliothèque
linuxthreads
(alias pthreads).
Il ne reste alors plus qu'à compiler et à installer :
bash# make lib bash# make install_root=$SYSROOT install-lib-all install-headers bash# cd ../..
install-lib-all
est la cible que l'on a rajoutée précédemment à la main pour ne compiler que les bibliothèques, sans les programmes.
install-headers
permet d'installer les fichiers d'en-tête de la bibliothèque pthreads.