Compilations
1. Compiler un logiciel à la main
L’éco-système logiciel de Guix a beau être riche, la compilation manuelle reste nécessaire parce que :
-
Il s’agit d’un code qu’on développe,
-
Le logiciel n’existe pas encore dans l’ensemble des canaux logiciels,
-
La version fournie n’a pas été compilée avec les options désirées, ou n’est pas à la version désirée.
Guix dispose d’une documentation complète et en Français, cette page ne s’y substitue pas. Merci de consulter https://guix.gnu.org/fr/manual/devel/fr/html_node/ |
Tous les outils nécessaires à une compilation « manuelle » sont disponibles. L’installation des logiciels se faisant « à la carte » pour tous les utilisateurs, il suffit de les installer dans son profil. Pour compiler des logiciels classiques écrits en C ou C++, les paquetages logiciels suivants doivent être installés :
-
gcc-toolchain (contient gcc, g++ mais aussi l’assembleur natif à la machine)
-
binutils (contient le linker)
-
make (pour gérer les Makefiles), mais aussi cmake si besoin
-
glibc (cela peut paraître contre-intuitif, mais cela est nécessaire pour avoir les Headers)
guix install gcc-toolchain binutils make glibc
Ces logiciels sont désormais installés dans le profil principal et sont disponibles à tout moment.
À partir de là, le processus habituel fonctionne : aller dans le répertoire contenant les sources et faire make
.
1.1. Utiliser guix shell pour créer un environnement de développement propre et adapté
Pour mieux contrôler l’ensemble des dépendances nécessaires à la compilation d’un logiciel, il est conseillé d’utiliser la fonctionnalité de « guix shell » qui crée des environnements isolés. Ainsi :
guix shell gcc-toolchain binutils make glibc
permet de créer un environnement temporaire ajoutant ces logiciels au-dessus du profil courant. À la sortie du shell, cet environnement d’exécution, volatil, disparaît.
guix shell -C gcc-toolchain binutils make glibc
est plus radical, car il crée un conteneur totalement isolé du système doté uniquement des paquetages listés. Il est à noter que ce fait est noté par l’invite du prompt qui change : dupont-y@univ-nantes.fr@login-002-v4 ~ [env]$
.
Bien entendu, si le logiciel dépasse les quelques centaines de lignes, il est probable qu’il soit lié avec des librairies tierces, qu’il faut installer dans son profil, ou dans un shell.
1.2. Exemple concret avec Gromacs
Gromacs est un logiciel de chimie relativement complexe. Bien qu’existant déjà dans les canaux Guix et GLiCID, la suite détaille une installation pas à pas pour le compiler manuellement.
L’installation manuelle est détaillée ici : https://manual.gromacs.org/documentation/current/install-guide/index.html et les instructions à suivre en sont dérivées.
-
Récupérer le source :
$ wget https://ftp.gromacs.org/gromacs/gromacs-2023.tar.gz
--2023-04-20 09:53:33-- https://ftp.gromacs.org/gromacs/gromacs-2023.tar.gz
Resolving proxy-upgrade.univ-nantes.prive (proxy-upgrade.univ-nantes.prive)... 172.20.12.74, 2001:660:7220:8381:3128:0:2:1
Connecting to proxy-upgrade.univ-nantes.prive (proxy-upgrade.univ-nantes.prive)|172.20.12.74|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 41863526 (40M) [application/x-gzip]
Saving to: ‘gromacs-2023.tar.gz’
gromacs-2023.tar.gz 100%[=============================================================================================================================================================================================================================================>] 39.92M 40.9MB/s in 1.0s
2023-04-20 09:53:35 (40.9 MB/s) - ‘gromacs-2023.tar.gz’ saved [41863526/41863526]
$ dupont-y@univ-nantes.fr@login-002-v4 ~/GROMACS$
Exécuter le début de la doc d’installation
$ tar xfz gromacs-2023.tar.gz (1)
$ cd gromacs-2023
$ mkdir build
$ cd build
1 | : comme précisé ici : [targzavantshell] , à faire avant de rentrer dans le shell.
|
guix shell -E=*proxy* -CN gcc-toolchain@10 cmake make glibc coreutils procps sed grep file diffutils gawk findutils
Une fois dans le shell, continuer à suivre la documentation, mais dans un 1er temps, ne pas chercher à faire les tests.
cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=OFF
make
Après de nombreuses minutes de compilation, on obtient alors une version minimale de gromacs. Il serait nécessaire d’ajouter des paquetages (tels que hwloc ou cuda) pour générer un binaire disposant de fonctionnalités supplémentaires.
Une fois le logiciel compilé, il est possible de sortir du shell et d’utiliser le logiciel.
Dans les cas les plus complexes, il peut s’avérer pénible de retaper la liste des paquetages nécessaires. Dans ce cas, il est possible de créer un « manifest » :
-
Reprendre la commande « guix shell » précédente et s’en servir pour générer un manifeste :
guix shell -E=*proxy* -CN gcc-toolchain@10 cmake make glibc coreutils procps sed grep file diffutils gawk findutils --export-manifest > gromacs-manifest.scm
Le contenu du fichier est le suivant :
;; What follows is a "manifest" equivalent to the command line you gave.
;; You can store it in a file that you may then pass to any 'guix' command
;; that accepts a '--manifest' (or '-m') option.
(specifications->manifest
(list "gcc-toolchain@10"
"cmake"
"make"
"glibc"
"coreutils"
"procps"
"sed"
"grep"
"file"
"diffutils"
"gawk"
"findutils"))
Ce fichier peut être édité à la main. La commande « guix shell » peut désormais se résumer à :
guix shell -E=*proxy* -CN -m gromacs-manifest.scm
1.3. Générer un paquetage Guix
À partir de l’expérience précédente, il est possible d’automatiser la procédure et générer un paquetage guix avec la commande « guix build ».
WIP. A compléter. Consulter https://guix.gnu.org/fr/cookbook/fr/html_node/ . |
1.4. Intégrer le paquetage aux canaux GLiCID
WIP. À compléter. Pointer sur gitlab.univ-nantes.fr et les canaux publics cf https://gitlab.univ-nantes.fr/glicid-public/guix-glicid et https://gitlab.univ-nantes.fr/glicid-public/glicid-non-free |
2. Changer les options de compilation, dérivations
guix edit nomdupaquetage
WIP. A compléter. Consulter https://guix.gnu.org/fr/cookbook/fr/html_node/ . |