• [supprimé]

information : ce tuto est une mise à jour des mes 2 anciens tutos (http://forums.fedora-fr.org/viewtopic.php?id=51681 et http://forums.fedora-fr.org/edit.php?id=532589)

Le but de ce tuto est de vous permettre de compiler une version upstream de Mesa, utilisable sur Fedora 23+. J'ai testé ce tuto pour compiler le pilote "r600g". Mais ça devrait marcher aussi pour "nouveau", "r300g", "radeonsi", et d'autres (Intel, etc).
En fait il n'y a rien d'extraordinaire, ça se résume à faire un "configure/make/make install".

Vous allez pouvoir compiler un pilote 32 ou 64 bits. C'est certainement le pilote 32 bits qui vous intéressera le plus car la plupart des jeux commerciaux (sur Steam notamment) sont en 32 bits.

Dans ce tuto, la bibliothèque Mesa compilée n'écrasera pas la version Mesa de Fedora.

ÉTAPE 1
*******
Récupérer tout le nécessaire pour compiler (commande valable pour le pilote 32 ou 64 bits) :
# dnf install git gcc automake autoconf make makedepend gcc-c++ glibc-devel.i686 glibc-devel.x86_64 libX11-devel.i686 libX11-devel.x86_64 libXfixes-devel.i686 libXfixes-devel.x86_64
# dnf install libXfixes.x86_64 libXfixes.i686 expat-devel.i686 expat-devel.x86_64 libgudev.i686 libgudev.x86_64 libgudev-devel.i686 libgudev-devel.x86_64 libXext.x86_64 libXext.i686
# dnf install libtool libxcb-devel.i686 libxcb.i686 libXxf86vm.i686 libXxf86vm-devel.i686 flex bison git libXext-devel.i686 libXmu-devel.i686 udis86-devel.i686 libXext-devel.i686
# dnf install libdrm-devel.x86_64 libdrm-devel.i686 libdrm.i686 libdrm.x86_64 libxcb-devel.x86_64 libxcb-devel.i686 libXdamage-devel.x86_64 libXdamage-devel.i686
# dnf install libXext-devel.x86_64 libXi-devel.i686 libXdamage.i686 libXdamage.x86_64 systemd-compat-libs.i686 systemd-compat-libs.x86_64 systemd-devel.i686 systemd-devel.x86_64
# dnf install libomxil-bellagio.x86_64 libomxil-bellagio.i686 libomxil-bellagio-devel.x86_64 libomxil-bellagio-devel.i686 libva.i686 libva.x86_64 libva-devel.x86_64 libva-devel.i686
# dnf install python-mako python3-mako libxshmfence.x86_64 libxshmfence-devel.x86_64 libxshmfence-devel.i686 libxshmfence.i686
Remarque : Mesa nécessite régulièrement une version récente de libdrm. Parfois elle n'est pas encore dans Fedora et donc vous ne pourrez plus compiler Mesa. Vous pouvez dans ce cas chercher une version plus à jour de libdrm depuis le dépôt updates-testing, ou bien sinon directement sur koji (http://koji.fedoraproject.org/koji/packageinfo?packageID=770).


ÉTAPE 2
*******
1. Récupérer la version upstream de Mesa :
$ git clone git://anongit.freedesktop.org/mesa/mesa
Note : lorsque vous voudrez récupérer les màj du git de Mesa, il vous suffira d'aller dans le dossier "mesa" et de faire un "make clean && git pull" :
$ cd mesa
$ git pull
2. Installer la libtxc_dxtn (S3TC) depuis RPM Fusion (recommandé) :
# dnf install libtxc_dxtn.i686 libtxc_dxtn.x86_64
Ça installera la version 32 et 64 bits de la lib.


ÉTAPE 3
*******
Allons donc compiler Mesa, placez-vous dans le répertoire mesa :
$ cd mesa
Préparer la compilation de r600g (Mesa 32 bits sur un système 64 bits) :
$ ./autogen.sh --with-gallium-drivers=r600 --with-dri-drivers= --enable-texture-float --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" --libdir=/usr/local/lib --prefix=/usr/local
Si par contre vous souhaitez compiler un Mesa 64 bits, alors la commande est la suivante :
$ ./autogen.sh --with-gallium-drivers=r600 --with-dri-drivers= --enable-texture-float CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" --libdir=/usr/local/lib64 --prefix=/usr/local
Si tout s'est bien passé vous devriez voir un récapitulatif de la configuration choisie, la dernière ligne devant être : "Run 'gmake' to build Mesa".

Vous pouvez choisir quel pilote compiler en modifiant l'option "with-gallium-drivers".

On peut maintenant compiler Mesa :
$ make -j6
Et enfin pour installer les libs sur le système (à faire en root !):
# cd /home/<user>/mesa      (chemin à adapter chez vous)
# make install
Note :
Avant de refaire une compilation il vaut mieux effectuer un "make clean" et relancer l'autogen.sh

Note 2 :
Si vous voulez voir toutes les options disponibles pour la compilation (compiler un autre pilote, activer certaines fonctions, etc.) :
$ ./autogen.sh --help

ÉTAPE 4 - TEST
*******
La bibliothèque Mesa qui vient d'être compilée n'a pas écrasée celle de Fedora car elle n'a pas été installée dans le même répertoire.
Ça veut donc dire aussi que si vous lancez maintenant un jeu, il utilisera encore la lib Mesa de Fedora.

Pour dire aux jeux d'utiliser notre version de Mesa, vous devrez lancer le jeu depuis le terminal en spécifiant des variables d'environnement qui vont indiquer où chercher la lib Mesa.
Par exemple pour lancer le jeu "Enemy Territory: QUAKE Wars" :
$ LD_LIBRARY_PATH="/usr/local/lib" LIBGL_DRIVERS_PATH="/usr/local/lib/dri" /usr/local/games/etqw/etqw

ANNEXE (Si vous modifiez du code)
*******
Si vous voulez soumettre un patch, une commande très simple permet de générer le patch à envoyer à la mailing-list mesa-dev :
$ git diff > le_nom_de_mon_amelioration.patch
Si vous avez effectué des changements dans le code et que vous faites un git pull ultérieurement pour récupérer les dernières modifs, git risque de gueuler. Pour supprimer toutes vos modifications et revenir avec la base upstream :
$ git stash
Pour appliquer un patch :
$ git apply --check patch_a_appliquer.patch
Cette commande va juste vérifier que le patch peut-être appliquer correctement.

S'il n'y a pas de message d'erreur, c'est que tout va bien, vous pouvez l'appliquer réellement :
$ git apply patch_a_appliquer.patch
Une fois appliqué, il ne vous reste plus qu'à compiler Mesa.