Ada dua jenis modul library Rust, satu yang menghasilkan library Rust dan satu yang menghasilkan library yang kompatibel dengan C. Selain itu, untuk tujuan sistem build, Anda dapat menganggap makro prosedural Rust (proc-macros
) sebagai jenis library khusus.
rust_library
Modul rust_library
menghasilkan library Rust untuk digunakan oleh modul Rust lainnya.
Selain varian _host
, library Rust memiliki jenis modul yang mengontrol
penautan yang tersedia.
Jenis Modul Library Rust | Definisi |
---|---|
rust_library | Menyediakan kedua varian library, rlib dan dylib . AOSP merekomendasikan jenis modul ini untuk library Rust, karena memungkinkan modul berfungsi dengan benar saat dicantumkan sebagai dependensi di properti rustlibs |
rust_library_rlib | Hanya menyediakan varian rlib dari library Rust;
modul yang hanya menyediakan varian rlib tidak dapat dijamin berfungsi dengan properti rustlibs . |
rust_library_dylib | Hanya menyediakan varian dylib dari library Rust;
modul yang hanya menyediakan varian dylib tidak dapat dijamin
berfungsi dengan properti rustlibs . |
rust_ffi
Modul rust_ffi
menghasilkan library yang kompatibel dengan C untuk beroperasi dengan modul CC.
Selain varian _host
, library FFI Rust memiliki jenis modul yang mengontrol penautan yang tersedia, seperti yang ditunjukkan dalam tabel berikut.
Jenis Modul Library FFI Rust | Definisi |
---|---|
rust_ffi | Menyediakan varian library C: statis dan bersama. |
rust_ffi_shared | Hanya menyediakan varian library bersama C. |
rust_ffi_static | Hanya menyediakan varian library statis C. |
Untuk contoh dasar penggunaan rust_ffi
untuk memanggil Rust dari C, lihat halaman
Pola Rust Android.
Untuk mengetahui informasi tentang penggunaan yang lebih canggih, buka dokumentasi Rust resmi.
rust_proc_macro
Makro prosedural (proc-macro) Rust dapat berguna untuk memperluas compiler agar dapat melakukan transformasi kode sumber atau menyediakan atribut baru. Informasi selengkapnya dapat ditemukan di halaman Procedural Macros dalam dokumentasi Rust resmi.
Untuk tujuan sistem build, modul rust_proc_macro
berfungsi serupa dengan modul rust_library
. Untuk modul yang bergantung pada rust_proc_macros
,
tambahkan nama modul ke properti proc_macros
.
Karena proc_macros
adalah plugin compiler, proc_macros
harus menargetkan host dan tidak menghasilkan kode apa pun yang akan berjalan di perangkat.
Properti library Rust yang penting
Properti yang ditentukan dalam tabel di bawah ini merupakan tambahan dari Properti umum penting
yang berlaku untuk semua modul. Hal ini sangat penting untuk modul library Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_library
.
Properti Library Rust | Definisi |
---|---|
stem / name | Properti stem mengontrol nama file library output,
yang secara default adalah name .
Compiler Rust memberlakukan persyaratan tertentu pada nama file library, dan sebagai hasilnya, sistem build memberlakukan persyaratan ini untuk menghindari masalah kompilasi.
Nama file output harus sesuai dengan format |
crate_name | Ini adalah properti wajib untuk modul yang menghasilkan library;
properti ini juga memiliki hubungan dengan nama file output. (Lihat definisi stem .) |
export_include_dirs | Untuk modul rust_ffi , properti ini menentukan daftar
string yang merepresentasikan jalur include relatif: jalur yang berisi header
yang dapat digunakan oleh modul cc dependen. |
Penautan rust_library atau rust_ffi
Secara default, modul library Rust yang menargetkan perangkat selalu ditautkan secara dinamis
terhadap libstd
. Namun, modul host selalu ditautkan secara statis
terhadap libstd
.
Penautan yang digunakan untuk dependensi rustlibs
bergantung pada preferensi penautan modul root. (Misalnya, rust_binary
dengan prefer_rlib: true
akan
menggunakan varian library Rust yang menautkan rustlibs
sebagai rlibs
.)
Untuk memungkinkan produksi modul dependensi root yang tidak bergantung pada library Rust dinamis (seperti executable statis), rlibs
menyediakan varian penautan libstd
dinamis dan statis. Varian yang benar akan otomatis ditautkan oleh
Soong.