Die Veröffentlichung von ForgeZero 1.9.0 (fz), einem Konsolen-Tool zum Bauen von Projekten in C, C++ und Assembler (NASM, GAS, FASM), ist erfolgt. Das Tool erfordert keine Erstellung von Makefiles oder anderen Konfigurationsdateien für die Grundnutzung. Der Code des Projekts ist in Go geschrieben und steht unter der MIT-Lizenz.
ForgeZero bestimmt den Dateityp und wählt automatisch das erforderliche Backend aus. Jede Code-Datei wird in eine Objektdatei kompiliert, gefolgt von einer Überprüfung auf doppelte globale Symbole in allen Objekten und der Verknüpfung zu einer einzelnen ausführbaren Datei. Kompilierte Dateien werden zwischengespeichert und nur neu kompiliert, wenn Änderungen an den zugehörigen Code-Dateien vorgenommen werden. Eine optionale Überwachung von Änderungen im Dateisystem und die Neubau nach Aktualisierung der Code-Dateien sind möglich.
Unterstützt werden die Compiler GCC, Clang, G++, Clang++; Assembler NASM, GAS, FASM; Linker LD, GCC, Clang; Archivator AR. Obligatorische Warnungen für C und C++: „-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion“. Standardmäßig sind die Sanitizers AddressSanitizer und UndefinedBehaviorSanitizer aktiviert (deaktiviert mit dem Flag -sanitize=false). Unterstützte Plattformen sind Linux, macOS, Windows (WSL2 und experimentell nativ).
Die wichtigsten Änderungen in Version 1.9.0:
- Ein neuer Flag „-target“ wurde hinzugefügt, der eine Cross-Kompilierung für beliebige Architekturen ermöglicht, wenn das entsprechende Prefix-Toolchain vorhanden ist. fz bestimmt automatisch die Namen des Compilers, Linkers und Archivers anhand der angegebenen Identifier (z.B. „arm-linux-gnueabihf-gcc“). Alle gängigen GNU-Zielplattformen, einschließlich arm-linux-gnueabihf, aarch64-linux-gnu und riscv64-linux-gnu, werden unterstützt.
- Die Unterstützung des LSP-Protokolls (Language Server Protocol) wurde implementiert. Der Flag „-compile-commands“ generiert eine Datei compile_commands.json (Compilation Database) im Stammverzeichnis des Projekts. Die Datei wird von den Programmen Servern clangd und ccls gelesen, wodurch Funktionen wie Autovervollständigung, Code-Navigation und Diagnosen in Editoren mit LSP-Unterstützung (Neovim, VSCode, CLion, Emacs usw.) zur Verfügung stehen.
- Der Befehl fz „-update“ sichert vor der Installation einer neuen Version nun die aktuelle Binärdatei in /usr/local/bin/fz.old, was einen Rollback auf die vorherige Version ohne Neuinstallation ermöglicht.
- Ein Fehler wurde behoben, bei dem in Multi-Verzeichnisprojekten Dateien mit identischen Grundnamen aus verschiedenen Unterverzeichnissen sich gegenseitig überschrieben. Die Namen der Objektdateien werden jetzt basierend auf dem vollen relativen Pfad zur Quelldatei erstellt.
- Der interaktive Modus „fz -shell“ für das Bauen einzelner Dateien wurde implementiert.
- Testabdeckung für die Befehle SplitCommand, CmdSet und CmdBuild wurde hinzugefügt. Die Testabdeckung des Linker-Pakets wurde von 17% auf 60% erhöht, und die Abdeckung aller Pakete überstieg 40%.
- Ein Mechanismus zur Ersetzung von CheckTool für Testszenarien ohne fehlende Toolchain-Komponenten wurde hinzugefügt.
Änderungen der vorherigen Versionen:
- In Version 1.8.0 wurde das Erstellen statischer Bibliotheken (-type static / -lib) implementiert, die Einzigartigkeit der Namen der Objektdateien in Multi-Verzeichnisprojekten gewährleistet und Fehler im Build-Subsystem, die mit dem Durchqueren des Pfades „..“ zusammenhängen, behoben.
- In Version 1.7.0 wurde die parallele Kompilierung (-j N, 0 — automatische Erkennung der Anzahl der Kerne), Unterstützung für Linker-Skripte (-T) und den Einstiegspunkt (-Ttext), der interaktive Modus (fz -shell), die explizite Auswahl des Ausgabeformats (elf32, elf64, bin), die Kompilierung von C++-Dateien (.cpp, .cc, .cxx) mit denselben strengen Warnungsflags wie für C hinzugefügt.
- In Version 1.6.0 wurden die Projektinitialisierung (fz -init, erstellt .fz.yaml, .fzignore, README.md), Unterstützung für das bin-Format (-format bin) für Loader und Firmware, Konfigurationsfelder libs, flags.cc, flags.asm, flags.ld hinzugefügt.
- In Version 1.5.0 wurden mehrere Quellverzeichnisse (source_dirs), explizite Dateilisten (source_files), Include-/Exclude-Vorlagen, das Feld libs für den Linker, die .fzignore-Datei und ein mehrstufiges Zusammenführen von Konfigurationsdateien implementiert.
Quelle: opennet.ru
