ForgeZero (fz) — универсальный «швейцарский нож» для сборки NASM, GAS, FASM и C
fz (ForgeZero) — утилита для сборки проектов на ассемблере (NASM, GAS, FASM) и C. Написана на Go, не требует дополнительных зависимостей (кроме самих компиляторов). Инструмент для низкоуровневой разработки.
Версии и ключевые возможности
v1.0.0 (базовый функционал)
Сборка одиночного файла: -asm (NASM, GAS, FASM)
Сборка директории: -dir (рекурсивно находит все .asm, .s, .fasm, компилирует каждый в объектник, линкует в один бинарник)
Уникальные имена объектников (например, hello_asm.o и hello_s.o не конфликтуют)
Кэширование (SHA256) — повторная сборка без изменений почти мгновенна
Три режима линковки: auto (gcc → gcc -no-pie → ld), c (только gcc), raw (только ld)
Проверка дубликатов символов до линковки (через nm / objdump)
Очистка артефактов: -clean (удаляет .fz_objs, .fz_cache, бинарники)
v1.1.0 (C и строгий режим)
Поддержка C (файлы .c) — компиляция через gcc с флагами: -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion (любое предупреждение = ошибка)
Отдельный флаг -cc для C (можно использовать и -asm для ассемблера)
Санитайзеры по умолчанию: -fsanitize=address -fsanitize=undefined
Строгий режим -strict — подключает дополнительные санитайзеры (use-after-return, use-after-scope), для этого предпочитает clang (если есть) или использует gcc с ограниченной поддержкой
Флаг -no-sanitize — отключение санитайзеров
v1.2.0 (конфиги, watch, JSON)
Конфигурационный файл .fz.yaml (также fz.yaml, .fz.yml, fz.yml) — можно задать source_dir, output, mode, debug, verbose, keep_obj, no_cache, exclude, кастомные флаги asm/ld
Watch‑режим -watch — отслеживает изменения в исходниках и конфиге, пересобирает автоматически (debounce 500 мс)
JSON‑вывод -json — для CI/CD: статус, код возврата, время сборки, список исходников, объектников, имя бинарника, ошибка
Улучшенный CLI: -h / --help, -v / --version
v1.3.0 (финальный стабильный)
Интегрирована man‑страница (-man) — генерирует roff‑разметку для системной документации
Красивый цветной --help (группировка опций, цвета, примеры)
Устранены все баги с тестами (покрытие ~70%)
Релиз готов к использованию в production
Как это работает
Парсинг аргументов – поддерживаются флаги, конфиг, взаимное исключение -asm/-cc/-dir.
Сборка – для каждого найденного файла вызывается соответствующий тул (nasm / gcc / fasm / в будущем g++). Объектные файлы складываются во временную папку .fz_objs.
Кэш – перед сборкой вычисляется хеш исходника + флаги (debug, mode). Если кэш попадается – объектник копируется, компилятор не вызывается.
Линковка – в зависимости от режима выбирается gcc, gcc -no-pie или ld. При активных санитайзерах подставляются -fsanitize=address -fsanitize=undefined, в строгом режиме – дополнительные флаги.
Результат – на выходе получается исполняемый файл (имя по умолчанию: из исходника или папки + .out / .exe). При -json выводится отчёт, при -watch процесс не завершается, а ждёт изменений.
Что дальше (план на v1.4.0, v1.5.0)
Исключающие паттерны – exclude в конфиге и -exclude в CLI
C++ – поддержка .cpp, автоматическая компиляция через g++, те же строгие флаги
Кастомные флаги – -asm-flag, -cc-flag, -ld-flag
Цветной вывод ошибок/успехов (с учётом NO_COLOR)
CI/CD – автоматические тесты на Linux/macOS/Windows
Пакеты – Homebrew, AUR
Shell‑комплекции для bash/zsh/fish
Установка
go install github.com/forgezero-cli/ForgeZero/cmd/fz@latest
Полная документация по установке и использованию:
https://github.com/forgezero-cli/ForgeZero