يحتوي هذا المستودع على نصوص بناء ومواد مساعدة لبناء سلسلة أدوات تعتمد على LLVM معدنية تستهدف الذراع بناءً على:
الهدف هو توفير سلسلة أدوات معدنية عارية قائمة على LLVM يمكنها استهداف عائلة بنية Arm من Armv6-M والأحدث. تتبع سلسلة الأدوات ABI لبنية Arm وتحاول توفير الميزات النموذجية اللازمة لأنظمة التشغيل المدمجة وفي الوقت الفعلي.
يتم دعم لغة C++ جزئيًا باستخدام libc++ وlibc++abi من LLVM. تشمل الميزات غير المدعومة ما يلي:
يستخدم LLVM Embedded Toolchain for Arm إصدار libc++ ABI غير المستقر. تستخدم واجهة برمجة التطبيقات (ABI) جميع التحسينات وإصلاحات الأخطاء الأحدث في libc++، ولكنها قد تؤدي إلى أخطاء في الارتباط عند الارتباط مع كائنات مجمعة مقابل إصدارات أقدم من واجهة برمجة التطبيقات (ABI). لمزيد من المعلومات، راجع https://libcxx.llvm.org/DesignDocs/ABIVersioning.html.
تعتمد سلسلة أدوات LLVM Embedded Toolchain for Arm على المكونات الأولية التالية
عنصر | وصلة |
---|---|
LLVM | https://github.com/llvm/llvm-project |
picolibc | https://github.com/picolibc/picolibc |
محتوى هذا المستودع مرخص بموجب Apache-2.0. راجع LICENSE.txt.
يتم تغطية الثنائيات الناتجة بموجب تراخيص مفتوحة المصدر الخاصة بها، راجع روابط المكونات أعلاه.
يستخدم اختبار بعض الأهداف نماذج Arm FVP المتاحة مجانًا ولكنها ليست مفتوحة المصدر، والتي لها تراخيص خاصة بها. ولا يتم استخدامها بشكل افتراضي، راجع البناء من المصدر للحصول على التفاصيل.
تم تصميم LLVM Embedded Toolchain for Arm واختباره على Ubuntu 18.04 LTS.
تم إنشاء إصدار Windows على Windows Server 2019 وتم اختباره بشكل طفيف على Windows 10.
يعد البناء على نظام التشغيل macOS عمليًا لـ x86_64 وApple Silicon.
يتم توفير الحزم الثنائية لإصدارات LLVM الرئيسية لنظامي التشغيل Linux وWindows.
قم بتنزيل إصدار من سلسلة الأدوات لمنصتك من إصدارات Github واستخرج الأرشيف إلى دليل عشوائي.
قم بتثبيت أحدث حزمة Microsoft Visual C++ Redistributable المدعومة المناسبة، مثل أحدث التنزيلات المدعومة من Microsoft Visual C++ Redistributable.
ملاحظة: إذا كنت تستخدم سلسلة الأدوات في بيئة مشتركة ذات مدخلات غير موثوقة، فتأكد من أنها محمية بشكل كافٍ.
لاستخدام سلسلة الأدوات، في سطر الأوامر، يتعين عليك توفير الخيارات التالية:
crt0
أو crt0-semihost
. سيتم ربط crt0
تلقائيًا، ولكن يمكن منع ذلك باستخدام خيار -nostartfiles
بحيث يمكن استخدام crt0-semihost
.crt0-semihost
.-T
. يتم توفير البرامج النصية الافتراضية picolibcpp.ld
و picolibc.ld
ويمكن استخدامها مباشرة أو تضمينها من برنامج نصي رابط مخصص.على سبيل المثال:
$ PATH=/LLVMEmbeddedToolchainForArm-/bin:$PATH
$ clang
--target=armv6m-none-eabi
-mfpu=none
-fno-exceptions
-fno-rtti
-nostartfiles
-lcrt0-semihost
-lsemihost
-T picolibc.ld
-o example example.c
سيقوم نظام multilib الخاص بـ clang
تلقائيًا بتحديد مجموعة مناسبة من المكتبات بناءً على علامات الترجمة الخاصة بك. سيصدر clang
تحذيرًا إذا لم يتم العثور على مجموعة مناسبة من المكتبات.
لعرض الدليل المحدد بواسطة نظام multilib، أضف العلامة -print-multi-directory
إلى خيارات سطر أوامر clang
.
لعرض جميع multilibs المتاحة، قم بتشغيل clang
مع العلامة -print-multi-lib
والهدف الثلاثي مثل --target=aarch64-none-elf
أو --target=arm-none-eabi
.
من الممكن أن تختار clang
مجموعة من المكتبات التي ليست هي تلك التي تريد استخدامها. في هذه الحالة، يمكنك تجاوز نظام multilib من خلال توفير خيار --sysroot
الذي يحدد الدليل الذي يحتوي على دليلي include
و lib
للمكتبات التي تريد استخدامها. على سبيل المثال:
$ clang
--sysroot=/LLVMEmbeddedToolchainForArm-/lib/clang-runtimes/arm-none-eabi/armv6m_soft_nofp
--target=armv6m-none-eabi
-mfpu=none
-fno-exceptions
-fno-rtti
-nostartfiles
-lcrt0-semihost
-lsemihost
-T picolibc.ld
-o example example.c
يمكن تخطي تحديد FPU، لكن لا يُنصح بذلك لأن الإعدادات الافتراضية تختلف عن الإعدادات الافتراضية في دول مجلس التعاون الخليجي.
تأتي إصدارات سلسلة الأدوات مرفقة بملفين للتكوين، Omax.cfg وOmaxLTO.cfg. عند استخدامها، تعمل ملفات التكوين هذه على تمكين العديد من علامات تحسين البناء لتحقيق أعلى أداء وفقًا للمعايير المضمنة النموذجية. يتيح OmaxLTO.cfg إشارات محددة لتحسين وقت الارتباط (LTO). يمكن تمرير هذه التكوينات اختياريًا باستخدام علامة --config
. على سبيل المثال:
$ clang
example.c
...
--config=Omax.cfg
--config=OmaxLTO.cfg
-o example
يجب تحذير المستخدمين من أن Omax.cfg يمكّن -ffast-math
الذي يكسر امتثال IEEE ويمكّن تحسينات الرياضيات التي يمكن أن تؤثر على صحة التعليمات البرمجية. يتم الاحتفاظ بـ LTOs بشكل منفصل في OmaxLTO.cfg حيث قد لا يرغب المستخدمون في LTOs بسبب الزيادة المحتملة في وقت الارتباط و/أو زيادة استخدام الذاكرة أثناء الارتباط. بعض الخيارات الموجودة في ملفات التكوين هي خيارات LLVM داخلية غير موثقة. بالنسبة لهذه الخيارات غير الموثقة، يرجى الاطلاع على الكود المصدري لممرات التحسين المقابلة في مشروع LLVM لمعرفة المزيد. يتم تشجيع المستخدمين أيضًا على إنشاء التكوينات الخاصة بهم وضبط معلمات العلامة الخاصة بهم. تتوفر معلومات حول LLVM Embedded Toolchain لعلامات التحسين الخاصة بـ Arm في إشارات التحسين
تعتمد الإصدارات الثنائية لـ LLVM Embedded Toolchain for Arm على فروع الإصدار لمشروع LLVM الأولي، وبالتالي يمكن استخدامها بأمان مع جميع الأدوات التي توفرها إصدارات LLVM للإصدار المطابق.
راجع الترحيل من Arm GNU Toolchain والدعم التجريبي الجديد للحصول على نصائح حول استخدام LLVM Embedded Toolchain for Arm مع المشاريع الحالية التي تعتمد على Arm GNU Toolchain.
ملاحظة: يوفر
picolibc
دعمًا ممتازًا لـ Arm GNU Toolchain، لذلك يمكن للمشروعات التي تتطلب استخدام كل من Arm GNU Toolchain وLLVM Embedded Toolchain for Arm اختيارpicolibc
أوnewlib
.
LLVM Embedded Toolchain for Arm هو مشروع مفتوح المصدر وبالتالي يمكن بناؤه من المصدر. يرجى الاطلاع على دليل المبنى من المصدر للحصول على تعليمات مفصلة.
يرجى إثارة قضية عبر قضايا جيثب.
يرجى الاطلاع على دليل المساهمة للحصول على التفاصيل.