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

È stata rilasciata la versione 1.9.0 di ForgeZero (fz), uno strumento da riga di comando per la costruzione di progetti nei linguaggi C, C++ e assembly (NASM, GAS, FASM). Questo strumento non richiede la creazione di Makefile o di altri file di configurazione per un utilizzo 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, seguito da un controllo dei simboli globali duplicati in tutti gli oggetti e da un collegamento in un file eseguibile unificato. I file compilati vengono memorizzati nella cache e vengono ricompilati solo dopo modifiche ai file di codice correlati. È possibile tenere traccia opzionalmente delle modifiche nel filesystem e ricompilare dopo l'aggiornamento dei file di codice.

Sono supportati i compilatori GCC, Clang, G++, Clang++; gli assemblatori NASM, GAS, FASM; i linker LD, GCC, Clang; l'archiviatore AR. Avvertenze obbligatorie per C e C++: «-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion». Per impostazione predefinita sono attivati gli sanitizzatori AddressSanitizer e UndefinedBehaviorSanitizer (disattivabili con il flag -sanitize=false). Sono supportate le piattaforme Linux, macOS, Windows (WSL2 e experimentalmente nativo).

Principali modifiche nella versione 1.9.0:

  • Aggiunto il flag «-target» , che consente di eseguire la cross-compilazione per architetture arbitrarie in presenza degli strumenti appropriati. fz determina autonomamente i nomi del compilatore, del linker e dell'archiviatore in base all'identificatore specificato (ad esempio, «arm-linux-gnueabihf-gcc»). Sono supportate tutte le piattaforme target standard GNU, tra cui arm-linux-gnueabihf, aarch64-linux-gnu e riscv64-linux-gnu.
  • Implementato il supporto per il protocollo LSP (Language Server Protocol). Il flag «-compile-commands» genera un file compile_commands.json (Compilation Database) nella radice 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» ora salva il file binario attuale in /usr/local/bin/fz.old prima dell'installazione di una nuova versione, permettendo un rollback alla versione precedente senza necessità di reinstallazione.
  • È stato risolto un bug in cui, nei progetti multi-directory, i file con lo stesso nome base da sottocartelle diverse sovrascrivevano i file oggetto reciproci. I nomi dei file oggetto vengono ora generati sulla base del percorso relativo completo al file sorgente.
  • È stata implementata la modalità interattiva «fz -shell» per la compilazione di singoli file.
  • È stata aumentata la copertura test per i comandi SplitCommand, CmdSet e CmdBuild. La copertura dei test del pacchetto di assemblaggio è aumentata dal 17% al 60%, mentre la copertura di tutti i pacchetti ha superato il 40%.
  • È stato aggiunto un meccanismo di sostituzione CheckTool per testare scenari con componenti del toolchain mancanti.

Modifiche delle versioni precedenti:

  • Nella versione 1.8.0 è stata implementata la costruzione di librerie statiche (-type static / -lib), garantita l'unicità dei nomi dei file oggetto nei progetti multi-directory e risolti errori nel sottosistema di costruzione relativi all'attraversamento del percorso «..».
  • Nella versione 1.7.0 è stata aggiunta la compilazione parallela (-j N, 0 — auto-determinazione del numero di core), il supporto per gli script linker (-T) e l'indirizzo del punto d'ingresso (-Ttext), modalità interattiva (fz -shell), selezione esplicita del formato di output (elf32, elf64, bin), compilazione di file C++ (.cpp, .cc, .cxx) con gli stessi severi 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), il supporto per il formato binario (-format bin) per bootloader e firmware, campi di configurazione libs, flags.cc, flags.asm, flags.ld.
  • Nella versione 1.5.0 sono state implementate directory di sorgenti multiple (source_dirs), elenchi espliciti di file (source_files), modelli di include/exclude, campo libs per le librerie del linker, file .fzignore, fusione multi-livello 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