Megjelent a ForgeZero 1.9.0 (fz) verziója, egy konzolos eszköz, amely C, C++ és assembler (NASM, GAS, FASM) nyelvű projektek összeállítására szolgál. Az eszköz alapvető használatához nem igényel Makefile vagy egyéb konfigurációs fájlok létrehozását. A projekt kódja Go nyelven készült, és MIT licenc alatt terjesztik.
A ForgeZero meghatározza a fájl típusát, és automatikusan kiválasztja a szükséges háttérszolgáltatást. Minden kódot tartalmazó fájl objektumfájlra fordítódik, ezt követően a globális szimbólumokban lévő duplikációkat ellenőrzi az összes objektumban, és összeállítja az egyes végrehajtható fájlt. A lefordított fájlok cache-elésre kerülnek, és csak a hozzájuk kapcsolódó kódfájlok módosítása után fordítódnak újra. Opcióként lehetséges a fájlrendszerben történő változások nyomon követése és a fájlok frissítése után a fordítás újraindítása.
Támogatott fordítók: GCC, Clang, G++, Clang++; assemblerok: NASM, GAS, FASM; linker-ek: LD, GCC, Clang; archiver: AR. Kötelező figyelmeztetések C és C++ nyelvekhez: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Alapértelmezés szerint az AddressSanitizer és az UndefinedBehaviorSanitizer sanitizerek be vannak kapcsolva (kikapcsolhatók a -sanitize=false flaggel). Támogatott platformok: Linux, macOS, Windows (WSL2 és kísérletileg natívan).
A 1.9.0 verzió főbb változásai:
- Hozzáadva a "-target" flag, amely lehetővé teszi az önálló architektúrára történő keresztfordítást a megfelelő prefix eszközkészlettel. Az fz automatikusan határozza meg a fordító, linker és archiver nevét az adott azonosító alapján (például "arm-linux-gnueabihf-gcc"). Támogatottak minden szabványos GNU célplatform, beleértve az arm-linux-gnueabihf, aarch64-linux-gnu és riscv64-linux-gnu platformokat.
- Megvalósítva a LSP (Language Server Protocol) protokoll támogatása. A "-compile-commands" flag a compile_commands.json (Compilation Database) fájlt generálja a projekt gyökerében. A fájlt a nyelvi szerverek clangd és ccls olvassa be, lehetővé téve az automatikus kiegészítést, a kód navigálását és a diagnosztikát LSP-t támogató szerkesztőkben (Neovim, VSCode, CLion, Emacs stb.).
- Az fz "-update" parancs, mielőtt új verziót telepít, mostantól a meglévő bináris fájlt a /usr/local/bin/fz.old helyre menti, ami lehetővé teszi a korábbi verzióra való visszatérést újratelepítés nélkül.
- Megoldottuk azt a hibát, amely során a többszörös projektstruktúrákban az azonos alapnevével rendelkező fájlok felülírták egymás objektumfájljait a különböző almappákból. Az objektumfájlok nevei mostantól a forráspfájl teljes relatív elérési útja alapján készülnek.
- Bevezetésre került az interaktív ‘fz -shell’ mód a különálló fájlok összeállításához.
- Tesztfedezettséget adtunk hozzá a SplitCommand, CmdSet és CmdBuild parancsokhoz. A linker csomag tesztfedezete 17%-ról 60%-ra nőtt, míg a teljes csomagok fedezete meghaladta a 40%-ot.
- Beépítettük a CheckTool cserélő mechanizmust a hiányzó eszközlánc-komponensekkel kapcsolatos forgatókönyvek tesztelésére.
Korábbi kiadások változásai:
- Az 1.8.0-ás verzióban megvalósult a statikus könyvtárak összeállítása (-type static / -lib), biztosítva lett az objektumfájlok nevének egyedisége a többszörös projektek esetében, javítottuk az összeállítási alrendszer hibáit, amelyek a '..' útvonal bejárásával kapcsolatosak.
- A 1.7.0-ás verzióban párhuzamos fordítást adtunk hozzá (-j N, 0 — az források automatikus azonosítása), támogatás a linker szkriptekhez (-T) és a belépési pont címéhez (-Ttext), interaktív mód (fz -shell), a kimeneti formátumok egyértelmű megválasztása (elf32, elf64, bin), C++ fájlok (.cpp, .cc, .cxx) fordítása ugyanazokkal a szigorú figyelmeztetési zászlókkal, mint a C esetében.
- A 1.6.0-ás verzióban bevezetésre került a projekt inicializálása (fz -init, .fz.yaml, .fzignore, README.md létrehozása), a bin formátum (-format bin) támogatása a betöltők és firmware-ek számára, a libs, flags.cc, flags.asm, flags.ld konfigurációs mezők.
- Az 1.5.0-ás verzióban megvalósításra került a több forrásmappa (source_dirs), az explicit fájllisták (source_files), az include/exclude sablonok, a linkerhez tartozó libs mező, a .fzignore fájl, és a konfigurációs fájlok több szintű egyesítése.
Forrás: opennet.ru
