Izdano je bilo orodje ForgeZero 1.9.0 (fz), orodje za gradnjo projektov, napisanih v jezikih C, C++ in zbirnih jezikih (NASM, GAS, FASM), z uporabo ukazne vrstice. Orodje za osnovno uporabo ne potrebuje datoteke Makefile ali drugih konfiguracijskih datotek. Koda projekta je napisana v jeziku Go in je licencirana pod licenco MIT.
ForgeZero zazna vrsto datoteke in samodejno izbere ustrezno zaledno okolje. Vsaka kodna datoteka se prevede v objektno datoteko, nato se preveri, ali so v vseh objektih podvojeni globalni simboli, in se poveže v eno samo izvedljivo datoteko. Prevedene datoteke se shranijo v predpomnilnik in ponovno prevedejo šele po spremembah povezanih kodnih datotek. Po posodobitvah kodnih datotek je možno sledenje spremembam datotečnega sistema in ponovno prevajanje.
Podprti prevajalniki so GCC, Clang, G++ in Clang++; zbirniki so NASM, GAS in FASM; povezovalniki so LD, GCC in Clang; podprt je tudi arhivar AR. Obvezna opozorila za C in C++ so: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Sanitizerja AddressSanitizer in UndefinedBehaviorSanitizer sta privzeto omogočena (onemogočite ju lahko z zastavico -sanitize=false). Podprte platforme so: Linux, macOS, Windows (WSL2 in eksperimentalno izvorno).
Glavne spremembe v različici 1.9.0:
- Dodana zastavica »-target« , ki omogoča navzkrižno prevajanje za katero koli arhitekturo z ustreznimi orodji za predpone. fz samodejno določi imena prevajalnika, povezovalnika in arhivarja na podlagi podanega identifikatorja (npr. "arm-linux-gnueabihf-gcc"). Podprte so vse standardne ciljne platforme GNU, vključno z arm-linux-gnueabihf, aarch64-linux-gnu in riscv64-linux-gnu.
- Implementirana je bila podpora za protokol jezikovnega strežnika (LSP). Zastavica »-compile-commands« ustvari datoteko compile_commands.json (Compilation Database) v korenu projekta. Datoteko bere program language. strežniki clangd in ccls, ki zagotavljata samodejno dokončanje, navigacijo po kodi in diagnostiko v urejevalnikih, ki podpirajo LSP (Neovim, VSCode, CLion, Emacs itd.).
- Ukaz fz "-update" sedaj pred namestitvijo nove različice shrani trenutno binarno datoteko v /usr/local/bin/fz.old, kar vam omogoča vrnitev na prejšnjo različico brez ponovne namestitve.
- Odpravljena je bila napaka v projektih z več imeniki, kjer so datoteke z enakimi osnovnimi imeni iz različnih podimenikov prepisovale druga drugo objektne datoteke. Imena objektnih datotek so zdaj ustvarjena na podlagi celotne relativne poti do izvorne datoteke.
- Implementiran interaktivni način "fz -shell" za gradnjo posameznih datotek.
- Za ukaze SplitCommand, CmdSet in CmdBuild je bila dodana pokritost s testiranjem. Pokritost s testiranjem za paket povezovalnika se je povečala s 17 % na 60 %, pokritost za vse pakete pa je presegla 40 %.
- Dodan je mehanizem zamenjave CheckTool za testiranje scenarijev z manjkajočimi komponentami orodne verige.
Spremembe v primerjavi s prejšnjimi izdajami:
- Različica 1.8.0 implementira sestavljanje statičnih knjižnic (-tip static / -lib), zagotavlja edinstvenost imen objektnih datotek v projektih z več direktorji in odpravlja napake v podsistemu sestavljanja, povezane s prečkanjem poti »..«.
- Različica 1.7.0 dodaja vzporedno prevajanje (-j N, 0 — samodejno zaznavanje števila jeder), podporo za skripte povezovalnikov (-T) in naslove vstopnih točk (-Ttext), interaktivni način (fz -shell), eksplicitno izbiro izhodne oblike (elf32, elf64, bin), prevajanje datotek C++ (.cpp, .cc, .cxx) z enakimi strogimi opozorilnimi zastavicami kot za C.
- Različica 1.6.0 dodaja inicializacijo projekta (fz -init, ustvari .fz.yaml, .fzignore, README.md), podporo za format bin (-format bin) za zagonske nalagalnike in vdelano programsko opremo ter konfiguracijska polja libs, flags.cc, flags.asm, flags.ld.
- Različica 1.5.0 uvaja več izvornih imenikov (source_dirs), eksplicitne sezname datotek (source_files), vzorce vključitve/izključitve, polje libs za knjižnice povezovalnikov, datoteko .fzignore in večnivojsko združevanje konfiguracijskih datotek.
Vir: opennet.ru
