ForgeZero 1.9.0 (fz), un outil de construction en ligne de commande pour les projets écrits en C, C++ et en langage assembleur (NASM, GAS, FASM), est désormais disponible. Son utilisation de base ne nécessite ni Makefile ni autre fichier de configuration. Le code source est écrit en Go et distribué sous licence MIT.
ForgeZero détecte le type de fichier et sélectionne automatiquement le moteur de rendu approprié. Chaque fichier de code est compilé en un fichier objet, puis les symboles globaux sont vérifiés dans tous les objets avant d'être liés en un seul fichier exécutable. Les fichiers compilés sont mis en cache et recompilés uniquement après modification des fichiers de code associés. En option, le suivi des modifications du système de fichiers et la recompilation après mise à jour des fichiers de code sont possibles.
Les compilateurs pris en charge sont GCC, Clang, G++ et Clang++ ; les assembleurs sont NASM, GAS et FASM ; les éditeurs de liens sont LD, GCC et Clang ; et l’archiveur AR est pris en charge. Les avertissements obligatoires pour C et C++ sont : « -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion ». Les outils de nettoyage AddressSanitizer et UndefinedBehaviorSanitizer sont activés par défaut (ils peuvent être désactivés avec l’option -sanitize=false). Les plateformes prises en charge sont : Linux, macOS, Windows (WSL2 et expérimentalement natif).
сновные изменения версии 1.9.0 :
- Ajout de l'option « -target » fz permet la compilation croisée pour toute architecture disposant des outils de préfixe appropriés. Il détermine automatiquement les noms du compilateur, de l'éditeur de liens et de l'archiveur à partir de l'identifiant spécifié (par exemple, « arm-linux-gnueabihf-gcc »). Toutes les plateformes cibles GNU standard sont prises en charge, notamment arm-linux-gnueabihf, aarch64-linux-gnu et riscv64-linux-gnu.
- La prise en charge du protocole LSP (Language Server Protocol) a été implémentée. L'option « -compile-commands » génère un fichier compile_commands.json (base de données de compilation) à la racine du projet. Ce fichier est lu par le langage. serveurs clangd et ccls, fournissant l'autocomplétion, la navigation dans le code et les diagnostics dans les éditeurs qui prennent en charge LSP (Neovim, VSCode, CLion, Emacs, etc.).
- La commande fz "-update" enregistre désormais le binaire actuel dans /usr/local/bin/fz.old avant d'installer une nouvelle version, ce qui vous permet de revenir à la version précédente sans réinstallation.
- Correction d'un bug dans les projets multi-répertoires où des fichiers portant le même nom de base et provenant de sous-répertoires différents écrasaient mutuellement leurs fichiers objets. Désormais, les noms des fichiers objets sont générés à partir du chemin relatif complet vers le fichier source.
- Implémentation du mode interactif « fz -shell » pour la compilation de fichiers individuels.
- La couverture de test a été étendue aux commandes SplitCommand, CmdSet et CmdBuild. La couverture de test du package linker est passée de 17 % à 60 %, et la couverture de tous les packages a dépassé les 40 %.
- Ajout d'un mécanisme de remplacement CheckTool pour les scénarios de test comportant des composants de chaîne d'outils manquants.
Changements par rapport aux versions précédentes :
- La version 1.8.0 implémente l'assemblage des bibliothèques statiques (-type static / -lib), assure l'unicité des noms de fichiers objets dans les projets à répertoires multiples et corrige les erreurs du sous-système d'assemblage liées au parcours du chemin ".."
- La version 1.7.0 ajoute la compilation parallèle (-j N, 0 — détection automatique du nombre de cœurs), la prise en charge des scripts de l'éditeur de liens (-T) et des adresses de point d'entrée (-Ttext), le mode interactif (fz -shell), la sélection explicite du format de sortie (elf32, elf64, bin), la compilation des fichiers C++ (.cpp, .cc, .cxx) avec les mêmes indicateurs d'avertissement stricts que pour C.
- La version 1.6.0 ajoute l'initialisation du projet (fz -init, crée .fz.yaml, .fzignore, README.md), la prise en charge du format binaire (-format bin) pour les chargeurs de démarrage et le firmware, et les champs de configuration libs, flags.cc, flags.asm, flags.ld.
- La version 1.5.0 introduit plusieurs répertoires sources (source_dirs), des listes de fichiers explicites (source_files), des modèles d'inclusion/exclusion, un champ libs pour les bibliothèques de l'éditeur de liens, le fichier .fzignore et la fusion à plusieurs niveaux des fichiers de configuration.
Source: opennet.ru
