Ninja (logiciel)

Pour les articles homonymes, voir Ninja.

Ninja

Informations Développé par |  Evan Martin (d)

|

Première version |  2010
Dernière version |  1.12.1 (11 mai 2024)[1]
Dépôt |  github.com/ninja-build/ninja
Écrit en |  C++ et Python
Système d'exploitation |  Type Unix et Microsoft Windows
Environnement |  Multiplateforme (en)
Type  |  Build system (d)
Logiciel utilitaire
Licence |  Licence Apache 2.0
Site web |  ninja-build.org

modifier \- modifier le code \- voir Wikidata (aide)

Ninja est un outil de construction axé sur la rapidité. Il gère un ensemble de règles de construction interdépendantes, et les exécute parallèlement en veillant au bon respect des dépendances. Les règles de construction ont vocation à être écrite par un logiciel de configuration tel que Meson ou CMake.

Ninja est similaire à Make, dont il se veut être une alternative plus moderne. Il en diffère par une approche essentiellement descriptive du processus de construction, là où GNU Make présente certaines caractéristiques d'un langage de programmation.

## Histoire

[modifier | modifier le code]

Ninja a été développé par Evan Martin à partir de 2010 comme outil de compilation pour Chrome lors de son portage vers linux, avant d'être rapidement rendu public sous licence ouverte[2]. Chrome utilise GYP[3] comme outil de configuration. À la manière de CMake, celui-ci génère des fichiers de configuration pour l'outil de compilation spécifique à la plateforme. Le développement de Ninja a commencé après que les deux tentatives d'utilisation de SCons puis Make se soient montrées trop lentes lors des recompilations partielles de Chrome.

Dès 2011, CMake adopte Ninja[4],[5] en complément de make comme outil de compilation sous linux.

Ninja a ensuite été choisi par Meson en 2012[6] comme unique outil de compilation sur les plateforme linux, formant ainsi une nouvelle chaîne de compilation.

Plusieurs projets notables de la communauté open source, utilisant auparavant la chaîne de compilation autoconf/automake/make, ont depuis migré vers cette nouvelle chaîne, tel que GStreamer (2016)[7], ou GNOME (2017)[8],[9]

## Caractéristiques

[modifier | modifier le code]

rule cc
command = gcc -c -o $out $in
description = CC $out

rule link
command = gcc -o $out $in
description = LINK $out

build source1.o: cc source1.c
build source2.o: cc source2.c
build myprogram: link source1.o source2.o

Exemple de configuration Ninja pour la compilation d'un programme comportant deux fichiers sources[10].

Make avait été conçu pour une utilisation autonome avec une écriture manuelle des fichiers de configuration. L'utilisation de règles génériques et de macro permet d'en simplifier l'écriture, mais allonge le temps d'analyse des dépendances.

A l'opposé la conception de Ninja est minimaliste, dans le sens où il se concentre sur sa fonctionnalité première, l’ordonnancement des tâches de compilation et la détection des cibles à mettre à jour après une modification dans les fichiers source. Ainsi aucune règle générique n'existe, ce qui rend nécessaire l'écriture de toutes les dépendances avec les noms complets des fichiers concernés, rôle généralement délégué à un outil de configuration. Cette conception permet une analyse rapide des dépendances, et une accélération des recompilations partielles[2].

Des comparaisons effectuées avec Make ont montré une accélération significative lors des recompilations partielles sur de très gros projets écrit en C, la différence provenant en grande partie de la gestion des dépendances entre les fichiers `.c` et les fichiers d'en-tête `.h`[11].

Même si les fichiers de configuration de Ninja ont vocation à être écrits automatiquement par un système de configuration, ceux-ci sont en mode texte afin d'en faciliter la lecture humaine.

## Liens externes

[modifier | modifier le code]

* (en) « Manuel d'utilisation de Ninja »

## Références

[modifier | modifier le code]

1. ↑ « Release 1.12.1 », 11 mai 2024 (consulté le 23 mai 2024)
2. ↑ a et b (en) Evan Martin, « Ninja », The Performance of Open Source Applications, 2013 (lire en ligne)
3. ↑ (en) « GYP »
4. ↑ (en) « The CMake Ninja generator », 11 novembre 2011
5. ↑ « Add the Ninja generator », sur github, 11 novembre 2011
6. ↑ (en) Tim Schürmann, « Meson — a new build system », Linux magazine, no 166, 2014 (lire en ligne)
7. ↑ (en) Nirbheek Chauhan, « GStreamer and Meson: A New Hope », 23 mai 2016
8. ↑ (en) Emmanuele Bassi, « Build system change GTK's master branch », août 2017
9. ↑ (en) mclasen, « Meson considerations », 20 avril 2017
10. ↑ (en) David Röthlisberger, « The Ninja build tool », LWN.net, 16 novembre 2016 (lire en ligne)
11. ↑ (en) David Röthlisberger, « Benchmarking the Ninja build system », 4 novembre 2016

* Portail de l’informatique
* Portail des logiciels libres

*[(en)]: Langue : anglais
*[no]: numéro