Привет, коллеги!
Хочу поделиться утилитой fz (ForgeZero), которая полностью переписывает подход к сборке проектов на ассемблере (NASM, GAS, FASM) и C/C++.Проблема: каждый раз писать nasm -felf64 ..., затем gcc -c ..., потом ld или gcc, да ещё флаги не забыть – надоело. Для больших проектов – свои скрипты или муки с CMake.
Решение: fz – единая команда, которая сама определяет тип файла, вызывает нужный тулчейн, линкует и чистит артефакты. Работает на Linux, macOS, Windows (через clang+lld).
Что умеет (актуальная версия v1.7.1):
Сборка одного файла или всей папки рекурсивно
C++, ассемблер (NASM, GAS, FASM) с жёсткими флагами (-Wall -Wextra -Werror ...)
Параллельная сборка -j N (ускорение на многоядерных)
Линкер-скрипты -T и -Ttext – для ядер ОС и bare metal
Плоские бинарники -format bin – для загрузчиков
Интерактивный шелл -shell – менять флаги и пересобирать на лету
Кэширование (SHA256) – пересобирает только изменённые файлы
Watch‑режим -watch – автоматическая пересборка при изменении исходников
JSON‑вывод – для CI/CD
Санитайзеры (ASan+UBSan) по умолчанию, -strict добавляет use‑after‑return/scope
Конфигурация .fz.yaml – описываем source_dirs, exclude, libs, кастомные флаги
fz -init – создаёт готовый проект с README и конфигами
fz -update – самообновление через go install или с GitHub (если есть бинарники)
Установка (в одну строку):
curl -L fzget.duckdns.org/linux -o fz && chmod +x fz
Или через Go (требуется Go 1.21+):
go install github.com/forgezero-cli/ForgeZero/cmd/fz@latest
Примеры:
fz -asm boot.asm
fz -cc main.c -strict -verbose
fz -dir ./src -out myapp -watch
fz -asm boot.asm -format bin -out boot.bin
fz -shell
Ссылки:
GitHub: https://github.com/forgezero-cli/ForgeZero
Сайт проекта: https://fzforum.duckdns.org
Пользуйтесь, контрибьютите, задавайте вопросы.
Код на Go, открытый, MIT.
P.S. Сейчас активно развивается – планы на статические библиотеки, цветной вывод, удалённый кэш. Буду рад фидбеку!