GL4Dummies icon indicating copy to clipboard operation
GL4Dummies copied to clipboard

[WIP] Système de compilation Meson

Open Phundrak opened this issue 6 years ago • 6 comments

Je suis en train de travailler sur une configuration du système de compilation Meson pour GL4Dummies sur la branche mesonbuild. Il y a encore quelques détails à régler, notamment l’installation (une fois la bibliothèque installée, on se retrouve avec des problèmes de linkers et le fichier .pc n’est pas correctement situé), mais le temps de compilation a été grandement réduit.

Avec les outils actuels, la compilation prend environ 16s à plus ou moins 2s sur ma machine avec la commande make -f Makefile.autotools && ./configure && make -j. L’équivalent avec Meson (meson build && ninja -C build/) ne prend que 2.5s, et la recompilation lorsqu’un unique fichier a été changé est également beaucoup plus rapide (pas d’exemple cette fois-ci).

J’ai aussi mentionné un fichier .pc, et en effet Meson en génère un, ce qui rendrait GL4Dummies compatible et détectable par pkg-config, rendant le développement de programmes et bibliothèques en dépendant beaucoup plus aisé.

Je pense également que ça aidera à avoir un système de compilation plus aisé à maintenir, le fichier meson.build ne fait qu’environ 90 lignes contre plus de 1600 lignes pour les quatres fichiers actuels, aclocal.m4, configure.ac, Makefile.am et Makefile.autotools.

J’ai également pris la liberté de modifier légèrement le source code afin de faire taire certains warnings (voir ac79ac0 et c68a695).

Phundrak avatar May 09 '19 03:05 Phundrak

Cool, merci pour cette initiative Est-ce que Meson permet de faire différents types de releases (tgz, dep, rpm, intall windows ...) ?

noalien avatar May 09 '19 06:05 noalien

Pour ce qui est du tarball, il est déjà possible d’en générer un en exécutant ninja -C build/ dist à la racine du projet, pas besoin de target supplémentaire. Avec la version actuelle, cela génère les fichiers build/meson-dist/GL4Dummies-6.0.0.tar.xz et build/meson-dist/GL4Dummies-6.0.0.tar.xz.sha256sum.

De mémoire, les targets sont cross-platforme, donc il ne devrait pas y avoir non plus besoin de target pour Windows (à tester).

Et je ne crois pas qu’il existe de solution native concernant la génération des fichiers d’installation type dep ou rpm, mais il est tout à fait possible de créer d’autres targets exécutant chacun un stript custom les générant. D’ailleurs, si cela est implémenté, il sera possible d’automatiser leur publication sur GitHub via Travis-CI, et potentiellement AppVeyor pour ce qui est des releases Windows.

Phundrak avatar May 09 '19 09:05 Phundrak

ok, on verra ça plus tard ... c'est déjà très bien d'avoir du tgz (je voulais dire .deb et non .dep) Merci !

noalien avatar May 09 '19 10:05 noalien

Je viens de faire quelques tests pour ce qui est de la compilation sous Windows, et la compilation native me semble assez compliquée du fait que l’on a pas accès à pkg-config et que l’on soit restreint à l’invite de commande développeur pour avoir accès à cl. Par contre, ce sera à mon avis peut-être plus simple avec des shells type MinGW ou Cygwin.

Phundrak avatar May 09 '19 13:05 Phundrak

MinGW ou Cygwin c'est très bien

noalien avatar May 09 '19 16:05 noalien

Normalement le commit 99440e8c6f7952073a27e436e56754a23cfc9070 règle le problème de linker. J’ai aussi ajouté dans le commit 371e224b3705f28e52588ee2a7632ff1ae191047 les instructions pour pouvoir utiliser le fichier de pkg-config.

Et pour ce qui est de l’installation avec préfixe, il se trouve que Meson le gère déjà, c.f. les instructions du Readme.

À mon avis on peut procéder à un premier merge de la branche dans le master. Je pourrai voir plus tard pour progressivement remplacer les Makefiles par des builds Meson, cela devrait pouvoir se faire relativement simplement.

Phundrak avatar May 09 '19 16:05 Phundrak