Logiciels Libres et Systèmes Embarqués


3.6. GlibC uniquement

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.