Pour faire suite au post sur l'optimisation pour un Pentium 4, voici un tuto plus complet sur les changements de CFLAGS et de CHOST pour optimiser la compilation sur votre système.
Pour illustrer mes propos, j'accompagnerai mes explications d'un exemple de la procédure pour un Athlon XP 2000+.
Pour déterminer le type de processeur, on tape la commande suivante en mode console :
- Code: Select all
cat /proc/cpuinfo
Dans mon cas, ça donne ceci :
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : AMD Athlon(tm) XP 2000+
etc., etc.
Ensuite, on consulte la liste de Cflags sûrs sur le wiki de Gentoo (http://fr.gentoo-wiki.com/HOWTO_CFLAGS), et on choisit le bon processeur, dans mon cas, ceci :
Athlon-tbird XP (AMD)
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : AMD Athlon(tm)
- Code: Select all
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
En principe, il suffit de coller les codes aux bons endroits dans le fichier /etc/make.conf.
Toutefois, dans le cas présent, le CHOST était originellement i586-pc-linux-gnu, ce qui implique un changement plus important que celui des CFLAGS.
La mauvaise nouvelle est que cela peut endommager sérieusement un système si c'est mal fait. La bonne nouvelle, c'est que la procédure n'est pas trop compliquée et les chances de réussite sont très bonnes si on suit rigoureusement la procédure. Donc, si votre système fonctionne bien, il vaut mieux le laisser comme il est!
La première chose à faire évidemment, c'est de changer la variable CHOST dans votre /etc/make.conf si vous ne l'avez pas déjà fait plus haut.
Une fois que c'est fait, il faut recompiler certains paquetages en tapant la commande suivante en mode console :
- Code: Select all
emerge -av1 binutils gcc glibc
Ensuite, il faut vérifier que tout est bien configuré :
- Code: Select all
gcc-config -l
[1] i686-pc-linux-gnu-4.1.1 *
- Code: Select all
gcc-config -c
i686-pc-linux-gnu-4.1.1
- Code: Select all
binutils-config -l
[1] i686-pc-linux-gnu-2.16.1 *
- Code: Select all
binutils-config -c
i686-pc-linux-gnu-2.16.1
Ensuite, on regarde s'il reste des traces de l'ancienne configuration dans /etc/env.d :
- Code: Select all
cd /etc/env.d/
grep 586 *
05gcc-i586-pc-linux-gnu:PATH="/usr/i586-pc-linux-gnu/gcc-bin/4.1.1"
05gcc-i586-pc-linux-gnu:ROOTPATH="/usr/i586-pc-linux-gnu/gcc-bin/4.1.1"
Nota : Les résultats pour la recherche de l'ancien CHOST peuvent varier d'un système à l'autre. Une entrée vide signifie tout simplement que tout fonctionne.
Avant d'enlever ces références, il faut vérifier la présence de leurs équivalents dans la nouvelle configuration :
- Code: Select all
grep 686 *
05binutils:MANPATH=/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/man
05binutils:INFOPATH=/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/info
05binutils:LDPATH=/usr/i686-pc-linux-gnu/lib
05gcc:PATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
05gcc:ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
05gcc:MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man"
05gcc:INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info"
05gcc:LDPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.1.1"
Tout à l'air beau et comme il ne devrait y avoir qu'une seule instance de ces variables, il faut enlever l'ancienne variable :
- Code: Select all
rm 05gcc-i586-pc-linux-gnu
Maintenant, il faut vérifier le répertoire /etc/env.d/binutils/
- Code: Select all
cd /etc/env.d/binutils/
ls -la
total 8
-rw-r--r-- 1 root root 15 Sep 3 13:48 config-i686-pc-linux-gnu
-rw-r--r-- 1 root root 126 Sep 3 13:48 i686-pc-linux-gnu-2.16.1
- Code: Select all
cat config-i686-pc-linux-gnu
CURRENT=2.16.1
- Code: Select all
cat i686-pc-linux-gnu-2.16.1
TARGET="i686-pc-linux-gnu"
VER="2.16.1"
LIBPATH="/usr/lib/binutils/i686-pc-linux-gnu/2.16.1"
FAKE_TARGETS="i686-pc-linux-gnu"
Il faut aussi vérifier le répertoire de GCC :
- Code: Select all
cd /etc/env.d/gcc
ls -la
total 12
-rw-r--r-- 1 root root 32 Sep 3 16:43 config
-rw-r--r-- 1 root root 32 Aug 3 14:25 config-i386-pc-linux-gnu
-rw-r--r-- 1 root root 292 Sep 3 16:43 i686-pc-linux-gnu-4.1.1
- Code: Select all
cat config
CURRENT=i686-pc-linux-gnu-4.1.1
- Code: Select all
cat config-i586-pc-linux-gnu
CURRENT=i586-pc-linux-gnu-4.1.1
- Code: Select all
cat i686-pc-linux-gnu-4.1.1
PATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
LDPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.1.1"
GCCBITS="32"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info"
STDCXX_INCDIR="g++-v4"
Les fichiers config et i686-pc-linux-gnu-4.1.1 sont en ordre, mais il reste un fichier à enlever : config-i586-pc-linux-gnu.
- Code: Select all
rm config-i586-pc-linux-gnu
Maintenant que tout est nettoyé, il faut mettre à jour l'environnement :
- Code: Select all
env-update && source /etc/profile
Ensuite, vérifier (encore!) que tout est en ordre :
- Code: Select all
grep -r 586 /etc/env.d/
S'il ne reste rien, tant mieux! Sinon, il faut enlever les fichiers fautifs.
Pour finir, il faut recompiler libtool et exécuter fix_libtools_files.sh. Faire bien attention d'utiliser la bonne version de GCC!
- Code: Select all
emerge -av1 libtool
- Code: Select all
fix_libtool_files.sh 4.1.1 --oldarch i586-pc-linux-gnu
Voilà , c'est fait! Enfin, presque! Il reste un choix à faire : recompiler ou ne pas recompiler. Dans le premier cas, utiliser la commande suivante :
- Code: Select all
emerge -e world
En theorie, cette opération n'est pas obligatoire. Toutefois, pour ceux qui choisissent de ne pas recompiler, il est fortement recommandé de recompiler python et les paquetages perl liés à CHOST :
- Code: Select all
emerge -av1 python
emerge -av portage-utils
emerge -av1 `qfile /usr/lib/perl* -Cq | sort -u`
Et voilà , c'est fini!
Adapté à partir de la documentation officielle de Gentoo et du wiki.
Commentaires et ajouts bienvenus.