Compilation
De Diablotins.org.
| Améliorer les performances de compilation
|
| ||
Sommaire |
cache de compilation
Afin de réduire la durée des compilations et surtout des re-compilations, utilisez un cache qui va mémoriser les compilations. installez le port devel/ccache.
cet outil peut être appelé directement par certain ports comme, OpenOffice.org, par la commande “WITH_CCACHE”:
make WITH_CCACHE=yes package package-rename
Vous pouvez aussi le définir par défaut, dans /etc/make.conf:
.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*))
.if !defined(NOCCACHE)
CC:=${CC:C,^cc,/usr/local/libexec/ccache/world/cc,1}
CXX:=${CXX:C,^c\+\+,/usr/local/libexec/ccache/world/c++,1}
.endif
.endif
Comme indiqué dans /usr/local/share/doc/ccache/ccache-howto-freebsd.txt.
Certains ports ne se compileront pas avec CCache, dont CCache lui-même; définissez pour ceux là l'option NOCCACHE
make -DNOCCACHE install
Par contre, pour éviter que CCache ne créé son cache dans l'espace root, où il n'y a généralement pas de place, redéfinissez les variables d'environnement suivantes dans votre shell, ici /etc/csh.cshrc:
setenv PATH /usr/local/libexec/ccache:$PATH setenv CCACHE_PATH /usr/bin:/usr/local/bin setenv CCACHE_DIR /var/tmp/ccache # ! setenv CCACHE_LOGFILE /var/log/ccache.log
ou dans /etc/login.conf pour que tous les interpréteurs le comprennent.
Vous pouvez analyser l'activité de CCache par:
ccache -s
puis
david:~>tail -f /var/log/ccache.log
GCC4
GCC4.4 n'est pas disponible dans la base, mais pour profiter des optimisations de GCC 4.4 (dont le SSSE3, et plus ), vous pouvez l'installer.
Prenez bien note que le jeu SSSE3 n'est disponible que pour les processeurs Intel, Xéon et Core2.
Comme indiqué ici, installez les ports devel/binutils et lang/gcc44, puis configurez make.conf:
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) CC=gcc44 CXX=g++44 CPP=cpp44 .endif
et adaptez libmap.conf:
libgcc_s.so.1 gcc44/libgcc_s.so.1 libgomp.so.1 gcc44/libgomp.so.1 libobjc.so.3 gcc44/libobjc.so.2 libssp.so.0 gcc44/libssp.so.0 libstdc++.so.6 gcc44/libstdc++.so.6
Attention, certains ports ne fonctionneront pas, ainsi, précisez les dans make.conf
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) .if empty(.CURDIR:M/usr/ports/xxx/port1*) && empty(.CURDIR:M/usr/ports/yyy/port2*) CC=gcc44 CXX=g++44 CPP=cpp44 CFLAGS+=-mssse3 .endif .endif
Ou, si vous utilisez votre architecture de base, remplacez le CFLAGS par
CPUTYPE?=native
Ou plus précisément, certains refusent seulement l'option SSSE3, précisez le:
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) CC=gcc44 CXX=g++44 CPP=cpp44 .if empty(.CURDIR:M/usr/ports/xxx/port3*) CFLAGS+=-mssse3 .endif .endif
Suivez ce lien pour découvrir une liste de ports à exclure de GCC 4.4.
Et finalement?
Quel est donc le résultat de tous ces réglages ?
Que va faire le compilateur, avec par exemple, l'option CPUTYPE à native sur mon AMD Athlon x2 ?
Pour GCC4.4:
david:~>gcc44 -march=native -E -v - < /dev/null | & fgrep cc1 /usr/local/libexec/gcc44/gcc/x86_64-portbld-freebsd8.0/4.4.3/cc1 -E -quiet -v - -march=amdfam10 -mcx16 -msahf -mpopcnt --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=amdfam10
Pour le monde, avec le compilateur livré de base:
david:~>cc -march=native -E -v - < /dev/null | & fgrep cc1 /usr/libexec/cc1 -E -quiet -v -D_LONGLONG - -march=k8 -mtune=k8
On peut noter que GCC44.3 est plus pointilleux.
LLVM/CLANG
Ce nouveau compilateur est disponible depuis FreeBSD 8 ( 7, en fait, mais ce n'était pas très au point).
Pour l'activer, définissez le dans make.conf:
#<--- CLANG --->
.if (!empty(.CURDIR:M/usr/src*) || defined(WITHCLANG)) && !defined(NOCLANG)
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
.if !defined(CPP) || ${CPP} == "cpp"
CPP=clang -E
.endif
# Don't die on warnings
NO_WERROR=
WERROR=
# Don't forget this when using Jails!
#NO_FSCHG=
.endif
Dont le comportement donne:
-
cd /usr/src && make buildworld && make kernel
-
- À moins que vous ne déclariez la variable WITHCLANG.
-
make -DWITHCLANG
- Joueur:
-
cd /usr/ports/x11/kde4/ && make install -DWITHCLANG
-
- Retour à la case GCC si la variable NOCLANG est définie.
-
make -DNOCLANG
-
Malgré tout cela, certains ports continueront à utiliser GCC, quoique vous fassiez;tout simplement parce qu'il est clairement défini dans les makefiles.

