ForgeZero v1.0 на Go: ассемблерный билдер, который жрёт папки и не капризничает
Всем привет, на связи снова AlexVoste.
Совсем недавно я писал пост о своём билдере ForgeZero, который я писал на технологии Node.js без зависимостей. В общем, пришло время, и я перешёл на более лёгкие, современные технологии.
Переписал свой билдер полностью на язык Go, добавил новые флаги, возможность линковать сразу директории. Встречайте: fz — утилита для сборки ассемблерных проектов одним выстрелом.
Зачем?
Если вы пишете на ассемблере (NASM, GAS, FASM), то знаете: нужно вызывать nasm/gcc, потом ld/gcc, не забыть флаги, а для проектов из нескольких файлов — ещё и перечислять объектники. fz сводит всю рутину к команде:
fz -asm boot.asm
# или для целой папки
fz -dir ./src
Что умеет?
- Одиночная сборка — fz -asm file.asm → file.o + file (или .exe под Windows).
- Рекурсивная сборка папки — fz -dir ./kernel найдёт все .asm, .s, соберёт каждый в объектник и слинкует в один бинарник. Название бинарника = имя папки + .out / .exe.
- Подавление шума — по умолчанию внешние команды (nasm, gcc, ld) ничего не выводят. Вы видите только Built: program.out. Если что-то пошло не так — краткая ошибка с советом добавить -verbose.
- Авто-линковка — сначала пробует gcc, затем gcc -no-pie, затем ld (режим auto). Можно принудительно выбрать c (только gcc) или raw (только ld).
- Отладка — флаг -debug пробрасывает -g в ассемблер.
- Чистка артефактов — fz -dir ./src -clean удаляет все .o, исполняемые файлы и папку .fz_objs одной командой.
- Уникальные объектники — даже если в папке есть hello.asm и hello.s, они превратятся в hello_asm.o и hello_s.o, чтобы не перезаписывать друг друга.
Пример работы
Собрать один файл (NASM)
fz -asm hello.asm -verbose
Собрать проект из папки с именем myapp
fz -dir ./src -out myapp
Force raw-линковка (без libc)
fz -asm boot.asm -mode raw
Очистить всё, что нагенерировал fz
fz -dir . -clean
Установка(2 способа)
1. Через go install (рекомендую)
go install github.com/alexvoste/ForgeZero/cmd/fz@latest
2. Классическая сборка
git clone https://github.com/alexvoste/ForgeZero.git
cd ForgeZero
go build -o fz ./cmd/fz
sudo mv fz /usr/local/bin/
Требования: в PATH должны быть nasm / gcc / fasm / ld (зависит от ваших исходников).
Что дальше?
Планирую добавить поддержку кастомных скриптов линковки, вывод в формате JSON для CI/CD, ну и, возможно, горячую перекомпиляцию при изменениях (watch).
Пробуйте, замечания и пулл-реквесты приветствуются.
Успешной сборки!
Репо: https://github.com/alexvoste/forgezero/