Bol nazvaný ForgeZero 1.9.0 (fz), konzolový nástroj na zostavenie projektov v jazykoch C, C++ a assembleri (NASM, GAS, FASM). Nástroj nevyžaduje vytvorenie Makefile alebo iných konfiguračných súborov pre základné používanie. Kód projektu je napísaný v jazyku Go a je distribuovaný pod licenciou MIT.
ForgeZero určuje typ súboru a automaticky vyberá potrebný backend. Každý súbor s kódom sa zostavuje do objektového súboru, po čom sa vykoná kontrola duplicitných globálnych symbolov vo všetkých objektoch a vykoná sa spojenie do jedného spustiteľného súboru. Kompilované súbory sa c ACHOLUJÚ do cache a opakovane sa budú zostavovať len po vykonaní zmien v súvisiacich súboroch s kódom. Je možnosť voliteľného sledovania zmien v FS a opätovnej zostavenia po aktualizácii súborov s kódom.
Podporujú sa kompilátory GCC, Clang, G++, Clang++; assembleri NASM, GAS, FASM; linker LD, GCC, Clang; archívator AR. Povinné varovania pre C a C++: „-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion“. Predvolene sú zapnuté sanitizátory AddressSanitizer a UndefinedBehaviorSanitizer (možno vypnúť pomocou príkazu -sanitize=false). Podporujú sa platformy Linux, macOS, Windows (WSL2 a experimentálne nativne).
Hlavné zmeny vo verzii 1.9.0:
- Pridaný príkaz „-target“ , ktorý umožňuje krížovú kompiláciu pre ľubovoľnú architektúru za predpokladu, že existuje zodpovedajúce prefixed toolchain. fz automaticky určuje mená kompilátora, linker a archívatora podľa uvedeného identifikátora (napríklad „arm-linux-gnueabihf-gcc“). Podporujú sa akékoľvek štandardné cieľové platformy GNU, vrátane arm-linux-gnueabihf, aarch64-linux-gnu a riscv64-linux-gnu.
- Implementovaná podpora protokolu LSP (Language Server Protocol). Príkaz „-compile-commands“ generuje súbor compile_commands.json (Compilation Database) v kore projektu. Súbor je čítaný jazykovými servermi clangd a ccls, čo zabezpečuje funkčnosť automatického doplňovania, navigácie v kóde a diagnostik vo editore s podporou LSP (Neovim, VSCode, CLion, Emacs a ďalší).
- Príkaz fz „-update“ pred inštaláciou novej verzie teraz ukladá súčasný binárny súbor do /usr/local/bin/fz.old, čo umožňuje vrátiť sa k predchádzajúcej verzii bez preinštalovania.
- Opravená chyba, při které se v multimodulových projektech soubory se stejnými základními názvy z různých podadresářů vzájemně přepisovaly. Názvy objektových souborů se nyní vytvářejí na základě úplné relativní cesty k původnímu souboru.
- Byl realizován interaktivní režim „fz -shell“ pro sestavení jednotlivých souborů.
- Bylo přidáno testovací pokrytí pro příkazy SplitCommand, CmdSet a CmdBuild. Pokrytí testy balíčku kompilátoru bylo zvýšeno z 17 % na 60 %, a pokrytí všech balíčků překročilo 40 %.
- Byl přidán mechanismus náhrady CheckTool pro testování scénářů s chybějícími komponenty nástrojového řetězce.
Změny v předchozích vydáních:
- Ve verzi 1.8.0 byla realizována sestavení statických knihoven (-type static / -lib), zajištěna jedinečnost názvů objektových souborů v multimodulových projektech, opraveny chyby v subsystému sestavení související s obcházením cesty „..“.
- Ve verzi 1.7.0 byla přidána paralelní kompilace (-j N, 0 — automatické určení počtu jader), podpora linker skriptů (-T) a adresy bodu vstupu (-Ttext), interaktivní režim (fz -shell), explicitní výběr formátu výstupu (elf32, elf64, bin), kompilace souborů C++ (.cpp, .cc, .cxx) se stejnými přísnými varovnými flagy jako pro C.
- Ve verzi 1.6.0 byly přidány inicializace projektu (fz -init, vytváří .fz.yaml, .fzignore, README.md), podpora formátu bin (-format bin) pro zaváděče a firmware, konfigurační pole libs, flags.cc, flags.asm, flags.ld.
- Ve verzi 1.5.0 se implementovaly více adresářů zdrojů (source_dirs), explicitní seznamy souborů (source_files), šablony include/exclude, pole libs pro knihovny linkeru, soubor .fzignore, vícestupňové sloučení konfiguračních souborů.
Zdroj: opennet.ru
