L'objectif de cet article est de comparer les outils de construction de logiciel utilisés par les applications open source présentées sur le site web de kezacode. Cet article sera enrichi avec le temps.
Les logiciels comparés sont les suivants :
Les étapes de construction sont similaires, bien que l'on observe que chaque application s'appuie sur des outils différents, voire spécifiques. On peut distinguer plusieurs étapes:
Cet article n'aborde pas l'étape de téléchargement de code, l'étape de test et l'infrastructure d'intégration continue plus généralement.
| Application | Configuration | Spécifique ? |
|---|---|---|
| Chromium | GN Build configuration | Oui |
| Firefox | Mozconfig ( + configure.py ) | Oui |
| Thunderbird | Mozconfig ( + configure.py ) | Oui |
| Libreoffice | GNU Autoconf ( + scripts M4) | Non |
| VLC | GNU Autoconf ( + scripts M4) | Non |
| Linux Kernel | kconfig | Oui |
Android utilise un script envsetup.sh puis l'outil lunch pour configurer l'appareil cible. Voir ici
Chromium s'appuie sur la configuration GN: GN Build configuration. On peut citer le fichier args.gn qui contient la configuration choisie par le développeur , ainsi que le fichier principal BUILDCONFIG.Gn (qui en appelle de nombreux autres) pour l'autoconfiguration.
Firefox et thunderbird utilisent Mozconfig, voir par exemple la configuration pour thunderbird. On peut noter un script de configuration initiale écrit en python (configure.py): il n'est pas appelé explicitement par le dévelopeur qui lance simplement le BUILD avec l'outil Mach. Mach supporte l'option configure: mach configure
LibreOffice utilise Autoconf (configure.ac), qui permet de générer un script shell de configuration (configure) qui permet lui même de générer un fichier makefile qui contient toute la configuration nécessaire à la compilation. Il est à noter qu'autoconf s'appuie sur le language de script GNU M4.
Videolan media player (VLC) utilise Autoconf lui aussi.
Linux s'appuie sur kconfig, le système permettant de configurer le kernel. Il permet aux développeurs d'activer / désactiver / paramétrer les fonctionnalités du noyau. Le résultat de l'étape de configuration permet d'influer sur le code C (activation ou désactivation de fonctionnalités via le préprocesseur) et sur la compilation Make (option prise en compte par makefile).
La plupart des projets utilisent un front-end de construction logiciel, ou outil de meta-construction logiciel. Ces outils permettent de simplifier et d'automatiser la construction de projets de grande envergure. Il facilitent l'abstraction par rapport à la plateforme cible, facilitent la gestion des dépendances, tout en offrant de bonnes performances (selon la solution). Il génèrent souvent des fichiers de construction plus bas niveau (par exemple Make, Ninja), eux même utilisés pour générer le logiciel final final.
| Application | description de la construction | Spécifique ? | Compilation |
|---|---|---|---|
| Android | Google Soong | Oui | Ninja + Divers |
| Android (2) | Bazel | Non | divers |
| Firefox | Moz.build | Oui | Make, Visual Studio... |
| Thunderbird | Moz.build | Oui | Make, Visual Studio... |
| Libreoffice | GBuild (Macros Make) | Oui | N/A (Make) |
| VLC | GNU Automake | Non | Make |
| Linux Kernel | N/A | - | kbuild (Make) |
Chromium utilise principalement Google GN (GN: Générer Ninja), qui génère des fichiers de construction Ninja (le back end de construction logicielle, un équivalent plus performant et plus simple que Make). Certains composants de Chromium utilisent aussi Bazel (voir plus bas).
Android utilise principalement le front-end de construction Soong, conçu pour Android. Il utilise les fichiers de construction Android.bp (blueprint). Soong et les règles de construction sont écrits avec le language Go (ou GoLang). Soong génère des fichiers Ninja, mais aussi Make, Visual Studio, etc.
Android devrait migrer progressivement de Soong vers Bazel. Bazel est aussi un système de construction open source développé par Google, utilisé par d'autres projets open source. Il supporte plus de languages que Soong et offre un système de cache permettant de réutiliser le résultat des compilations précédentes.
Firefox et Thunderbird utilisent un système de meta-construction spécifique aux besoins Mozilla, qui s'appuie sur les fichiers Moz.build (Front-end) et Python. Cela permet de générer les fichiers de construction back-end tels que GNU Make et Microsoft Visual Studio. Il est à noter que Thunderbird est bati à partir du code source de Firefox.
LibreOffice utilise GBuild, spécifiquement conçu pour les besoins d'OpenOffice ou LibreOffice. GBuild s'appuie directement sur Make via l'usage de macros avancées.
Videolan media player (VLC) utilise pour sa part Automake (fichiers makefile.am), une solution opensource de l'écosystème GNU, qui sert à simplifier et automatiser la création de Makefile. Automake est plus particulièrement conçu pour C et C++.
Linux utilise kbuild qui s'appuie sur make. Les makefile sont alimentés par la configuration générée par kconfig. Les fichiers .config définissent les options choisies. Un makefile en tiendra compte pour générer un module par exemple.
Cette étape n'est pas détaillée, car plus classique.