هناك نوعان من وحدات مكتبة Rust، أحدهما ينتج مكتبات Rust والآخر ينتج مكتبات متوافقة مع لغة C. بالإضافة إلى ذلك، لأغراض بناء النظام، يمكنك اعتبار وحدات الماكرو الإجرائية Rust ( proc-macros
) كنوع خاص من المكتبات.
Rust_library
تنتج وحدة rust_library
مكتبات Rust لتستخدمها وحدات Rust الأخرى.
بالإضافة إلى متغيرات _host
، تحتوي مكتبات Rust على أنواع وحدات تتحكم في الارتباط المتاح.
نوع وحدة مكتبة الصدأ | تعريف |
---|---|
Rust_library | يوفر متغيرات المكتبة، rlib و dylib . توصي AOSP بهذا النوع من الوحدات لمكتبات Rust، لأنها تسمح للوحدات بالعمل بشكل صحيح عند إدراجها على أنها تبعية ضمن خاصية rustlibs |
Rust_library_rlib | يوفر فقط متغير rlib لمكتبة Rust؛ لا يمكن ضمان أن الوحدات التي توفر متغيرات rlib فقط تعمل مع خاصية rustlibs . |
Rust_library_dylib | يوفر فقط متغير dylib لمكتبة Rust؛ لا يمكن ضمان أن الوحدات التي توفر متغيرات dylib فقط تعمل مع خاصية rustlibs . |
Rust_ffi
تنتج وحدة rust_ffi
مكتبات متوافقة مع C للتفاعل مع وحدات CC.
بالإضافة إلى متغيرات _host
، تحتوي مكتبات Rust FFI على أنواع وحدات تتحكم في الارتباط المتاح، كما هو موضح في الجدول التالي.
نوع الوحدة النمطية لمكتبة Rust FFI | تعريف |
---|---|
Rust_ffi | يوفر متغيرات مكتبة C: ثابتة ومشتركة. |
rust_ffi_shared | يوفر فقط متغير المكتبة المشتركة C. |
rust_ffi_static | يوفر فقط متغير مكتبة C الثابتة. |
للحصول على مثال أساسي لاستخدام rust_ffi
للاتصال بـ Rust من C، راجع صفحة Android Rust Patterns .
للحصول على معلومات حول الاستخدام الأكثر تقدمًا، تفضل بزيارة وثائق Rust الرسمية .
Rust_proc_macro
يمكن أن تكون وحدات الماكرو الإجرائية الصدأ (proc-macros) مفيدة لتوسيع المترجم لإجراء تحويلات التعليمات البرمجية المصدر أو توفير سمات جديدة. يمكن العثور على مزيد من المعلومات حول هذه الأمور في صفحة وحدات الماكرو الإجرائية في وثائق Rust الرسمية.
لأغراض نظام البناء، تعمل وحدة rust_proc_macro
بشكل مشابه لوحدات rust_library
. بالنسبة للوحدات التي تعتمد على rust_proc_macros
، قم بإضافة اسم الوحدة إلى خاصية proc_macros
.
نظرًا لأن proc_macros
عبارة عن مكونات إضافية للمترجم، فإنها تستهدف بالضرورة المضيف ولا تنتج أي تعليمات برمجية يمكن تشغيلها على الجهاز.
خصائص مكتبة الصدأ البارزة
الخصائص المحددة في الجدول أدناه هي بالإضافة إلى الخصائص العامة الهامة التي تنطبق على كافة الوحدات. تعتبر هذه إما ذات أهمية خاصة لوحدات مكتبة Rust، أو تعرض سلوكًا فريدًا خاصًا بنوع وحدة rust_library
.
خصائص مكتبة الصدأ | تعريف |
---|---|
الجذع / الاسم | تتحكم الخاصية stem في اسم ملف مكتبة المخرجات، والذي يكون الاسم الافتراضي هو name . يفرض مترجم Rust متطلبات معينة على أسماء ملفات المكتبة، ونتيجة لذلك يفرض نظام البناء هذه المتطلبات لتجنب مشكلات الترجمة. يجب أن يتوافق اسم ملف الإخراج مع التنسيق |
crate_name | هذه خاصية مطلوبة لوحدات إنتاج المكتبات؛ بالإضافة إلى ذلك، فإنه يحتوي على علاقة باسم ملف الإخراج. (انظر تعريف stem .) |
export_include_dirs | بالنسبة لوحدات rust_ffi ، تحدد هذه الخاصية قائمة من السلاسل التي تمثل مسارات التضمين النسبية: المسارات التي تحتوي على رؤوس يمكن لوحدات cc التابعة استخدامها. |
الربط بين Rust_library وrust_ffi
افتراضيًا، ترتبط وحدات مكتبة Rust التي تستهدف الأجهزة دائمًا ديناميكيًا مع libstd
. ومع ذلك، يتم دائمًا ربط الوحدات المضيفة بشكل ثابت مع libstd
.
يعتمد الارتباط المستخدم لتبعيات rustlibs
على تفضيلات الارتباط الخاصة بالوحدة الجذرية. (على سبيل المثال، سوف يستخدم rust_binary
مع prefer_rlib: true
متغيرات مكتبة Rust التي تربط rustlibs
كـ rlibs
.)
للسماح بإنتاج وحدات تبعية الجذر التي لا تعتمد على أي مكتبات صدأ ديناميكية (مثل الملفات التنفيذية الثابتة)، يوفر rlibs
متغيرات ربط libstd
الديناميكية والثابتة. يتم ربط المتغير الصحيح تلقائيًا بواسطة Soong.