Випуск ForgeZero 1.9.0, інструменту збирання для C та асемблера

Опубліковано реліз ForgeZero 1.9.0 (fz), консольний інструмент збірки для проектів мовами C, C++ та асемблера (NASM, GAS, FASM). Інструмент не вимагає створення Makefile або інших файлів конфігурації для базового використання. Код проекту написаний мовою Go та поширюється під ліцензією MIT.

ForgeZero визначає тип файлу та автоматично вибирає необхідний бекенд. Кожен файл з кодом збирається в об'єктний файл, після чого виконується перевірка глобальних символів, що дублюються, у всіх об'єктах і здійснюється компонування в єдиних виконуваний файл. Скомпільовані файли кешуються і повторно перезбираються лише після внесення змін до пов'язаних з ними файлів з кодом. Можливе опціональне відстеження змін у ФС та перескладання після оновлення файлів з кодом.

Підтримуються компілятори: GCC, Clang, G++, Clang++; асемблери NASM, GAS, FASM; компонувальники LD, GCC, Clang; архіватор AR. Обов'язкові попередження для C і C++: "Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". За замовчуванням включені санітайзери AddressSanitizer та UndefinedBehaviorSanitizer (відключаються прапором -sanitize=false). Підтримуються платформи Linux, macOS, Windows (WSL2 та експериментально нативно).

Основні зміни у версії 1.9.0:

  • Доданий прапор «-target» , Що дозволяє виконувати крос-компіляцію для довільної архітектури за наявності відповідного префіксного інструментарію. fz самостійно визначає імена компілятора, компонувальника та архіватора за вказаним ідентифікатором (наприклад, «arm-linux-gnueabihf-gcc»). Підтримуються будь-які стандартні цільові платформи GNU, у тому числі arm-linux-gnueabihf, aarch64-linux-gnu та riscv64-linux-gnu.
  • Реалізовано підтримку підтримки протоколу LSP (Language Server Protocol). Прапор "-compile-commands" генерує файл compile_commands.json (Compilation Database) у корені проекту. Файл зчитується мовними серверами clangd та ccls, забезпечуючи роботу автодоповнення, навігації за кодом та діагностикою в редакторах з підтримкою LSP (Neovim, VSCode, CLion, Emacs та ін.).
  • Команда fz «-update» перед встановленням нової версії тепер зберігає поточний бінарний файл /usr/local/bin/fz.old, що дозволяє відкотитися до попередньої версії без переустановки.
  • Усунено помилку, коли в мультидиректорних проектах файли з однаковими базовими іменами з різних підкаталогів перезаписували об'єктні файли один одного. Імена об'єктних файлів тепер формуються на основі повного відносного шляху вихідного файлу.
  • Реалізовано інтерактивний режим fz-shell для складання одиночних файлів.
  • Додано тестове покриття для команд SplitCommand, CmdSet та CmdBuild. Покриття тестами пакету компонувальника збільшено з 17 до 60%, а покриття всіх пакетів перевищило 40%.
  • Додано механізм заміни CheckTool для тестування сценаріїв з відсутніми компонентами тулчейна.

Зміни попередніх випусків:

  • У версії 1.8.0 реалізовано складання статичних бібліотек (-type static / -lib), забезпечено унікальність імен об'єктних файлів у мультидиректорних проектах, виправлено помилки в підсистемі складання, пов'язані з обходом шляху «..».
  • В версии 1.7.0 добавлена ​​параллельная компиляция (-j N, 0 — автоопределение числа ядер), поддержка линкер-скриптов (-T) и адреса точки входа (-Ttext), интерактивный режим (fz -shell), явный выбор формата вывода (elf32, elf64, bin), компиляция файлов C++ (.cpp, .cc, .cxx) з тими ж строгими прапорами попереджень, що і для C.
  • У версії 1.6.0 додано ініціалізацію проекту (fz -init, створює .fz.yaml, .fzignore, README.md), підтримка формату bin (-format bin) для завантажувачів і прошивок, конфігураційні поля libs, flags.cc, flags.ld.
  • У версії 1.5.0 реалізовані множинні директорії джерел (source_dirs), явні списки файлів (source_files), шаблони include/exclude, поле libs для бібліотек компонувальника, .fzignore файл, багаторівневе злиття конфігураційних файлів.

Джерело: opennet.ru

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster