Modul library

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 sesuai prosedur Rust (proc-macros) sebagai jenis library khusus.

{i>rust_library<i}

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 tercantum sebagai dependensi di bawah 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 melakukan interoperabilitas dengan modul CC.

Selain varian _host, library FFI Rust 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 guna memanggil Rust dari C, lihat halaman Pola Android Rust.

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 Prosedur 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 merupakan tambahan untuk Properti umum penting yang berlaku untuk semua modul. Keduanya sangat penting untuk modul library Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_library.

Properti Rust Library Definisi
stem / nama 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 lib<crate_name><suffix>. (Ada dependensi di sini pada properti crate_name).

crate_name Ini adalah properti wajib untuk modul penghasil 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.

Tautan dari rust_library atau rust_ffi

Secara default, modul library Rust yang menargetkan perangkat selalu ditautkan secara dinamis ke 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.