ماژول های کتابخانه

دو نوع ماژول کتابخانه Rust وجود دارد، یکی که کتابخانه های Rust را تولید می کند و دیگری که کتابخانه های سازگار با C تولید می کند. علاوه بر این، برای اهداف ساخت سیستم می‌توانید ماکروهای رویه‌ای Rust ( proc-macros ) را به عنوان یک نوع کتابخانه خاص در نظر بگیرید.

rust_library

ماژول rust_library کتابخانه های Rust را برای استفاده توسط سایر ماژول های Rust تولید می کند.

علاوه بر انواع _host ، کتابخانه های Rust دارای انواع ماژول هایی هستند که پیوند موجود را کنترل می کنند.

نوع ماژول کتابخانه 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، صفحه الگوهای زنگ اندروید را ببینید.

برای اطلاعات در مورد استفاده پیشرفته تر، از مستندات رسمی Rust دیدن کنید.

rust_proc_macro

ماکروهای رویه‌ای Rust (proc-macros) می‌توانند برای گسترش کامپایلر برای انجام تبدیل کد منبع یا ارائه ویژگی‌های جدید مفید باشند. اطلاعات بیشتر در مورد آنها را می توانید در صفحه ماکروهای رویه ای اسناد رسمی Rust بیابید.

برای اهداف سیستم ساخت، ماژول rust_proc_macro مشابه ماژول های rust_library کار می کند. برای ماژول هایی که به rust_proc_macros وابسته هستند، نام ماژول را به ویژگی proc_macros اضافه کنید.

از آنجایی که proc_macros افزونه های کامپایلر هستند، لزوماً میزبان را هدف قرار می دهند و هیچ کدی را تولید نمی کنند که روی دستگاه اجرا شود.

ویژگی های قابل توجه کتابخانه Rust

ویژگی های تعریف شده در جدول زیر علاوه بر ویژگی های مشترک مهم مهم است که برای همه ماژول ها اعمال می شود. اینها یا به ویژه برای ماژول های کتابخانه Rust مهم هستند، یا رفتار منحصر به فرد مخصوص نوع ماژول rust_library را نشان می دهند.

ویژگی های کتابخانه Rust تعریف
ساقه / نام ویژگی stem نام فایل کتابخانه خروجی را کنترل می کند که در غیر این صورت به طور پیش فرض name می شود.

کامپایلر Rust الزامات خاصی را بر روی نام فایل های کتابخانه اعمال می کند و در نتیجه سیستم ساخت این الزامات را برای جلوگیری از مشکلات کامپایل اعمال می کند. نام فایل خروجی باید با فرمت lib<crate_name><suffix> مطابقت داشته باشد. (در اینجا یک وابستگی به ویژگی crate_name وجود دارد).

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 پیوند داده می شود.