ForgeZero (fz) — универсальный «швейцарский нож» для сборки NASM, GAS, FASM и C

fz (ForgeZero) — утилита для сборки проектов на ассемблере (NASM, GAS, FASM) и C. Написана на Go, не требует дополнительных зависимостей (кроме самих компиляторов). Инструмент для низкоуровневой разработки.

ForgeZero (fz) — универсальный «швейцарский нож» для сборки NASM, GAS, FASM и C
ForgeZero (fz) — универсальный «швейцарский нож» для сборки NASM, GAS, FASM и C
ForgeZero (fz) — универсальный «швейцарский нож» для сборки NASM, GAS, FASM и C

Версии и ключевые возможности

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

1
1 комментарий