Veröffentlichung von ForgeZero 1.9.0, einem Build-Tool für C und Assembler

ForgeZero 1.9.0 (fz), ein Kommandozeilen-Build-Tool für Projekte in C, C++ und Assemblersprachen (NASM, GAS, FASM), wurde veröffentlicht. Für die grundlegende Verwendung benötigt das Tool weder ein Makefile noch andere Konfigurationsdateien. Der Projektcode ist in Go geschrieben und unter der MIT-Lizenz lizenziert.

ForgeZero erkennt den Dateityp und wählt automatisch das passende Backend aus. Jede Codedatei wird in eine Objektdatei kompiliert, anschließend auf doppelte globale Symbole in allen Objekten geprüft und zu einer einzigen ausführbaren Datei verknüpft. Kompilierte Dateien werden zwischengespeichert und erst nach Änderungen an den zugehörigen Codedateien neu kompiliert. Optional ist die Nachverfolgung von Dateisystemänderungen und die Neukompilation nach Codedateiaktualisierungen möglich.

Unterstützte Compiler sind GCC, Clang, G++ und Clang++; Assembler sind NASM, GAS und FASM; Linker sind LD, GCC und Clang; der AR-Archivierer wird unterstützt. Obligatorische Warnungen für C und C++ sind: „-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion“. Die Sanitizer AddressSanitizer und UndefinedBehaviorSanitizer sind standardmäßig aktiviert (sie können mit dem Flag -sanitize=false deaktiviert werden). Unterstützte Plattformen sind: Linux, macOS, Windows (WSL2 und experimentell nativ).

Neue Funktionen in Version 1.9.0:

  • Das Flag "-target" wurde hinzugefügt. fz ermöglicht die Cross-Kompilierung für beliebige Architekturen mit den entsprechenden Präfix-Tools. Es ermittelt automatisch die Namen von Compiler, Linker und Archiver anhand des angegebenen Bezeichners (z. B. „arm-linux-gnueabihf-gcc“). Alle gängigen GNU-Zielplattformen werden unterstützt, darunter arm-linux-gnueabihf, aarch64-linux-gnu und riscv64-linux-gnu.
  • Die Unterstützung für das Language Server Protocol (LSP) wurde implementiert. Das Flag „-compile-commands“ erzeugt eine compile_commands.json-Datei (Kompilierungsdatenbank) im Projektverzeichnis. Diese Datei wird von der Sprache gelesen. Server clangd und ccls bieten Autovervollständigung, Codenavigation und Diagnosefunktionen in Editoren, die LSP unterstützen (Neovim, VSCode, CLion, Emacs usw.).
  • Der Befehl fz "-update" speichert nun die aktuelle Binärdatei unter /usr/local/bin/fz.old, bevor eine neue Version installiert wird. Dadurch können Sie zur vorherigen Version zurückkehren, ohne diese neu installieren zu müssen.
  • Ein Fehler in Projekten mit mehreren Verzeichnissen wurde behoben, bei dem Dateien mit identischen Basisnamen aus verschiedenen Unterverzeichnissen die Objektdateien der jeweils anderen Datei überschrieben. Objektdateinamen werden nun anhand des vollständigen relativen Pfads zur Quelldatei generiert.
  • Der interaktive Modus "fz -shell" zum Erstellen einzelner Dateien wurde implementiert.
  • Die Testabdeckung für die Befehle SplitCommand, CmdSet und CmdBuild wurde erweitert. Die Testabdeckung für das Linker-Paket hat sich von 17 % auf 60 % erhöht, und die Abdeckung für alle Pakete liegt nun bei über 40 %.
  • Es wurde ein CheckTool-Ersatzmechanismus für Testszenarien mit fehlenden Toolchain-Komponenten hinzugefügt.

Änderungen gegenüber früheren Versionen:

  • Version 1.8.0 implementiert die Assemblierung statischer Bibliotheken (-type static / -lib), gewährleistet die Eindeutigkeit von Objektdateinamen in Projekten mit mehreren Verzeichnissen und behebt Fehler im Assemblierungssubsystem im Zusammenhang mit der Traversierung des Pfades ".." .
  • Version 1.7.0 bietet parallele Kompilierung (-j N, 0 — automatische Erkennung der Anzahl der Kerne), Unterstützung für Linker-Skripte (-T) und Einstiegspunktadressen (-Ttext), interaktiven Modus (fz -shell), explizite Auswahl des Ausgabeformats (elf32, elf64, bin), Kompilierung von C++-Dateien (.cpp, .cc, .cxx) mit den gleichen strengen Warnflags wie für C.
  • Version 1.6.0 fügt die Projektinitialisierung (fz -init, erstellt .fz.yaml, .fzignore, README.md), die Unterstützung des Binärformats (-format bin) für Bootloader und Firmware sowie die Konfigurationsfelder libs, flags.cc, flags.asm, flags.ld hinzu.
  • Version 1.5.0 führt mehrere Quellverzeichnisse (source_dirs), explizite Dateilisten (source_files), Einschluss-/Ausschlussmuster, ein libs-Feld für Linkerbibliotheken, die .fzignore-Datei und die mehrstufige Zusammenführung von Konfigurationsdateien ein.

Source: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz und VPS-VDS-Servern 🔥 Kaufen Sie zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster