Die Veröffentlichung von ForgeZero 1.9.0 (fz), einem Konsolenwerkzeug für die Erstellung von Projekten in C, C++ und Assembler (NASM, GAS, FASM), ist erfolgt. Das Werkzeug erfordert keine Erstellung von Makefiles oder anderen Konfigurationsdateien für die grundlegende Nutzung. Der Code des Projekts ist in Go geschrieben und wird unter der MIT-Lizenz verteilt.
ForgeZero erkennt den Dateityp und wählt automatisch den benötigten Backend aus. Jede Code-Datei wird in eine Objektdatei kompiliert, gefolgt von einer Überprüfung von doppelten globalen Symbolen in allen Objekten und der Erstellung einer einzigen ausführbaren Datei. Kompilierte Dateien werden zwischengespeichert und nur nach Änderungen an den damit verbundenen Quelldateien erneut kompiliert. Es ist möglich, optionale Dateisystemänderungen zu überwachen und nach Aktualisierungen der Quelldateien eine erneute Kompilierung durchzuführen.
Unterstützt werden die Compiler GCC, Clang, G++, Clang++; Assembler NASM, GAS, FASM; Linker LD, GCC, Clang; Archivierungswerkzeug AR. Obligatorische Warnungen für C und C++: „-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion“. Standardmäßig sind die Sanitizer AddressSanitizer und UndefinedBehaviorSanitizer aktiviert (werden mit dem Flag -sanitize=false deaktiviert). Unterstützte Plattformen sind Linux, macOS, Windows (WSL2 und experimentell nativ).
Hauptänderungen in Version 1.9.0:
- Das Flag „-target“ wurde hinzugefügt, das die Cross-Kompilierung für beliebige Architekturen ermöglicht, sofern die entsprechenden Präfix-Toolchains vorhanden sind. fz erkennt die Namen des Compilers, Linkers und Archivierers anhand der angegebenen Kennung (z. B. „arm-linux-gnueabihf-gcc“). Unterstützt werden alle standardmäßigen Zielplattformen von GNU, einschließlich arm-linux-gnueabihf, aarch64-linux-gnu und riscv64-linux-gnu.
- Die Unterstützung des Protokolls LSP (Language Server Protocol) wurde implementiert. Das Flag „-compile-commands“ erzeugt eine Datei compile_commands.json (Kompilierungsdatenbank) im Stammverzeichnis des Projekts. Diese Datei wird von den Programmen Servern gearbeitet werden. clangd und ccls gelesen, um die Funktionalitäten wie Autocomplete, Code-Navigation und Diagnosen in LSP-kompatiblen Editoren (Neovim, VSCode, CLion, Emacs usw.) bereitzustellen.
- Das Team fz «-update» sichert jetzt die aktuelle Binärdatei vor der Installation einer neuen Version in /usr/local/bin/fz.old, was es ermöglicht, zur vorherigen Version ohne Neuinstallation zurückzukehren.
- Ein Fehler wurde behoben, bei dem in Multidirectory-Projekten Dateien mit denselben Basisnamen aus verschiedenen Unterverzeichnissen sich gegenseitig überschrieben. Die Namen der Objektdateien werden jetzt basierend auf dem vollständigen relativen Pfad zur Quell-Datei generiert.
- Ein interaktiver Modus «fz -shell» für den Zusammenbau 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 Überprüfung von CheckTool wurde hinzugefügt, um Testszenarien mit fehlenden Komponenten der Toolchain zu testen.
Änderungen der vorherigen Versionen:
- In Version 1.8.0 wurde der Zusammenbau von statischen Bibliotheken (-type static / -lib) implementiert, die Einzigartigkeit der Objektdateinamen in Multidirectory-Projekten sichergestellt und Fehler im Build-Subsystem, die mit dem Umgang von „..“ verbunden waren, behoben.
- In Version 1.7.0 wurde die parallele Kompilierung (-j N, 0 — automatische Erkennung der Anzahl der Kerne), Unterstützung von Linker-Skripten (-T) und der Adresse des Einstiegspunkts (-Ttext), interaktiver Modus (fz -shell), explizite Auswahl des Ausgabeformats (elf32, elf64, bin) sowie die Kompilierung von C++-Dateien (.cpp, .cc, .cxx) mit den gleichen strengen Warnflaggen wie für C hinzugefügt.
- In Version 1.6.0 wurden die Projektinitialisierung (fz -init, erstellt .fz.yaml, .fzignore, README.md), Unterstützung des bin-Formats (-format bin) für Loader und Firmware, Konfigurationsfelder libs, flags.cc, flags.asm und flags.ld hinzugefügt.
- In Version 1.5.0 wurden mehrere Quellverzeichnisse (source_dirs), explizite Listen von Dateien (source_files), Include/Exclude-Vorlagen, das Feld libs für Linker-Bibliotheken, die .fzignore-Datei und mehrstufiges Mergen von Konfigurationsdateien implementiert.
Quelle: opennet.ru
