تم إصدار 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 من الترجمة المتقاطعة لأي بنية معمارية باستخدام أدوات البادئة المناسبة. ويحدد fz تلقائيًا أسماء المُترجم، والرابط، والمُؤرشف بناءً على المُعرّف المُحدد (مثل "arm-linux-gnueabihf-gcc"). ويدعم جميع منصات GNU المستهدفة القياسية، بما في ذلك arm-linux-gnueabihf وaarch64-linux-gnu وriscv64-linux-gnu.
- تم تفعيل دعم بروتوكول خادم اللغة (LSP). يُنشئ الخيار "-compile-commands" ملف compile_commands.json (قاعدة بيانات التجميع) في جذر المشروع. ويقرأ البرنامج هذا الملف. الخوادم clangd و ccls، مما يوفر الإكمال التلقائي، والتنقل بين التعليمات البرمجية، والتشخيص في المحررات التي تدعم LSP (Neovim، VSCode، CLion، Emacs، إلخ).
- يقوم الأمر fz "-update" الآن بحفظ الملف الثنائي الحالي في /usr/local/bin/fz.old قبل تثبيت إصدار جديد، مما يسمح لك بالرجوع إلى الإصدار السابق دون إعادة التثبيت.
- تم إصلاح خطأ في المشاريع متعددة المجلدات حيث كانت الملفات ذات الأسماء الأساسية المتطابقة من مجلدات فرعية مختلفة تستبدل ملفات الكائنات الخاصة ببعضها البعض. يتم الآن إنشاء أسماء ملفات الكائنات بناءً على المسار النسبي الكامل لملف المصدر.
- تم تطبيق الوضع التفاعلي "fz -shell" لإنشاء ملفات فردية.
- تمت إضافة تغطية اختبارية لأوامر SplitCommand وCmdSet وCmdBuild. ارتفعت التغطية الاختبارية لحزمة الرابط من 17% إلى 60%، وتجاوزت التغطية لجميع الحزم 40%.
- تمت إضافة آلية استبدال لأداة الفحص لاختبار السيناريوهات التي تفتقر إلى مكونات سلسلة الأدوات.
التغييرات عن الإصدارات السابقة:
- يقوم الإصدار 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.asm، flags.ld.
- يقدم الإصدار 1.5.0 أدلة مصدر متعددة (source_dirs)، وقوائم ملفات صريحة (source_files)، وأنماط تضمين/استبعاد، وحقل libs لمكتبات الرابط، وملف .fzignore، ودمج متعدد المستويات لملفات التكوين.
المصدر: opennet.ru
