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

È stata rilasciata la versione 1.9.0 (fz) di ForgeZero, uno strumento di compilazione da riga di comando per progetti scritti in C, C++ e linguaggi assembly (NASM, GAS, FASM). Lo strumento non richiede un Makefile o altri file di configurazione per l'utilizzo di base. Il codice del progetto è scritto in Go ed è rilasciato sotto licenza MIT.

ForgeZero rileva il tipo di file e seleziona automaticamente il backend appropriato. Ogni file di codice viene compilato in un file oggetto, quindi controllato per la presenza di simboli globali duplicati in tutti gli oggetti e collegato in un singolo file eseguibile. I file compilati vengono memorizzati nella cache e ricompilati solo dopo che vengono apportate modifiche ai file di codice associati. Facoltativamente, è possibile il tracciamento delle modifiche al file system e la ricompilazione dopo gli aggiornamenti dei file di codice.

I compilatori supportati sono GCC, Clang, G++ e Clang++; gli assembler sono NASM, GAS e FASM; i linker sono LD, GCC e Clang; e l'archiviatore AR è supportato. Gli avvisi obbligatori per C e C++ sono: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". I sanitizer AddressSanitizer e UndefinedBehaviorSanitizer sono abilitati per impostazione predefinita (possono essere disabilitati con il flag -sanitize=false). Le piattaforme supportate sono: Linux, macOS, Windows (WSL2 e nativo sperimentale).

сновные изменения версии 1.9.0:

  • Aggiunto il flag "-target" che consente la compilazione incrociata per qualsiasi architettura con gli strumenti di prefisso appropriati. fz determina automaticamente 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 GNU standard, incluse arm-linux-gnueabihf, aarch64-linux-gnu e riscv64-linux-gnu.
  • È stato implementato il supporto per il Language Server Protocol (LSP). Il flag "-compile-commands" genera un file compile_commands.json (database di compilazione) nella directory principale del progetto. Il file viene letto dal linguaggio server clangd e ccls, che forniscono completamento automatico, navigazione del codice e diagnostica negli editor che supportano LSP (Neovim, VSCode, CLion, Emacs, ecc.).
  • Il comando fz "-update" ora salva il file binario corrente in /usr/local/bin/fz.old prima di installare una nuova versione, consentendo di ripristinare la versione precedente senza doverla reinstallare.
  • Risolto un bug nei progetti con più directory in cui i file con nomi base identici provenienti da sottodirectory diverse si sovrascrivevano a vicenda. I nomi dei file oggetto vengono ora generati in base al percorso relativo completo del file sorgente.
  • Implementata la modalità interattiva "fz -shell" per la compilazione di singoli file.
  • È stata aggiunta la copertura dei test per i comandi SplitCommand, CmdSet e CmdBuild. La copertura dei test per il pacchetto del linker è aumentata dal 17% al 60%, e la copertura per tutti i pacchetti ha superato il 40%.
  • È stato aggiunto un meccanismo di sostituzione di CheckTool per testare scenari con componenti della toolchain mancanti.

Modifiche rispetto alle versioni precedenti:

  • La versione 1.8.0 implementa l'assemblaggio di librerie statiche (-type static / -lib), garantisce l'unicità dei nomi dei file oggetto nei progetti multidirectory e corregge gli errori nel sottosistema di assemblaggio relativi all'attraversamento del percorso ".."
  • La versione 1.7.0 aggiunge la compilazione parallela (-j N, 0 — rilevamento automatico del numero di core), il supporto per gli script del linker (-T) e gli indirizzi dei punti di ingresso (-Ttext), la modalità interattiva (fz -shell), la selezione esplicita del formato di output (elf32, elf64, bin), la compilazione di file C++ (.cpp, .cc, .cxx) con gli stessi flag di avviso rigorosi come per il C.
  • La versione 1.6.0 aggiunge l'inizializzazione del progetto (fz -init, crea .fz.yaml, .fzignore, README.md), il supporto per il formato binario (-format bin) per bootloader e firmware e i campi di configurazione libs, flags.cc, flags.asm, flags.ld.
  • La versione 1.5.0 introduce più directory sorgente (source_dirs), elenchi espliciti di file (source_files), modelli di inclusione/esclusione, un campo libs per le librerie del linker, il file .fzignore e l'unione multilivello dei file di configurazione.

Fonte: opennet.ru

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