ForgeZero 1.9.0 (fz), et kommandolinjeværktøj til projekter skrevet i C, C++ og assemblersprog (NASM, GAS, FASM), er blevet udgivet. Værktøjet kræver ikke en Makefile eller andre konfigurationsfiler til grundlæggende brug. Projektkoden er skrevet i Go og er licenseret under MIT-licensen.
ForgeZero registrerer filtypen og vælger automatisk den relevante backend. Hver kodefil kompileres til en objektfil, kontrolleres derefter for dubletter af globale symboler på tværs af alle objekter og linkes til en enkelt eksekverbar fil. Kompilerede filer caches og rekompileres kun, når der er foretaget ændringer i de tilknyttede kodefiler. Eventuelt er sporing af ændringer i filsystemet og rekompilering mulig efter opdateringer af kodefiler.
De understøttede compilere er GCC, Clang, G++ og Clang++; assemblere er NASM, GAS og FASM; linkere er LD, GCC og Clang; og AR-arkiveren understøttes. Obligatoriske advarsler for C og C++ er: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". AddressSanitizer- og UndefinedBehaviorSanitizer-sanitizer-funktionerne er som standard aktiveret (de kan deaktiveres med flaget -sanitize=false). De understøttede platforme er: Linux, macOS, Windows (WSL2 og eksperimentelt native).
Vigtigste ændringer i version 1.9.0:
- Tilføjet "-target"-flag , som muliggør krydskompilering for enhver arkitektur med de passende præfiksværktøjer. fz bestemmer automatisk navnene på compileren, linkeren og arkiveren baseret på den angivne identifikator (f.eks. "arm-linux-gnueabihf-gcc"). Alle standard GNU-målplatforme understøttes, inklusive arm-linux-gnueabihf, aarch64-linux-gnu og riscv64-linux-gnu.
- Understøttelse af Language Server Protocol (LSP) er blevet implementeret. Flaget "-compile-commands" genererer en compile_commands.json-fil (kompileringsdatabase) i projektroden. Filen læses af sprogbrugeren. servere clangd og ccls, der leverer autofuldførelse, kodenavigation og diagnosticering i editorer, der understøtter LSP (Neovim, VSCode, CLion, Emacs osv.).
- Kommandoen fz "-update" gemmer nu den aktuelle binære fil i /usr/local/bin/fz.old, før en ny version installeres, så du kan rulle tilbage til den tidligere version uden at geninstallere.
- Rettede en fejl i projekter med flere mapper, hvor filer med identiske basisnavne fra forskellige undermapper overskrev hinandens objektfiler. Objektfilnavne genereres nu baseret på den fulde relative sti til kildefilen.
- Implementerede den interaktive tilstand "fz -shell" til at bygge enkeltfiler.
- Der er tilføjet testdækning for kommandoerne SplitCommand, CmdSet og CmdBuild. Testdækningen for linkerpakken er steget fra 17 % til 60 %, og dækningen for alle pakker har oversteget 40 %.
- Tilføjet en CheckTool-erstatningsmekanisme til testscenarier med manglende værktøjskædekomponenter.
Ændringer fra tidligere udgivelser:
- Version 1.8.0 implementerer assembly af statiske biblioteker (-type static / -lib), sikrer entydigheden af objektfilnavne i projekter med flere direktører og retter fejl i assembly-undersystemet relateret til gennemløb af ".."-stien.
- Version 1.7.0 tilføjer parallel kompilering (-j N, 0 — automatisk detektion af antallet af kerner), understøttelse af linker-scripts (-T) og indgangspunktsadresser (-Ttext), interaktiv tilstand (fz -shell), eksplicit valg af outputformat (elf32, elf64, bin), kompilering af C++-filer (.cpp, .cc, .cxx) med de samme strenge advarselsflag som for C.
- Version 1.6.0 tilføjer projektinitialisering (fz -init, opretter .fz.yaml, .fzignore, README.md), understøttelse af bin-format (-format bin) til bootloadere og firmware samt konfigurationsfelterne libs, flags.cc, flags.asm, flags.ld.
- Version 1.5.0 introducerer flere kildemapper (source_dirs), eksplicitte fillister (source_files), inkluderings-/ekskluderingsmønstre, et libs-felt til linkerbiblioteker, .fzignore-filen og flerniveau-fletning af konfigurationsfiler.
Kilde: opennet.ru
