Uscita di ForgeZero 1.9.0, uno strumento di compilazione per C e assembler

È stata pubblicata la versione ForgeZero 1.9.0 (fz), uno strumento da console per la compilazione di progetti in C, C++ e assembler (NASM, GAS, FASM). Lo strumento non richiede la creazione di un Makefile o di altri file di configurazione per un uso di base. Il codice del progetto è scritto in Go e distribuito sotto licenza MIT.

ForgeZero determina il tipo di file e seleziona automaticamente il backend necessario. Ogni file di codice viene compilato in un file oggetto, dopo di che viene eseguita un'analisi per simboli globali duplicati in tutti gli oggetti, realizzando la linkizzazione in un unico file eseguibile. I file compilati vengono memorizzati nella cache e ricompilati solo dopo modifiche ai relativi file di codice. È possibile abilitare il monitoraggio delle modifiche nel file system e la ricompilazione dopo l'aggiornamento dei file di codice.

Supporta i compilatori GCC, Clang, G++, Clang++; assemblatori NASM, GAS, FASM; linker LD, GCC, Clang; archiver AR. Le opzioni di avviso obbligatorie per C e C++ sono: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". I sanitizzatori AddressSanitizer e UndefinedBehaviorSanitizer sono abilitati per impostazione predefinita (disattivabili con il flag -sanitize=false). Sono supportate le piattaforme Linux, macOS, Windows (WSL2 e sperimentalmente nativo).

Le principali novità della versione 1.9.0:

  • È stato aggiunto il flag "-target" , che consente la cross-compilazione per un'architettura arbitraria, a condizione che sia disponibile un toolchain con il prefisso appropriato. fz determina da solo i nomi del compilatore, del linker e dell'archiver in base all'identificatore specificato (ad esempio, "arm-linux-gnueabihf-gcc"). Sono supportate tutte le piattaforme target GNU standard, tra cui arm-linux-gnueabihf, aarch64-linux-gnu e riscv64-linux-gnu.
  • È stata implementata la supporto del protocollo LSP (Language Server Protocol). Il flag "-compile-commands" genera un file compile_commands.json (Compilation Database) nella root del progetto. Il file viene letto dai linguaggi server clangd e ccls, fornendo funzionalità di completamento automatico, navigazione nel codice e diagnostica in editor che supportano LSP (Neovim, VSCode, CLion, Emacs, ecc.).
  • Il comando fz "-update" prima di installare la nuova versione ora salva il file binario corrente in /usr/local/bin/fz.old, consentendo di tornare alla versione precedente senza reinstallazione.
  • È stato risolto un problema per cui nei progetti multi-directory i file con nomi base identici in diverse sottocartelle sovrascrivevano i file oggetto l'uno con l'altro. I nomi dei file oggetto vengono ora generati sulla base del percorso relativo completo del file sorgente.
  • È stata implementata la modalità interattiva «fz -shell» per la compilazione di singoli file.
  • È stata aggiunta una copertura dei test per i comandi SplitCommand, CmdSet e CmdBuild. La copertura dei test del pacchetto di collegamento è aumentata dal 17% al 60%, mentre la copertura di tutti i pacchetti ha superato il 40%.
  • È stato aggiunto un meccanismo di sostituzione di CheckTool per testare gli scenari con componenti mancanti della toolchain.

Modifiche delle versioni precedenti:

  • Nella versione 1.8.0 è stata implementata la compilazione di librerie statiche (-type static / -lib), garantita l'unicità dei nomi dei file oggetto nei progetti multi-directory, risolti gli errori nel sottosistema di compilazione connessi al superamento del percorso «..».
  • Nella versione 1.7.0 è stata aggiunta la compilazione parallela (-j N, 0 — auto-determinazione del numero di core), supporto per script del linker (-T) e indirizzo del punto d'ingresso (-Ttext), modalità interattiva (fz -shell), scelta esplicita del formato di output (elf32, elf64, bin), compilazione di file C++ (.cpp, .cc, .cxx) con gli stessi rigorosi flag di avviso utilizzati per C.
  • Nella versione 1.6.0 sono state aggiunte l'inizializzazione del progetto (fz -init, crea .fz.yaml, .fzignore, README.md), supporto per il formato bin (-format bin) per loader e firmware, campi di configurazione libs, flags.cc, flags.asm, flags.ld.
  • Nella versione 1.5.0 sono state implementate più directory sorgente (source_dirs), elenchi espliciti di file (source_files), modelli di include/exclude, campo libs per le librerie del linker, file .fzignore, fusione multilivello dei file di configurazione.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster