Апублікаваны рэліз 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, cc, bin, . .cxx) з тымі ж строгімі сцягамі папярэджанняў, што і для C.
- У версіі 1.6.0 дададзены ініцыялізацыя праекта (fz -init, стварае .fz.yaml, .fzignore, README.md), падтрымка фармату bin (-format bin) для загрузнікаў і прашывак, канфігурацыйныя палі libs, flags.cc, flags.
- У версіі 1.5.0 рэалізаваны множныя дырэкторыі крыніц (source_dirs), відавочныя спісы файлаў (source_files), шаблоны include/exclude, поле libs для бібліятэк кампаноўніка, файл .fzignore, шматузроўневае зліццё канфігурацыйных файлаў.
Крыніца: opennet.ru
