Megjelent a ForgeZero 1.9.0 (fz), egy parancssori build eszköz C, C++ és assembly nyelveken (NASM, GAS, FASM) írt projektekhez. Az eszköz alapvető használatához nincs szükség Makefile-ra vagy más konfigurációs fájlokra. A projekt kódja Go nyelven íródott, és MIT licenc alatt áll.
A ForgeZero felismeri a fájltípust, és automatikusan kiválasztja a megfelelő backendet. Minden kódfájlt egy objektumfájlba fordít, majd ellenőrzi az összes objektumban található ismétlődő globális szimbólumokat, és egyetlen futtatható fájlba linkeli. A lefordított fájlok gyorsítótárazódnak és csak a társított kódfájlok módosítása után fordítódnak újra. Opcionálisan a fájlrendszer változásainak követése és az újrafordítás is lehetséges a kódfájl frissítései után.
A támogatott fordítók a GCC, Clang, G++ és Clang++; az assemblerek a NASM, GAS és FASM; a linkerek az LD, GCC és Clang; és az AR archiváló is támogatott. A C és C++ kötelező figyelmeztetései: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Az AddressSanitizer és az UndefinedBehaviorSanitizer fertőtlenítők alapértelmezés szerint engedélyezve vannak (a -sanitize=false jelzővel letilthatók). A támogatott platformok: Linux, macOS, Windows (WSL2 és kísérletileg natív).
Főbb változások az 1.9.0 verzióban:
- Hozzáadott „-target” jelzőt , amely lehetővé teszi a keresztfordítást bármely architektúra számára a megfelelő előtag-eszközökkel. Az fz automatikusan meghatározza a fordító, a linker és az archiváló nevét a megadott azonosító (pl. "arm-linux-gnueabihf-gcc") alapján. Minden szabványos GNU célplatform támogatott, beleértve az arm-linux-gnueabihf, az aarch64-linux-gnu és a riscv64-linux-gnu platformokat is.
- Реализована поддержка поддержка протокола LSP (Language Server Protocol). Флаг «-compile-commands» генерирует файл compile_commands.json (Compilation Database) в корне проекта. Файл считывается языковыми szerverek clangd и ccls, обеспечивая работу автодополнения, навигации по коду и диагностики в редакторах с поддержкой LSP (Neovim, VSCode, CLion, Emacs и др.).
- Az fz "-update" parancs mostantól az aktuális bináris fájlt a /usr/local/bin/fz.old helyre menti egy új verzió telepítése előtt, lehetővé téve az előző verzióra való visszatérést újratelepítés nélkül.
- Kijavítottunk egy hibát a több könyvtárból álló projektekben, ahol az azonos alapnevű, különböző alkönyvtárakból származó fájlok felülírták egymás objektumfájljait. Az objektumfájlok nevei mostantól a forrásfájl teljes relatív elérési útja alapján generálódnak.
- Interaktív mód, az "fz -shell" implementálása egyetlen fájl létrehozásához.
- A SplitCommand, CmdSet és CmdBuild parancsokhoz hozzáadtunk tesztlefedettséget. A linker csomag tesztlefedettsége 17%-ról 60%-ra nőtt, az összes csomag lefedettsége pedig meghaladta a 40%-ot.
- Hozzáadott egy CheckTool helyettesítő mechanizmust a hiányzó eszközlánc-összetevőkkel rendelkező forgatókönyvek teszteléséhez.
Változások az előző kiadásokhoz képest:
- Az 1.8.0-s verzió megvalósítja a statikus könyvtárak assembly-jét (-type static / -lib), biztosítja az objektumfájlnevek egyediségét a több rendezőből álló projektekben, és kijavítja az assembly alrendszerben a ".." elérési út bejárásával kapcsolatos hibákat.
- Az 1.7.0-s verzió párhuzamos fordítást (-j N, 0 — a magok számának automatikus észlelése), linker szkriptek (-T) és belépési pont címek (-Ttext) támogatását, interaktív módot (fz -shell), a kimeneti formátum explicit kiválasztását (elf32, elf64, bin), C++ fájlok (.cpp, .cc, .cxx) fordítását teszi lehetővé ugyanazokkal a szigorú figyelmeztető jelzőkkel, mint a C esetében.
- Az 1.6.0-s verzió hozzáadta a projekt inicializálását (fz -init, létrehozza a .fz.yaml, .fzignore, README.md fájlokat), a bin formátum támogatását (-format bin) a rendszerbetöltőkhöz és a firmware-hez, valamint a libs, flags.cc, flags.asm, flags.ld konfigurációs mezőket.
- Az 1.5.0-s verzió több forráskönyvtárat (source_dirs), explicit fájllistákat (source_files), include/exclude mintákat, egy libs mezőt a linker könyvtárakhoz, a .fzignore fájlt és a konfigurációs fájlok többszintű egyesítését vezeti be.
Forrás: opennet.ru
