كقاعدة عامة، تلتزم 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 | إنشاء مكتبة Rust C قابلة للاستخدام بواسطة الحقل "نسخة إلى" وتوفر صيغًا ثابتة ومشتركة. | rust_ffi ,
صفحة "وحدات المكتبة" |
rust_proc_macro | لإنشاء مكتبة proc-macro Rust.
(هذه المكوّنات مشابهة للمكوّنات الإضافية لبرنامج التحويل البرمجي). |
rust_proc_macro ،
صفحة "وحدات المكتبات" |
rust_test | تُنشئ هذه الأداة ملفًا ثنائيًا لاختبار Rust يستخدم مجموعة اختبار Rust العادية. | صفحة الوحدات التجريبية |
rust_fuzz | إنشاء برنامج ثنائي "زغب" Rust
libfuzzer |
مثال على وحدة rust_fuzz |
rust_protobuf | تنشئ مصدرًا وينتج رمز Rust توفر واجهة لنموذج أوّلي معين. | صفحتا وحدات Protobufs ومولدّات المصادر |
rust_bindgen | تنشئ مصدرًا وينتج مكتبة Rust التي تحتوي على روابط Rust بمكتبات C. | وحدات "الربط" وصفحة منشئات المصدر |
السمات المشتركة المهمة
هذه السمات مشترَكة بين جميع إصدارات Android Rust. الوحدات. أيّ مواقع إضافية (فريدة) مرتبطة بحساب فردي يتم إدراج الوحدات Rust في صفحة تلك الوحدة.
اسم
name
هو اسم وحدتك. يجب أن تكون هذه الوحدات فريدة، مثلها مثل الوحدات الأخرى في Sumg.
في معظم أنواع الوحدات Android.bp
. يتم استخدام name
تلقائيًا كاسمملف المخرج. إذا كان يجب أن يختلف اسم ملف الإخراج عن اسم الوحدة، استخدِم السمة
stem
لتحديده.
ساق
stem
(اختياري) يقدّم إمكانية التحكّم مباشرةً في اسم الملف الناتج (باستثناء
امتداد الملف واللاحقات الأخرى). على سبيل المثال، تؤدي rust_library_rlib
مكتبة ذات قيمة جذع libfoo
إلى إنشاء ملف libfoo.rlib
. إذا
لم تقدِّم قيمة للسمة stem
، سيعتمد اسم ملف الإخراج اسم
الوحدة تلقائيًا.
استخدم الدالة stem
عندما لا يمكنك ضبط اسم الوحدة على الإخراج المطلوب
. على سبيل المثال، تم تسمية rust_library
للصندوق log
باسم
liblog_rust
،
لأنّه سبق أن تم إنشاء liblog cc_library
. ويضمن استخدام السمة stem
في هذه الحالة أن يكون الناتج
باسم الملف "liblog.*
" بدلاً من "liblog_rust.*
".
srcs
يحتوي srcs
على ملف مصدر واحد يمثّل نقطة الدخول إلى
الوحدة (عادةً main.rs
أو lib.rs
). يعالج rustc
عملية حلّ جميع الملفات المصدر الأخرى المطلوبة للترجمة و
اكتشافها، ويتم سردها في ملف deps
الذي يتم إنشاؤه.
تجنَّب هذا الاستخدام لرمز المنصة كلما أمكن. اطّلِع على أدوات إنشاء الرموز المصدر للحصول على مزيد من المعلومات.
crate_name
يضبط crate_name
البيانات الوصفية لاسم القفص من خلال --crate_name
rustc
.
. بالنسبة إلى الوحدات التي تُنشئ مكتبات، يجب أن يتطابق هذا مع اسم
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
واسم ملف الإخراج. لمزيد من المعلومات، يُرجى الاطّلاع على
وحدات المكتبة
.
أداة الوبر
يتم تشغيل أداة التدقيق rustc تلقائيًا لجميع أنواع الوحدات باستثناء أدوات إنشاء المصادر. يتم تحديد بعض مجموعات التدقيق واستخدامها للتحقّق من صحة مصدر الوحدة. في ما يلي القيم المحتمَلة لمجموعات lint هذه:
default
المجموعة التلقائية من أدوات التدقيق، استنادًا إلى موقع الوحدةandroid
مجموعة الوبر الأكثر صرامة التي تنطبق على كل رموز نظام Android الأساسيvendor
مجموعة مُبسّطة من أدوات فحص الأخطاء المطبَّقة على رمز المورّدnone
لتجاهل جميع التحذيرات والأخطاء المتعلقة بفحص الأخطاء
قصاصة_لينت
يتم أيضًا تشغيل أداة التدقيق clippy تلقائيًا لجميع أنواع الوحدات باستثناء أدوات إنشاء المصادر. يتمّ تحديد بضع مجموعات من أدوات التدقيق التي تُستخدَم للتحقّق من صحة مصدر الوحدة. هذه بعض الطرق المحتملة القيم التالية:
default
مجموعة تلقائية من الوبر بناءً على موقع الوحدةandroid
مجموعة الوبر الأكثر صرامة التي تنطبق على كل رموز نظام Android الأساسيvendor
مجموعة مُبسّطة من أدوات فحص الأخطاء المطبَّقة على رمز المورّدnone
لتجاهل جميع تحذيرات وأخطاء أداة Lint
إصدار
يحدد edition
الإصدار Rust للاستخدام مع
وتجميع هذه التعليمة البرمجية. وهذا مشابه لإصدارات std لـ C وC++. القيم الصالحة هي 2015
و2018
(التلقائية).
العلامة
تحتوي الدالة 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_dylib
cfg.بالنسبة إلى الوحدات التي ستستخدم ملف VNDK، سيتم ضبط cfg على
android_vndk
. وهذا مشابه لتعريف__ANDROID_VNDK__
في C++.
شريط
تتحكّم السياسة strip
في ما إذا كان تتم إزالة ملف الإخراج وطريقة إزالته (إذا كان ذلك منطبقًا).
في حال ترك هذه السياسة بدون ضبط، ستزيل وحدات الجهاز تلقائيًا كل البيانات باستثناء معلومات تصحيح الأخطاء الصغيرة.
لا تزيل الوحدات المضيفّة أي رموز تلقائيًا. تتضمن القيم الصالحة none
لإيقاف الإزالة، وall
لإزالة كل شيء، بما في ذلك المعلومات المصغّرة لتصحيح الأخطاء.
يمكن العثور على قيم إضافية في
مرجع وحدات Soong.
host_supported
بالنسبة إلى وحدات الأجهزة، تشير مَعلمة host_supported
إلى ما إذا كانت الوحدة.
أيضًا صيغة المضيف.
تحديد العناصر التابعة للمكتبة
يمكن أن تعتمد وحدات Rust على كل من الترجمة والشرح مكتبات 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 دعمًا محدودًا لكل من vendor
vendor_ramdisk
صورة ولقطة ومع ذلك، يمكن استخدام staticlibs
وcdylibs
rlibs
وbinaries
. بالنسبة إلى استهدافات إنشاء صور المورّدين، يتم ضبط السمة
android_vndk
cfg
. يمكنك استخدام هذا في التعليمات البرمجية إذا كانت هناك
الاختلافات بين أهداف النظام والمورد. rust_proc_macros
لا يتم تسجيلها
كجزء من لقطات المورّد. وإذا كنت تعتمد على هذه الإصدارات، تأكَّد من
التحكّم في الإصدارات بشكلٍ مناسب.
لا تتوفّر صور المنتجات وصور VNDK وصور الاسترداد.
الإصدارات المتزايدة
يمكن للمطوّرين تفعيل عملية الترجمة المتزايدة لمصدر Rust من خلال ضبط متغيّر البيئة SOONG_RUSTC_INCREMENTAL
على true
.
تحذير: لا يمكن ضمان أن ينتج عن ذلك إنشاء برامج ثنائية مشابهة لتلك التي تم إنشاؤها بواسطة برامج Buildbot. قد تختلف عناوين الدوال أو البيانات المضمّنة فيملفّات العناصر. لضمان أنّ العناصر التي تم إنشاؤها متطابقة بنسبة 100% مع تلك التي أنشأتها بنية EngProd الأساسية، اترك هذه القيمة غير محدّدة.