كقاعدة عامة، تلتزم تعريفات وحدات rust_* عن كثب باستخدام cc_* والتوقعات المرتبطة بها. في ما يلي مثال على تعريف وحدة
لملف تنفيذي بلغة Rust:
rust_binary {
name: "hello_rust",
crate_name: "hello_rust",
srcs: ["src/hello_rust.rs"],
host_supported: true,
}
تتناول هذه الصفحة الخصائص الأكثر شيوعًا لوحدات rust_*. لمزيد
من المعلومات عن أنواع الوحدات المحدّدة وأمثلة على تعريفات الوحدات،
يُرجى الاطّلاع على
وحدات الملفات التنفيذية،
وحدات المكتبات،
أو
وحدات الاختبار.
أنواع الوحدات الأساسية
| النوع | التعريف | لمزيد من المعلومات |
|---|---|---|
rust_binary | ملف تنفيذي بلغة Rust | صفحة "وحدات الملفات التنفيذية" |
rust_library | تنتج مكتبة بلغة Rust، وتوفّر كلاً من صيغتَي rlib و
dylib |
rust_library،
صفحة "وحدات المكتبات" |
rust_ffi | تنتج مكتبة بلغة C من Rust يمكن استخدامها من قِبل وحدات cc وتوفّر كلاً من الصيغتَين الثابتة والمشترَكة. | rust_ffi,
صفحة "وحدات المكتبات" |
rust_proc_macro | تنتج مكتبة proc-macro Rust.
(وهي مماثلة للمكوّنات الإضافية للمترجم.) |
rust_proc_macro،
صفحة "وحدات المكتبات" |
rust_test | تنتج برنامجًا ثنائيًا للاختبار بلغة Rust يستخدم مفعِّل اختبار Rust العادي. | صفحة "وحدات الاختبار" |
rust_fuzz | تنتج ملفًا تنفيذيًا للبحث عن الأخطاء بلغة Rust يستفيد من
libfuzzer. |
rust_fuzz مثال على وحدة |
rust_protobuf | تنشئ مصدرًا وتنتج مكتبة بلغة Rust توفّر واجهة لبروتوكول معيّن من Protobuf. | صفحتا "وحدات Protobuf" و"منشئات المصدر" |
rust_bindgen | تنشئ مصدرًا وتنتج مكتبة بلغة Rust تحتوي على روابط Rust بمكتبات C. | صفحات وحدات روابط Bindgen ومنشئات المصدر |
الخصائص الشائعة المهمة
هذه الخصائص شائعة في جميع وحدات Rust في Android. يتم إدراج أي خصائص إضافية (فريدة) مرتبطة بوحدات Rust الفردية في صفحة تلك الوحدة.
الاسم
name هو اسم الوحدة. على غرار وحدات Soong الأخرى، يجب أن يكون هذا الاسم فريدًا في معظم أنواع وحدات Android.bp. يتم تلقائيًا استخدام name كاسم لملف الإخراج. إذا كان يجب أن يختلف اسم ملف الإخراج عن اسم الوحدة، استخدِم السمة stem لتحديده.
stem
توفّر السمة stem (اختيارية) تحكّمًا مباشرًا في اسم ملف الإخراج (باستثناء امتداد الملف واللاحقات الأخرى). على سبيل المثال، تنتج مكتبة rust_library_rlib
بقيمة `stem` هي libfoo ملفًا باسم libfoo.rlib. إذا لم تقدّم قيمة للسمة stem، يتخذ اسم ملف الإخراج اسم الوحدة تلقائيًا.
استخدِم الدالة stem عندما لا يمكنك ضبط اسم الوحدة على اسم ملف الإخراج المطلوب. على سبيل المثال، يُطلق على rust_library لـ log crate الاسم
liblog_rust،
لأنّه يتوفّر حاليًا liblog cc_library
بالفعل. يضمن استخدام السمة stem في هذه الحالة أن يكون اسم ملف الإخراج liblog.* بدلاً من liblog_rust.*.
srcs
يحتوي srcs على ملف مصدر واحد يمثّل نقطة الدخول إلى الوحدة (عادةً main.rs أو lib.rs). يتولّى rustc حلّ جميع ملفات المصدر الأخرى المطلوبة للتجميع واكتشافها، ويتم تعدادها في ملف deps الذي يتم إنشاؤه.
تجنَّب هذا الاستخدام لرمز النظام الأساسي قدر الإمكان. لمزيد من المعلومات، يُرجى الاطّلاع على منشئات المصدر .
crate_name
crate_name تضبط بيانات تعريف اسم crate الوصفية من خلال العلامة rustc --crate_name. بالنسبة إلى الوحدات التي تنتج مكتبات، يجب أن يتطابق هذا الاسم مع اسم crate المتوقّع المستخدَم في المصدر. على سبيل المثال، إذا تمت الإشارة إلى الوحدة libfoo_bar في المصدر على النحو extern crate foo_bar، يجب أن تكون crate_name: "foo_bar".
هذه السمة شائعة في جميع وحدات rust_*، ولكنّها مطلوبة للوحدات
التي تنتج مكتبات بلغة Rust (مثل rust_library
rust_ffi وrust_bindgen وrust_protobuf وrust_proc_macro). تفرض هذه
الوحدات متطلبات rustc على العلاقة بين crate_name
واسم ملف الإخراج. لمزيد من المعلومات، يُرجى الاطّلاع على قسم "
وحدات المكتبات
".
lints
يتم تلقائيًا تشغيل أداة التحقق من الأخطاء في rustc لجميع أنواع الوحدات باستثناء منشئات المصدر. يتم تحديد بعض مجموعات أدوات التحقق من الأخطاء واستخدامها للتحقق من صحة مصدر الوحدة. في ما يلي القيم المحتمَلة لمجموعات أدوات التحقق من الأخطاء هذه:
default: مجموعة أدوات التحقق من الأخطاء التلقائية، استنادًا إلى موقع الوحدةandroid: مجموعة أدوات التحقق من الأخطاء الأكثر صرامة التي تنطبق على جميع رموز نظام Android الأساسيvendor: مجموعة أدوات التحقق من الأخطاء غير الصارمة التي يتم تطبيقها على رمز المورّدnone: لتجاهل جميع تحذيرات وأخطاء أدوات التحقق من الأخطاء
clippy_lints
يتم أيضًا تشغيل أداة التحقق من الأخطاء في clippy تلقائيًا لجميع أنواع الوحدات باستثناء منشئات المصدر. يتم تحديد بعض مجموعات أدوات التحقق من الأخطاء التي تُستخدَم للتحقق من صحة مصدر الوحدة. في ما يلي بعض القيم المحتمَلة:
default: مجموعة أدوات التحقق من الأخطاء التلقائية استنادًا إلى موقع الوحدةandroid: مجموعة أدوات التحقق من الأخطاء الأكثر صرامة التي تنطبق على جميع رموز نظام Android الأساسيvendor: مجموعة أدوات التحقق من الأخطاء غير الصارمة التي يتم تطبيقها على رمز المورّدnone: لتجاهل جميع تحذيرات وأخطاء أدوات التحقق من الأخطاء
إصدار
edition تحدّد إصدار Rust الذي سيتم استخدامه لـ
تجميع هذا الرمز. يشبه هذا الإصدار إصدارات std للغتَي C وC++. والقيم الصالحة هي 2015 و2018 و2021 (تلقائي).
أعلام
يحتوي flags على قائمة سلاسل من العلامات التي سيتم تمريرها إلى rustc أثناء التجميع.
ld_flags
يحتوي ld-flags على قائمة سلاسل من العلامات التي سيتم تمريرها إلى الرابط عند تجميع المصدر. يتم تمرير هذه العلامات من خلال علامة `rustc` -C linker-args. يتم استخدام clang كواجهة أمامية للرابط، ما يؤدي إلى استدعاء lld للربط الفعلي.
الميزات
features هي قائمة سلاسل من الميزات التي يجب تفعيلها أثناء التجميع.
يتم تمرير هذه الميزات إلى rustc من خلال --cfg 'feature="foo"'. معظم الميزات إضافية، لذا يتألف هذا في كثير من الحالات من مجموعة الميزات الكاملة المطلوبة من قِبل جميع الوحدات التابعة. ومع ذلك، في الحالات التي تكون فيها الميزات حصرية لبعضها البعض، حدِّد وحدات إضافية في أي ملفات إنشاء توفّر ميزات متعارضة.
cfgs
يحتوي cfgs على قائمة سلاسل من علامات cfg التي سيتم تفعيلها أثناء التجميع.
يتم تمرير هذه العلامات إلى rustc من خلال --cfg foo و--cfg "fizz=buzz".
يضبط نظام التصميم تلقائيًا علامات cfg معيّنة في حالات معيّنة، كما هو موضّح أدناه:
ستتضمّن الوحدات التي تم إنشاؤها كـ dylib علامة
android_dylibcfg.ستتضمّن الوحدات التي ستستخدم VNDK علامة
android_vndkcfg. يشبه هذا الإعداد تعريف__ANDROID_VNDK__للغة C++.
strip
تتحكّم السمة strip في ما إذا كان سيتم إزالة المعلومات من ملف الإخراج وكيفية ذلك (إذا كان ذلك ممكنًا).
إذا لم يتم ضبط هذه السمة، يتم تلقائيًا إزالة كل المعلومات من وحدات الجهاز باستثناء معلومات تصحيح الأخطاء المصغّرة.
لا تزيل وحدات المضيف تلقائيًا أي رموز. تشمل القيم الصالحة none لإيقاف إزالة المعلومات، وall لإزالة كل المعلومات، بما في ذلك معلومات تصحيح الأخطاء المصغّرة.
يمكنك العثور على قيم إضافية في الـ
Soong Modules Reference.
host_supported
بالنسبة إلى وحدات الجهاز، تشير المَعلمة host_supported إلى ما إذا كان يجب أن توفّر الوحدة أيضًا صيغة مضيف.
تحديد تبعيات المكتبة
يمكن أن تعتمد وحدات Rust على كل من مكتبات CC و Rust من خلال الخصائص التالية:
| اسم السمة | الوصف |
|---|---|
rustlibs |
قائمة بوحدات rust_library التي تمثّل أيضًا تبعيات استخدِم هذه السمة كـ
طريقتك المفضّلة للإعلان عن التبعيات، لأنّها تسمح لنظام التصميم بـ
اختيار الربط المفضّل. (راجِع القسم "عند الربط بمكتبات Rust" أدناه) |
rlibs |
قائمة بوحدات rust_library التي يجب ربطها بشكل ثابت
كـ rlibs. (استخدِم هذه السمة بحذر. راجِع القسم
"عند الربط بمكتبات Rust" أدناه.) |
shared_libs |
قائمة بوحدات cc_library التي يجب ربطها بشكل ديناميكي
كمكتبات مشترَكة |
static_libs |
قائمة بوحدات cc_library التي يجب ربطها بشكل ثابت
كمكتبات ثابتة |
whole_static_libs |
قائمة بوحدات cc_library التي يجب ربطها بشكل ثابت
كمكتبات ثابتة وتضمينها بالكامل في المكتبة الناتجة بالنسبة إلى
rust_ffi_static صيغ، سيتم تضمين whole_static_libraries في الـ
أرشيف المكتبة الثابتة الناتج. بالنسبة إلى صيغ rust_library_rlib، سيتم تجميع مكتبات
whole_static_libraries في مكتبة rlib
الناتجة.
|
عند الربط بمكتبات Rust، يُنصح باستخدام السمة rustlibs بدلاً من rlibs أو
dylibs ما لم يكن لديك سبب محدّد لاستخدامها. يسمح هذا لنظام الإنشاء باختيار الربط الصحيح استنادًا إلى ما تتطلبه الوحدة الجذرية، ويقلّل من احتمالية احتواء شجرة التبعيات على كل من إصدارَي rlib و
dylib لمكتبة (ما سيؤدي إلى فشل التجميع).
ميزات الإنشاء غير المتوافقة والميزات المتوافقة بشكل محدود
توفر لغة Rust في Soong دعمًا محدودًا لصور vendor و
vendor_ramdisk ولقطاتها. ومع ذلك، تتوافق اللغة مع staticlibs وcdylibs وrlibs وbinaries. بالنسبة إلى أهداف إنشاء صور المورّد، يتم ضبط السمة android_vndk cfg. يمكنك استخدام هذه السمة في الرمز إذا كانت هناك اختلافات بين أهداف النظام والمورّد. لا يتم التقاط rust_proc_macros كجزء من لقطات المورّد. إذا كانت هذه الوحدات تابعة، تأكَّد من التحكّم في إصدارها بشكل مناسب.
لا تتوافق اللغة مع صور المنتجات وVNDK وRecovery.
عمليات الإنشاء المتزايدة
يمكن للمطوّرين تفعيل التجميع المتزايد لمصدر
Rust من خلال ضبط متغيّر البيئة SOONG_RUSTC_INCREMENTAL
على true.
تحذير: لا يُضمن أن تنتج هذه العملية ملفات تنفيذية مطابقة لتلك التي تنشئها برامج buildbot. قد تختلف عناوين الدوال أو البيانات الواردة في ملفات الكائنات. لضمان أن تكون العناصر التي تم إنشاؤها مطابقة بنسبة %100 لتلك التي أنشأتها البنية الأساسية لـ EngProd، اترُك هذه القيمة غير مضبوطة.