Sortie de ForgeZero 1.9.0, un outil de compilation pour C et assembleur

Publication de la version ForgeZero 1.9.0 (fz), un outil de construction en ligne de commande pour des projets en C, C++ et assembleur (NASM, GAS, FASM). L'outil ne nécessite pas la création d'un Makefile ou d'autres fichiers de configuration pour une utilisation de base. Le code du projet est écrit en Go et est distribué sous la licence MIT.

ForgeZero détermine le type de fichier et sélectionne automatiquement le backend nécessaire. Chaque fichier de code est compilé en fichier objet, après quoi une vérification des symboles globaux dupliqués dans tous les objets est effectuée et une liaison en un fichier exécutable unique est réalisée. Les fichiers compilés sont mis en cache et sont seulement recompilés après des modifications dans les fichiers de code associés. Un suivi optionnel des modifications dans le système de fichiers et une recompilation après mise à jour des fichiers de code sont possibles.

Les compilateurs supportés incluent GCC, Clang, G++, Clang++; les assembleurs NASM, GAS, FASM; les lieurs LD, GCC, Clang; l'archivage AR. Les avertissements obligatoires pour C et C++ : « -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion ». Les sanitizers AddressSanitizer et UndefinedBehaviorSanitizer sont activés par défaut (peuvent être désactivés avec le flag -sanitize=false). Les plateformes supportées incluent Linux, macOS, Windows (WSL2 et expérimenté en natif).

Changements principaux dans la version 1.9.0 :

  • Ajout du flag « -target » , permettant de réaliser une cross-compilation pour n'importe quelle architecture, à condition de disposer des outils appropriés. fz détermine lui-même les noms du compilateur, du lieur et de l'archivage selon l'identifiant spécifié (par exemple, « arm-linux-gnueabihf-gcc »). Toutes les plateformes cibles GNU standard sont supportées, y compris arm-linux-gnueabihf, aarch64-linux-gnu et riscv64-linux-gnu.
  • Implémentation du support du protocole LSP (Language Server Protocol). Le flag « -compile-commands » génère un fichier compile_commands.json (Compilation Database) à la racine du projet. Le fichier est lu par les langages serveurs très chargés clangd et ccls, facilitant l'autocomplétion, la navigation dans le code et le diagnostic dans les éditeurs supportant LSP (Neovim, VSCode, CLion, Emacs, etc.).
  • La commande fz « -update » avant l'installation d'une nouvelle version sauvegarde désormais le fichier binaire actuel dans /usr/local/bin/fz.old, permettant de revenir à la version précédente sans réinstallation.
  • Un bug a été corrigé, dans lequel des fichiers ayant le même nom de base à partir de sous-répertoires différents écrasaient les fichiers objets les uns des autres dans des projets multidirectionnels. Les noms des fichiers objets sont désormais générés sur la base du chemin relatif complet vers le fichier source.
  • Un mode interactif « fz -shell » a été implémenté pour la compilation de fichiers uniques.
  • La couverture de test pour les commandes SplitCommand, CmdSet et CmdBuild a été ajoutée. La couverture des tests du package de l'assembleur est passée de 17 % à 60 %, et la couverture de tous les packages a dépassé 40 %.
  • Un mécanisme de substitution CheckTool a été ajouté pour tester des scénarios avec des composants d'outil manquants.

Modifications des versions précédentes :

  • La version 1.8.0 a implémenté la compilation de bibliothèques statiques (-type static / -lib), assuré l'unicité des noms de fichiers objets dans des projets multidirectionnels, et corrigé des bugs dans le sous-système de compilation liés au contournement du chemin « .. ».
  • La version 1.7.0 a ajouté la compilation parallèle (-j N, 0 - auto-détection du nombre de cœurs), le support des scripts de l'éditeur (-T) et l'adresse du point d'entrée (-Ttext), un mode interactif (fz -shell), un choix explicite du format de sortie (elf32, elf64, bin), et la compilation de fichiers C++ (.cpp, .cc, .cxx) avec les mêmes drapeaux d'avertissement stricts qu'en C.
  • La version 1.6.0 a ajouté l'initialisation du projet (fz -init, crée .fz.yaml, .fzignore, README.md), le support du format bin (-format bin) pour les chargeurs et les firmwares, ainsi que les champs de configuration libs, flags.cc, flags.asm, flags.ld.
  • La version 1.5.0 a facilité des répertoires sources multiples (source_dirs), des listes explicites de fichiers (source_files), des modèles include/exclude, un champ libs pour les bibliothèques de l'assembleur, un fichier .fzignore, et la fusion hiérarchique des fichiers de configuration.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster