ForgeZero 1.9.0 (fz), in kommandorigelbou-ark foar projekten skreaun yn C, C++, en assembly-talen (NASM, GAS, FASM), is útbrocht. It ark fereasket gjin Makefile of oare konfiguraasjebestannen foar basisgebrûk. De projektkoade is skreaun yn Go en is lisinsearre ûnder de MIT-lisinsje.
ForgeZero detektearret it bestânstype en selektearret automatysk de passende backend. Elk koadebestân wurdt kompilearre yn in objektbestân, dan kontrolearre op dûbele globale symboalen oer alle objekten en keppele oan ien útfierber bestân. Kompilearre bestannen wurde yn 'e cache opslein en allinich opnij kompilearre nei't feroarings binne makke oan 'e assosjearre koadebestannen. Opsjoneel binne it folgjen fan bestânsysteemwizigingen en opnij kompilearjen mooglik nei updates fan koadebestannen.
De stipe compilers binne GCC, Clang, G++, en Clang++; assemblers binne NASM, GAS, en FASM; linkers binne LD, GCC, en Clang; en de AR-archiver wurdt stipe. Ferplichte warskôgings foar C en C++ binne: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". De AddressSanitizer en UndefinedBehaviorSanitizer sanitizers binne standert ynskeakele (se kinne útskeakele wurde mei de -sanitize=false flagge). De stipe platfoarms binne: Linux, macOS, Windows (WSL2 en eksperiminteel native).
Main feroarings yn ferzje 1.9.0:
- "-target" flagge tafoege , dy't krúskompilaasje mooglik makket foar elke arsjitektuer mei de passende foarheaksel-ark. fz bepaalt automatysk de nammen fan 'e compiler, linker en archiver op basis fan 'e oantsjutte identifier (bygelyks "arm-linux-gnueabihf-gcc"). Alle standert GNU-doelplatfoarms wurde stipe, ynklusyf arm-linux-gnueabihf, aarch64-linux-gnu en riscv64-linux-gnu.
- Stipe foar it Language Server Protocol (LSP) is ymplementearre. De flagge "-compile-commands" genereart in compile_commands.json (Compilation Database)-bestân yn 'e projektroot. It bestân wurdt lêzen troch taal servers clangd en ccls, dy't automatyske oanfolling, koade-navigaasje en diagnostyk leverje yn bewurkers dy't LSP stypje (Neovim, VSCode, CLion, Emacs, ensfh.).
- It kommando fz "-update" bewarret no it hjoeddeiske binêre bestân nei /usr/local/bin/fz.old foardat in nije ferzje ynstalleare wurdt, wêrtroch jo werom kinne nei de foarige ferzje sûnder opnij te ynstallearjen.
- In bug yn projekten mei meardere mappen is oplost, wêrby't bestannen mei identike basisnammen út ferskate submappen elkoars objektbestannen oerskriuwe. Objektbestânsnammen wurde no generearre op basis fan it folsleine relative paad nei it boarnebestân.
- Ynteraktive modus "fz -shell" ymplementearre foar it bouwen fan losse bestannen.
- Testdekking is tafoege foar de kommando's SplitCommand, CmdSet, en CmdBuild. De testdekking foar it linkerpakket is tanommen fan 17% nei 60%, en de dekking foar alle pakketten is mear as 40% west.
- In CheckTool-ferfangingsmeganisme tafoege foar it testen fan senario's mei ûntbrekkende toolchain-komponinten.
Wizigingen fan eardere releases:
- Ferzje 1.8.0 ymplementearret de gearstalling fan statyske bibleteken (-type static / -lib), soarget foar de unykens fan objektbestânsnammen yn projekten mei meardere direkteuren, en reparearret flaters yn it gearstallingsubsysteem yn ferbân mei it trochrinnen fan it ".."-paad.
- Ferzje 1.7.0 foeget parallelle kompilaasje ta (-j N, 0 - autodeteksje fan it oantal kearnen), stipe foar linkerskripts (-T) en yngongspuntadressen (-Ttext), ynteraktive modus (fz -shell), eksplisite seleksje fan útfierformaat (elf32, elf64, bin), kompilaasje fan C++-bestannen (.cpp, .cc, .cxx) mei deselde strange warskôgingsflaggen as foar C.
- Ferzje 1.6.0 foeget projektinitialisaasje ta (fz -init, makket .fz.yaml, .fzignore, README.md), stipe foar bin-formaat (-format bin) foar bootloaders en firmware, en konfiguraasjefjilden libs, flags.cc, flags.asm, flags.ld.
- Ferzje 1.5.0 yntrodusearret meardere boarnemappen (source_dirs), eksplisite bestânslisten (source_files), ynklúzje/útslute-patroanen, in libs-fjild foar linkerbibleteken, it .fzignore-bestân, en mearlaach gearfoeging fan konfiguraasjebestannen.
Boarne: opennet.ru
