C'est lent cette compilation !

Solution: utiliser un cache de compilation qui garde les objets non modifiés, et les transmets au compilateur si nécessaire.

Et en plus, c'est génial si vous codez et que vous découpez bien vos programmes.

ccache = cache pour gcc accélérant les compilations


Espace disque requis

2 Go dispos sur le disque pour l'utiliser

(on peut descendre à 512mo permanents, et 2go en pointe)


Installation

# emerge -av ccache

# ccache-config --install-links $MON_CHOST (MON_CHOST est obtenu avec gcc-config -l, ou en regardant dans /etc/make.conf). Si on prend la sortie de gcc-config -l, il ne faut pas mettre le numéro de version.

# ccache-config --install-links i686-pc-linux-gnu


Vérifications:

# ls /usr/lib/ccache/bin/ -l

c++ -> /usr/bin/ccache
g++ -> /usr/bin/ccache
gcc -> /usr/bin/ccache
i386-pc-linux-gnu-c++ -> /usr/bin/ccache
i386-pc-linux-gnu-g++ -> /usr/bin/ccache
i386-pc-linux-gnu-gcc -> /usr/bin/ccache
i686-pc-linux-gnu-c++ -> /usr/bin/ccache
i686-pc-linux-gnu-g++ -> /usr/bin/ccache
i686-pc-linux-gnu-gcc -> /usr/bin/ccache

C'est Emerge qui doit mettre en principe le rep. /usr/lib/ccache/bin/ en tête de PATH avant de compiler.

(merci à Fred pour cette précision).

Vous pouvez aussi vérifier la version de votre compilateur avec gcc -v

Cette commande doit donner: i686-pc-linux-gnu (normalement)

Si vous avez un environnement de compilation plus ancien, il est temps de mettre à jour (voir mon billet du 3 août 2007).


Fichiers de configuration

dans /etc/make.conf :

FEATURES="ccache"
CCACHE_SIZE="2G"

Ceci va ajuster l'éspace disque du cache à 2GB.

Vous pouvez également utiliser ccache -M 2G, mais celà n'activera le cache que pour l'emerge en cours (il sera automatiquement remis à 512Mb ensuite).


Création du cache pour première utilisation

cd /var/tmp
mkdir ccache
chown portage:portage ccache
chmod 775 ccache
echo "CCACHE_DIR=\"/var/tmp/ccache\"" >> /etc/env.d/99local
env-update
source /etc/profile


Et si ça ne cache pas...

  • Si ça se plante à la compilation parce qu'il ne trouve pas le compilo:

# gcc-config -l

  • noter le nom obtenu (le numéro de version n'a pas d'importance)

Ex : i386-pc-linux-gnu-4.1.1 ==> i386-pc-linux-gnu

# fix_libtool_files.sh `gcc -dumpversion` --oldarch i686-pc-linux-gnu

mettre ce nom dans CHOST (fichier /etc/make.conf)

A noter que normalement, on ne modifie jamais son CHOST


LA commande utile

Pour avoir les stats du cache:

ccache -s

(ccache -h pour toutes les commandes)