[makepkg] Compilation et optimisations pour différents CPU

Mise à jour / Création /debug de paquetages
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

[makepkg] Compilation et optimisations pour différents CPU

Message par mimas »

Bonjour à tous.

Il y quelques temps que je traine sous Archlinux car j'aime bien la facilité et la simplicité de sa configuration et ses outils. Je n'avais jamais encore été dans sa communauté, FR, francophone ou autre. Mais j'avais envoyé un emissaire parmi vous : Mélodie que j'ai convertie après que Gnunux m'ai parlé de Arch, la distro aussi sympathique que ma distro fétiche, Slackware. :)

Aujourd'hui je vais vous parler de mon makepkg.conf que j'ai un peu modifié pour pouvoir compiler de façon plus simple pour mes deux machines, dont une EPIA avec CPU C3 qui est incompatible avec Arch. Cette incompatibilité est dûe à GCC qui considère l'instruction CMOV comme faisant partie du jeu d'instructions des CPU de la classe i686. Mais elle est optionnelle, les programmes l'utilisant plantent malheureusement.

Il m'a donc fallu compiler les programmes de base et le kernel sur un machine autre (un pentium-m) et sans que cette instruction illégale sur le C3 soit apportée par une librairie présente sur ma machine de compilation, j'ai donc recompilé tout mon système de base en utilisant l'optimisation pour une classe de CPU (i586) n'ayant pas de CMOV pour ne pas trainer le bug GCC.

Puisqu'il me fallait compiler pour différents CPUs, j'ai modifié etc/makepkg.conf afin de pouvoir passer d'un paramètre de compilation à l'autre sans trop de soucis. J'ai choisi d'utiliser une variable d'enregistrement, CPUNAME pour effectuer ce switch. Cette variable permettra aussi de selectionner le dépôt où sera placé le paquet une fois la compilation faite.

Code : Tout sélectionner

#
# /etc/makepkg.conf
#

# The FTP/HTTP download utility that makepkg should use to acquire sources
export FTPAGENT="/usr/bin/wget --continue --passive-ftp"


export CARCH="i686"
export CHOST="i686-pc-linux-gnu" 


case "$CPUNAME" in
  "athlon-xp")
      export CFLAGS="-march=${CPUNAME} -O2 -pipe"
      export CXXFLAGS="-march=${CPUNAME} -O2 -pipe"
      export PKGDEST=/home/packages/${CPUNAME}
      ;;

  "pentium3")
      export CFLAGS="-march=${CPUNAME} -O2 -pipe"
      export CXXFLAGS="-march=${CPUNAME} -O2 -pipe"
      export PKGDEST=/home/packages/${CPUNAME}
      ;;


  "c3")
      export CFLAGS="-march=${CPUNAME} -Os -pipe -fomit-frame-pointer"
      export CXXFLAGS="-march=${CPUNAME} -Os -pipe -fomit-frame-pointer"
      export PKGDEST=/home/packages/${CPUNAME}
      ;;

  "pentium-m")
      export CFLAGS="-march=${CPUNAME} -O2 -pipe"
      export CXXFLAGS="-march=${CPUNAME} -O2 -pipe"
      export PKGDEST=/home/packages/${CPUNAME}
      ;;

   *) 
      export CPUNAME="i486"
      export CFLAGS="-march=i486 -mtune=i686 -O2 -pipe"
      export CXXFLAGS="-march=i486 -mtune=i686 -O2 -pipe"
      export PKGDEST=/home/packages/i486
      ;;

esac

# j'utilise /var/abs/local uniquement pour les paquets d'origines que j'ai modifié.
# Je ne les mélange pas avec  ceux externes 
if [ -n "`pwd | grep /var/abs/`" ]; then
	export PKGDEST=$PKGDEST"/abs"
fi

# on crée le répertoire des fois que... :)
if [ ! -e $PKGDEST ]; then
  mkdir -p $PKGDEST
fi

# Enable fakeroot for building packages as a non-root user
export USE_FAKEROOT="y"

# Enable colorized output messages
export USE_COLOR="y"


# Pour Compilation répartie sur plusieurs serveurs
#export CC="distcc"
#export CXX="distcc gcc"
#export MAKEFLAGS="-j3"
#export DISTCC="y"
export DISTCC_HOSTS="localhost/2 laptop/1,lzo mini/1,lzo"


# Keep doc and info directories
export KEEPDOCS="1"

export CLEANLOCALES="1"

Voici donc un makepkg au comportement facilement modifiable. On peut mettre encore plein de fantaisie : ce n'est que du shell.

CLEANLOCALES serait le sujet d'un prochain post. :)

PS: Update du makepkg.conf
Dernière modification par mimas le jeu. 04 janv. 2007, 20:40, modifié 1 fois.
Avatar de l’utilisateur
Skunnyk
Maître du Kyudo
Messages : 1137
Inscription : mer. 06 sept. 2006, 21:31
Localisation : IRC
Contact :

Message par Skunnyk »

Plop =)
Je sais pas si c'est specifique au i686, mais en compilant en i486/i586 ca ne poserais pas de probleme ?
Alors lowarch ( http://www.lowarch.org) est peu etre fait pour toi, c'est une archlinux recompiler pour anciens systeme (i486), ca tourne bien, une mise a jour complete sera fait prochainement, et si ca t'interesse et que tu veux contribuer ne te gene pas ^^ (apres je ne sais pas si ca correspond a ton probleme ;))
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

Message par mimas »

Le support de l'instruction cmov doit être vérifié car c'est optionnel chez les i686. un cat /proc/cpuinfo montre si oui ou non le cpu la supporte (techniquement ça se fait avec l'instruction cpuid qui donne les capacités du CPU, mais GCC n'en a que cure. :().

Merci pour le lien, cela aurait été plus rapide à mettre en place, l'EPIA fonctionne très bien avec son archlinux optimisée. :)
Avatar de l’utilisateur
warnaud
Maître du Kyudo
Messages : 1640
Inscription : ven. 11 août 2006, 17:05
Localisation : Rolle (CH)

Message par warnaud »

whoua énorme ! couplé avec l'option de compilation binaire de sourcepack / yaourt on va pouvoir se faire des glibc / gcc / kernels ultra optimisés ! merci mimas
Plus ça rate, plus ça a de chance de réussir. En somme, un succès n'est qu'une erreur qui a finit par réussir (même par erreur). Ne déséspérez donc pas et perseverez. Utilisez La Rache™
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

salut mimas et bienvenue !
Ce premier post est fort intéressant :-)

Moi même j'utilise une méthode assez proche pour compiler sur la même machine des paquetages à la fois en i686 pour le repository [archlinuxfr], athlonXP pour mon pc, et pentium2 pour mon portable. Ton implémentation est de loin beaucoup plus pratique :)
Il ne reste qu'à modifier makepkg pour qu'on puisse lui passer l'option désirée à la volée :D
Avatar de l’utilisateur
mimas
Elfe
Messages : 559
Inscription : sam. 30 sept. 2006, 22:30
Localisation : Toulouse

Message par mimas »

Merci.

Héhé, la modification de makepkg est une chose intéressante. ;)
Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)

Message par marc[i1] »

Ne vous emmerdez plus, emmerdez les autres.
Répondre