Lançamento do ForgeZero 1.9.0, uma ferramenta de construção para C e assembly

Foi lançado o ForgeZero 1.9.0 (fz), uma ferramenta de linha de comando para compilar projetos em C, C++ e Assembly (NASM, GAS, FASM). A ferramenta não requer a criação de um Makefile ou outros arquivos de configuração para uso básico. O código do projeto é escrito na linguagem Go e é distribuído sob a licença MIT.

O ForgeZero determina o tipo de arquivo e seleciona automaticamente o backend necessário. Cada arquivo de código é compilado em um arquivo objeto, após o que é realizada uma verificação de símbolos globais duplicados em todos os objetos, e a ligação é feita em um único arquivo executável. Os arquivos compilados são armazenados em cache e são recompilados apenas após alterações em arquivos de código relacionados. O rastreamento opcional de alterações no sistema de arquivos e a recompilação após a atualização de arquivos de código são suportados.

Suporte a compiladores GCC, Clang, G++, Clang++; montadores NASM, GAS, FASM; vinculadores LD, GCC, Clang; e arquivador AR. Avisos obrigatórios para C e C++: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Os sanitizadores AddressSanitizer e UndefinedBehaviorSanitizer estão ativados por padrão (desativados com a flag -sanitize=false). Suporta plataformas Linux, macOS, Windows (WSL2 e experimentalmente de forma nativa).

Principais mudanças na versão 1.9.0:

  • Adicionada a flag "-target" , permitindo a compilação cruzada para qualquer arquitetura, desde que exista o conjunto de ferramentas correspondente. O fz determina automaticamente os nomes do compilador, vinculador e arquivador pelo identificador fornecido (por exemplo, "arm-linux-gnueabihf-gcc"). Suporta quaisquer plataformas-alvo padrão do GNU, incluindo arm-linux-gnueabihf, aarch64-linux-gnu e riscv64-linux-gnu.
  • Implementado suporte para o protocolo LSP (Language Server Protocol). A flag "-compile-commands" gera um arquivo compile_commands.json (Banco de Dados de Compilação) na raiz do projeto. O arquivo é lido pelos servidores clangd e ccls, fornecendo recursos de autocompletar, navegação pelo código e diagnóstico em editores que suportam LSP (Neovim, VSCode, CLion, Emacs, entre outros).
  • O comando fz "-update" agora salva o arquivo binário atual em \/usr\/local\/bin\/fz.old antes de instalar uma nova versão, permitindo reverter para a versão anterior sem reinstalação.
  • Corrigido um erro em projetos multidiretórios, onde arquivos com os mesmos nomes base de diferentes subdiretórios sobrescreviam os arquivos objeto um do outro. Nomes de arquivos objeto agora são gerados com base no caminho relativo completo para o arquivo fonte.
  • Implementado o modo interativo "fz -shell" para a compilação de arquivos individuais.
  • Adicionado cobertura de teste para os comandos SplitCommand, CmdSet e CmdBuild. A cobertura de testes do pacote de montagem aumentou de 17% para 60%, enquanto a cobertura de todos os pacotes ultrapassou 40%.
  • Adicionado o mecanismo de substituição CheckTool para testar cenários com componentes ausentes do toolchain.

Alterações nas versões anteriores:

  • Na versão 1.8.0, foi implementada a compilação de bibliotecas estáticas (-type static / -lib), garantindo a singularidade dos nomes dos arquivos objeto em projetos multidiretórios, corrigidos erros no subsistema de compilação relacionados ao caminho "..".
  • Na versão 1.7.0, adicionada a compilação paralela (-j N, 0 — auto-determinação do número de núcleos), suporte a scripts de linkagem (-T) e endereço do ponto de entrada (-Ttext), modo interativo (fz -shell), escolha explícita do formato de saída (elf32, elf64, bin), compilação de arquivos C++ (.cpp, .cc, .cxx) com as mesmas flags de aviso rigorosas usadas para C.
  • Na versão 1.6.0, foram adicionadas a inicialização de projeto (fz -init, cria .fz.yaml, .fzignore, README.md), suporte ao formato bin (-format bin) para loaders e firmwares, campos de configuração libs, flags.cc, flags.asm, flags.ld.
  • Na versão 1.5.0, foram implementadas múltiplas diretórios de fontes (source_dirs), listas explícitas de arquivos (source_files), templates include/exclude, campo libs para bibliotecas do linker, arquivo .fzignore, fusão multinível de arquivos de configuração.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster