ForgeZero 1.9.0 Launches: New C and Assembler Tool

Published release of ForgeZero 1.9.0 (fz), a console build tool for projects in C, C++ and assembly languages (NASM, GAS, FASM). The tool does not require the creation of a Makefile or other configuration files for basic use. The project code is written in Go and distributed under the MIT license.

ForgeZero detects the file type and automatically selects the required backend. Each code file is compiled into an object file, after which duplicate global symbols are checked in all objects and compiled into a single executable file. Compiled files are cached and rebuilt only after changes have been made to their associated code files. It is possible to optionally track changes in the file system and rebuild after updating the code.

Compilers GCC, Clang, G++, Clang++ are supported; assemblers NASM, GAS, FASM; linkers LD, GCC, Clang; AR archiver. Mandatory warnings for C and C++: “-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion”. By default, the sanitizers AddressSanitizer and UndefinedBehaviorSanitizer are enabled (disabled with the -sanitize=false flag). Linux, macOS, Windows platforms are supported (WSL2 and experimentally native).

Main changes in version 1.9.0:

  • Added the “-target” flag, allowing cross-compilation for an arbitrary architecture if the appropriate prefix tooling is available. fz independently determines the names of the compiler, linker, and archiver based on the specified identifier (for example, “arm-linux-gnueabihf-gcc”). Any standard GNU target platforms are supported, including arm-linux-gnueabihf, aarch64-linux-gnu, and riscv64-linux-gnu.
  • Language Server Protocol (LSP) support has been implemented. The “-compile-commands” flag generates a compile_commands.json (Compilation Database) file in the project root. The file is read by the clangd and ccls language servers, providing autocompletion, code navigation, and diagnostics in editors with LSP support (Neovim, VSCode, CLion, Emacs, etc.).
  • The fz “-update” command before installing a new version now saves the current binary file in
/Reports, release notes, official announcements.