Lansarea ForgeZero 1.9.0, un instrument de compilare pentru C și asamblator

ForgeZero 1.9.0 (fz), un instrument de construire în linie de comandă pentru proiecte scrise în C, C++ și limbaje de asamblare (NASM, GAS, FASM), a fost lansat. Instrumentul nu necesită un Makefile sau alte fișiere de configurare pentru utilizare de bază. Codul proiectului este scris în Go și este licențiat sub licența MIT.

ForgeZero detectează tipul de fișier și selectează automat backend-ul corespunzător. Fiecare fișier de cod este compilat într-un fișier obiect, apoi verificat pentru simboluri globale duplicate în toate obiectele și legat într-un singur fișier executabil. Fișierele compilate sunt memorate în cache și recompilate numai după ce se fac modificări la fișierele de cod asociate. Opțional, urmărirea modificărilor sistemului de fișiere și recompilarea sunt posibile după actualizările fișierelor de cod.

Compilatoarele acceptate sunt GCC, Clang, G++ și Clang++; asamblorele sunt NASM, GAS și FASM; linkerele sunt LD, GCC și Clang; iar arhivatorul AR este acceptat. Avertismentele obligatorii pentru C și C++ sunt: ​​„-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion”. Dezinfectanții AddressSanitizer și UndefinedBehaviorSanitizer sunt activați în mod implicit (pot fi dezactivați cu steagul -sanitize=false). Platformele acceptate sunt: Linux, macOS, Windows (WSL2 și nativ experimental).

Principalele modificări în versiunea 1.9.0:

  • Adăugat steagul „-target” , care permite compilarea încrucișată pentru orice arhitectură cu instrumentele de prefix corespunzătoare. fz determină automat numele compilatorului, linkerului și arhivatorului pe baza identificatorului specificat (de exemplu, „arm-linux-gnueabihf-gcc”). Sunt suportate toate platformele țintă GNU standard, inclusiv arm-linux-gnueabihf, aarch64-linux-gnu și riscv64-linux-gnu.
  • Реализована поддержка поддержка протокола LSP (Language Server Protocol). Флаг «-compile-commands» генерирует файл compile_commands.json (Compilation Database) в корне проекта. Файл считывается языковыми servere clangd и ccls, обеспечивая работу автодополнения, навигации по коду и диагностики в редакторах с поддержкой LSP (Neovim, VSCode, CLion, Emacs и др.).
  • Comanda fz „-update” salvează acum fișierul binar curent în /usr/local/bin/fz.old înainte de a instala o versiune nouă, permițându-vă să reveniți la versiunea anterioară fără a o reinstala.
  • S-a remediat o eroare în proiectele cu mai multe directoare, în care fișierele cu nume de bază identice din subdirectoare diferite suprascriau fișierele obiect ale celorlalte. Numele fișierelor obiect sunt acum generate pe baza căii relative complete către fișierul sursă.
  • A fost implementat modul interactiv „fz -shell” pentru construirea de fișiere individuale.
  • A fost adăugată acoperirea testelor pentru comenzile SplitCommand, CmdSet și CmdBuild. Acoperirea testelor pentru pachetul linker a crescut de la 17% la 60%, iar acoperirea pentru toate pachetele a depășit 40%.
  • Adăugat un mecanism de înlocuire CheckTool pentru scenarii de testare cu componente lipsă ale lanțului de instrumente.

Modificări față de versiunile anterioare:

  • Versiunea 1.8.0 implementează asamblarea bibliotecilor statice (-type static / -lib), asigură unicitatea numelor fișierelor obiect în proiectele cu mai mulți directori și corectează erorile din subsistemul de asamblare legate de parcurgerea căii „..”
  • Versiunea 1.7.0 adaugă compilare paralelă (-j N, 0 — autodetecția numărului de nuclee), suport pentru scripturi de linker (-T) și adrese de puncte de intrare (-Ttext), mod interactiv (fz -shell), selectarea explicită a formatului de ieșire (elf32, elf64, bin), compilarea fișierelor C++ (.cpp, .cc, .cxx) cu aceleași semnalizatoare de avertizare stricte ca pentru C.
  • Versiunea 1.6.0 adaugă inițializarea proiectului (fz -init, creează fișiere .fz.yaml, .fzignore, README.md), suport pentru formatul bin (-format bin) pentru bootloader-e și firmware și câmpuri de configurare libs, flags.cc, flags.asm, flags.ld.
  • Versiunea 1.5.0 introduce directoare sursă multiple (source_dirs), liste de fișiere explicite (source_files), modele de includere/excludere, un câmp libs pentru bibliotecile de linkere, fișierul .fzignore și fuzionarea pe mai multe niveluri a fișierelor de configurare.

Sursa: opennet.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster