Byl vydán ForgeZero 1.9.0 (fz), nástroj pro sestavování projektů z příkazového řádku napsaných v jazycích C, C++ a assemblerových jazycích (NASM, GAS, FASM). Nástroj pro základní použití nevyžaduje Makefile ani jiné konfigurační soubory. Kód projektu je napsán v jazyce Go a je licencován pod licencí MIT.
ForgeZero detekuje typ souboru a automaticky vybere vhodný backend. Každý soubor kódu je zkompilován do objektového souboru, poté je zkontrolován na duplicitní globální symboly ve všech objektech a propojen do jednoho spustitelného souboru. Zkompilované soubory jsou uloženy do mezipaměti a znovu zkompilovány až po provedení změn v souvisejících souborech kódu. Volitelně je možné sledovat změny souborového systému a znovu zkompilovat po aktualizacích souborů kódu.
Podporované kompilátory jsou GCC, Clang, G++ a Clang++; assemblery jsou NASM, GAS a FASM; linkery jsou LD, GCC a Clang; a podporován je archivátor AR. Povinná varování pro C a C++ jsou: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Sanitizery AddressSanitizer a UndefinedBehaviorSanitizer jsou ve výchozím nastavení povoleny (lze je zakázat pomocí příznaku -sanitize=false). Podporované platformy jsou: Linux, macOS, Windows (WSL2 a experimentálně nativní).
Hlavní změny ve verzi 1.9.0:
- Přidán příznak „-target“ , což umožňuje křížovou kompilaci pro jakoukoli architekturu s příslušnými prefixovými nástroji. fz automaticky určuje názvy kompilátoru, linkeru a archivátoru na základě zadaného identifikátoru (např. „arm-linux-gnueabihf-gcc“). Jsou podporovány všechny standardní cílové platformy GNU, včetně arm-linux-gnueabihf, aarch64-linux-gnu a riscv64-linux-gnu.
- Byla implementována podpora pro Language Server Protocol (LSP). Příznak „-compile-commands“ generuje soubor compile_commands.json (kompilační databáze) v kořenovém adresáři projektu. Soubor je čten programem language. servery clangd a ccls, které poskytují automatické doplňování, navigaci v kódu a diagnostiku v editorech podporujících LSP (Neovim, VSCode, CLion, Emacs atd.).
- Příkaz fz „-update“ nyní před instalací nové verze ukládá aktuální binární soubor do souboru /usr/local/bin/fz.old, což umožňuje vrátit se k předchozí verzi bez nutnosti přeinstalace.
- Opravena chyba v projektech s více adresáři, kdy soubory se stejnými základními názvy z různých podadresářů vzájemně přepisovaly objektové soubory ostatních. Názvy objektových souborů se nyní generují na základě úplné relativní cesty ke zdrojovému souboru.
- Implementován interaktivní režim "fz -shell" pro sestavování jednotlivých souborů.
- Pro příkazy SplitCommand, CmdSet a CmdBuild bylo přidáno testovací pokrytí. Testovací pokrytí pro balíček linkeru se zvýšilo ze 17 % na 60 % a pokrytí pro všechny balíčky překročilo 40 %.
- Přidán mechanismus nahrazení nástroje CheckTool pro testování scénářů s chybějícími komponentami nástrojové chainy.
Změny oproti předchozím vydáním:
- Verze 1.8.0 implementuje sestavování statických knihoven (-typ static / -lib), zajišťuje jedinečnost názvů objektových souborů v projektech s více adresáři a opravuje chyby v subsystému sestavování související s průchodem cesty ".."
- Verze 1.7.0 přidává paralelní kompilaci (-j N, 0 — automatická detekce počtu jader), podporu pro linkerové skripty (-T) a adresy vstupních bodů (-Ttext), interaktivní režim (fz -shell), explicitní výběr výstupního formátu (elf32, elf64, bin), kompilaci C++ souborů (.cpp, .cc, .cxx) se stejnými přísnými varovnými příznaky jako pro C.
- Verze 1.6.0 přidává inicializaci projektu (fz -init, vytváří .fz.yaml, .fzignore, README.md), podporu formátu bin (-format bin) pro bootloadery a firmware a konfigurační pole libs, flags.cc, flags.asm, flags.ld.
- Verze 1.5.0 zavádí více zdrojových adresářů (source_dirs), explicitní seznamy souborů (source_files), vzory zahrnutí/vyloučení, pole libs pro knihovny linkerů, soubor .fzignore a víceúrovňové slučování konfiguračních souborů.
Zdroj: opennet.ru
