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/

1
Начать дискуссию