Udgivelsen af ForgeZero 1.9.0 (fz), et kommandolinjeværktøj til opbygning af projekter i C, C++ og assembler (NASM, GAS, FASM), er offentliggjort. Værktøjet kræver ikke oprettelse af Makefile eller andre konfigurationsfiler til grundlæggende brug. Projektkoden er skrevet i Go og distribueres under MIT-licensen.
ForgeZero identificerer filtypen og vælger automatisk den nødvendige backend. Hver kodefil kompileres til en objektfil, hvorefter der udføres en kontrol af dublerede globale symboler i alle objektfiler og sammenføjning til en enkelt eksekverbar fil. De kompilere filer caches og genkompileres kun efter ændringer i de tilknyttede kodefiler. Det er muligt at spore ændringer i FС og genopbygge efter opdatering af kodefiler.
Understøttede compilere inkluderer GCC, Clang, G++, Clang++; assemblere NASM, GAS, FASM; linker LD, GCC, Clang; arkiveringsværktøj AR. Obligatoriske advarsler for C og C++: “-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion”. Som standard er AddressSanitizer og UndefinedBehaviorSanitizer aktiveret (kan deaktiveres med flaget -sanitize=false). Understøttede platforme inkluderer Linux, macOS, Windows (WSL2 og eksperimentelt nativt).
De vigtigste ændringer i version 1.9.0:
- Flagget “-target” <triple> er tilføjet, hvilket muliggør kryds-kompilering for valgfri arkitektur, hvis det relevante præfiks værktøjer er til stede. fz bestemmer selv kompilatorens, linkerens og arkiveringsværktøjets navne baseret på den angivne identifikator (f.eks. “arm-linux-gnueabihf-gcc”). Alle standard GNU målplatforme understøttes, herunder arm-linux-gnueabihf, aarch64-linux-gnu og riscv64-linux-gnu.
- Understøttelse af LSP-protokollen (Language Server Protocol) er blevet implementeret. Flagget “-compile-commands” genererer en fil compile_commands.json (Kompilationsdatabase) i projektets rodmappe. Filen læses af de sprog servere clangd og ccls, hvilket muliggør auto-fuldførelse, kodennavigation og diagnostik i editorer, der understøtter LSP (Neovim, VSCode, CLion, Emacs osv.).
- fz-kommandoen “-update” gemmer nu den aktuelle binære fil i /usr/local/bin/fz.old, inden installationen af en ny version, hvilket gør det muligt at rulle tilbage til en tidligere version uden geninstallation.
- Fejlen er blevet løst, hvor filer med samme grundlæggende navne fra forskellige underkataloger overskrev objektfilerne i multidirektørprojekter. Navne på objektfilerne dannes nu baseret på den fulde relative sti til kildefilen.
- Den interaktive tilstand «fz -shell» til bygning af enkeltfiler er blevet implementeret.
- Testdækning for kommanderne SplitCommand, CmdSet og CmdBuild er blevet tilføjet. Testdækningen for pakkecompilatoren er steget fra 17% til 60%, mens dækningen for alle pakker nu er over 40%.
- Mekanismen for vedtagelse af CheckTool til test af scenarier uden komponenter i værktøjskæden er blevet tilføjet.
Ændringer fra tidligere udgivelser:
- I version 1.8.0 er der implementeret bygning af statiske biblioteker (-type static / -lib), der sikrer unikke navne på objektfiler i multidirektørprojekter, samt rettet fejl i byggesystemet relateret til at navigere stien «..».
- I version 1.7.0 er der tilføjet parallel kompilering (-j N, 0 — automatisk bestemmelse af antal kerner), support for linker-scripts (-T) og indgangsadresser (-Ttext), interaktiv tilstand (fz -shell), eksplicit valg af outputformat (elf32, elf64, bin), kompilering af C++-filer (.cpp, .cc, .cxx) med de samme strenge advarselsflagg som for C.
- I version 1.6.0 er der tilføjet projektinitialisering (fz -init, opretter .fz.yaml, .fzignore, README.md), support for bin-formatet (-format bin) til bootloadere og firmware, konfigurationsfelter libs, flags.cc, flags.asm, flags.ld.
- I version 1.5.0 er der implementeret flere kilder til kilder (source_dirs), eksplicitte filoplysninger (source_files), include/exclude-skabeloner, feltet libs til compilatorbiblioteker, filen .fzignore, og flertrins sammenlægning af konfigurationsfiler.
Kilde: opennet.ru
