Bol vydaný ForgeZero 1.9.0 (fz), nástroj na zostavovanie projektov z príkazového riadku napísaných v jazykoch C, C++ a assemblerových jazykoch (NASM, GAS, FASM). Nástroj nevyžaduje pre základné používanie súbor Makefile ani iné konfiguračné súbory. Kód projektu je napísaný v jazyku Go a je licencovaný pod licenciou MIT.
ForgeZero detekuje typ súboru a automaticky vyberie vhodný backend. Každý súbor s kódom sa skompiluje do objektového súboru, potom sa skontroluje, či sa vo všetkých objektoch nevyskytujú duplicitné globálne symboly, a prepojí sa do jedného spustiteľného súboru. Kompilované súbory sa ukladajú do vyrovnávacej pamäte a rekompilujú až po vykonaní zmien v súvisiacich súboroch s kódom. Voliteľne je možné sledovať zmeny súborového systému a rekompilovať ich po aktualizáciách súborov s kódom.
Podporované kompilátory sú GCC, Clang, G++ a Clang++; assemblery sú NASM, GAS a FASM; linkery sú LD, GCC a Clang; a podporovaný je aj archivátor AR. Povinné upozornenia pre C a C++ sú: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Sanitizery AddressSanitizer a UndefinedBehaviorSanitizer sú štandardne povolené (možno ich zakázať pomocou príznaku -sanitize=false). Podporované platformy sú: Linux, macOS, Windows (WSL2 a experimentálne natívny).
Hlavné zmeny vo verzii 1.9.0:
- Pridaný príznak „-target“ , čo umožňuje krížovú kompiláciu pre akúkoľvek architektúru s príslušnými prefixovými nástrojmi. fz automaticky určuje názvy kompilátora, linkera a archivátora na základe zadaného identifikátora (napr. „arm-linux-gnueabihf-gcc“). Podporované sú všetky štandardné cieľové platformy GNU vrátane arm-linux-gnueabihf, aarch64-linux-gnu a riscv64-linux-gnu.
- Bola implementovaná podpora pre protokol Language Server Protocol (LSP). Príznak „-compile-commands“ generuje súbor compile_commands.json (kompilačná databáza) v koreňovom adresári projektu. Súbor je čítaný jazykom. serverov clangd a ccls, ktoré poskytujú automatické dopĺňanie, navigáciu v kóde a diagnostiku v editoroch podporujúcich LSP (Neovim, VSCode, CLion, Emacs atď.).
- Príkaz fz „-update“ teraz pred inštaláciou novej verzie uloží aktuálny binárny súbor do priečinka /usr/local/bin/fz.old, čo vám umožní vrátiť sa k predchádzajúcej verzii bez preinštalovania.
- Opravená chyba v projektoch s viacerými adresármi, kde súbory s rovnakými základnými názvami z rôznych podadresárov prepisovali navzájom objektové súbory. Názvy objektových súborov sa teraz generujú na základe úplnej relatívnej cesty k zdrojovému súboru.
- Implementovaný interaktívny režim „fz -shell“ na vytváranie jednotlivých súborov.
- Pre príkazy SplitCommand, CmdSet a CmdBuild bolo pridané testovacie pokrytie. Testovacie pokrytie balíka linkera sa zvýšilo zo 17 % na 60 % a pokrytie všetkých balíkov prekročilo 40 %.
- Pridaný mechanizmus nahradenia CheckTool pre testovacie scenáre s chýbajúcimi komponentmi nástrojovej reťaze.
Zmeny oproti predchádzajúcim vydaniam:
- Verzia 1.8.0 implementuje zostavovanie statických knižníc (-typ static / -lib), zabezpečuje jedinečnosť názvov objektových súborov v projektoch s viacerými adresármi a opravuje chyby v subsystéme zostavovania súvisiace s prechodom cesty „..“
- Verzia 1.7.0 pridáva paralelnú kompiláciu (-j N, 0 — automatická detekcia počtu jadier), podporu pre linkerové skripty (-T) a vstupné adresy (-Ttext), interaktívny režim (fz -shell), explicitný výber výstupného formátu (elf32, elf64, bin), kompiláciu súborov C++ (.cpp, .cc, .cxx) s rovnakými prísnymi varovnými príznakmi ako pre C.
- Verzia 1.6.0 pridáva inicializáciu projektu (fz -init, vytvára .fz.yaml, .fzignore, README.md), podporu formátu bin (-format bin) pre bootloadery a firmvér a konfiguračné polia libs, flags.cc, flags.asm, flags.ld.
- Verzia 1.5.0 zavádza viacero zdrojových adresárov (source_dirs), explicitné zoznamy súborov (source_files), vzory zahrnutia/vylúčenia, pole libs pre linkerové knižnice, súbor .fzignore a viacúrovňové zlučovanie konfiguračných súborov.
Zdroj: opennet.ru
