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 mempertimbangkan 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 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 berinteroperasi dengan modul CC.
Selain varian _host
, library Rust FFI memiliki jenis modul yang
mengontrol penautan yang tersedia, yang ditampilkan 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 informasi tentang penggunaan lanjutan, buka dokumentasi Rust resmi.
rust_proc_macro
Makro prosedural Rust (proc-macros) dapat berguna untuk memperluas compiler guna melakukan transformasi kode sumber atau memberikan atribut baru. Informasi selengkapnya dapat ditemukan di halaman Makro Prosedural dalam dokumentasi Rust resmi.
Untuk tujuan sistem build, modul rust_proc_macro
berfungsi mirip
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, plugin tersebut harus menargetkan host dan tidak
memproduksi kode apa pun yang akan berjalan di perangkat.
Properti library Rust yang penting
Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari Properti umum yang 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 ditetapkan ke name .
Compiler Rust menerapkan persyaratan tertentu pada nama file library, dan sebagai
akibatnya, sistem build menerapkan persyaratan ini untuk menghindari masalah kompilasi.
Nama file output harus sesuai dengan format |
crate_name | Ini adalah properti yang diperlukan 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 mewakili jalur penyertaan relatif: jalur yang berisi header
yang dapat digunakan modul cc dependen. |
Penautan rust_library atau rust_ffi
Secara default, modul library Rust yang menargetkan perangkat selalu ditautkan secara dinamis
dengan libstd
. Namun, modul host selalu ditautkan secara statis
dengan 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 file yang dapat dieksekusi statis), rlibs
menyediakan varian penautan libstd
dinamis dan statis. Varian yang benar akan otomatis ditautkan oleh
Soong.