Utgivelsen av ForgeZero 1.9.0 (fz) er offentliggjort, et konsollbasert byggeverktøy for prosjekter skrevet i C, C++ og assembler (NASM, GAS, FASM). Verktøyet krever ikke opprettelse av Makefile eller andre konfigurasjonsfiler for grunnleggende bruk. Prosjektets kode er skrevet i Go-språket og distribueres under MIT-lisensen.
ForgeZero bestemmer filtypen og velger automatisk nødvendig backend. Hver kodefil kompileres til en objektfil, hvoretter det utføres en sjekk for dupliserte globale symboler i alle objekter, og de settes sammen til en enkelt kjørbar fil. Kompilerte filer cachelagres og rekonstrueres kun etter endringer i tilknyttede kodefiler. Det er mulig å spore endringer i filsystemet og rekonstruere etter oppdatering av kodefiler.
Støttede kompilatorer inkluderer GCC, Clang, G++, Clang++; assemblerne NASM, GAS, FASM; linkerene LD, GCC, Clang; arkivverktøyet AR. Obligatoriske advarsler for C og C++: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Som standard er AddressSanitizer og UndefinedBehaviorSanitizer aktivert (deaktiveres med flagget -sanitize=false). Støttede plattformer inkluderer Linux, macOS, Windows (WSL2 og eksperimentelt nativity).
Hovedendringene i versjon 1.9.0:
- Flagget "-target" er lagt til, som tillater krysskompilering for enhver arkitektur med tilstrekkelig forhåndsverktøy. fz bestemmer automatisk navnene på kompilatoren, linken og arkivverktøyet basert på den angitte ID-en (for eksempel «arm-linux-gnueabihf-gcc»). Alle standard GNU-målplattformer er støttet, inkludert arm-linux-gnueabihf, aarch64-linux-gnu og riscv64-linux-gnu.
- Støtte for LSP-protokollen (Language Server Protocol) er implementert. Flagget "-compile-commands" genererer en fil compile_commands.json (Kompilering Database) i rotmappen av prosjektet. Filen leses av språkverktøyene servere clangd og ccls, og gir automatisk fullføring, kode-navigasjon og diagnose i redaktører med LSP-støtte (Neovim, VSCode, CLion, Emacs m.fl.).
- Kommanderingen fz "-update" lagrer nå den nåværende binærfilen i /usr/local/bin/fz.old før installasjon av en ny versjon, som gjør det mulig å rulle tilbake til forrige versjon uten reinstallering.
- Feilen som førte til at filer med samme basisnavn fra forskjellige underkataloger overskrev hverandre i multikatalogprosjekter, er nå rettet. Navnene på objektfiler genereres nå basert på den fullstendige relative banen til kildefilen.
- Interaktiv modus 'fz -shell' for bygging av enkeltfiler er implementert.
- Testdekning for SplitCommand, CmdSet og CmdBuild er lagt til. Testdekningen for kompilatoren har økt fra 17% til 60%, og testdekningen for alle pakker har oversteget 40%.
- En substitusjonsmekanisme for CheckTool er lagt til for testing av scenarier med manglende komponenter i verktøykjeden.
Endringer i tidligere utgivelser:
- I versjon 1.8.0 ble bygging av statiske biblioteker (-type static / -lib) implementert, og unikhet i navnene på objektfiler i multikatalogprosjekter ble sikret, samt feil i byggesystemet ble rettet, relatert til stien '..'.
- I versjon 1.7.0 ble parallellkompilering (-j N, 0 — automatisk bestemme antall kjerner) lagt til, støtte for linker-skript (-T) og adresse for inngangspunkt (-Ttext), interaktiv modus (fz -shell), eksplisitt valg av output-format (elf32, elf64, bin), kompilering av C++-filer (.cpp, .cc, .cxx) med de samme strenge advarselsflaggene som for C.
- I versjon 1.6.0 ble prosjektinitiering (fz -init, oppretter .fz.yaml, .fzignore, README.md) lagt til, støtte for bin-format (-format bin) for lastere og firmware, konfigurasjonsfelt libs, flags.cc, flags.asm, flags.ld.
- I versjon 1.5.0 ble flere kildekataloger (source_dirs), eksplisitte filoversikter (source_files), include/exclude-maler, feltet libs for kompilatorbøker, filen .fzignore og flertrinnssammenslåing av konfigurasjonsfiler implementert.
Kilde: opennet.ru
