Có 2 loại mô-đun thư viện Rust, một loại tạo thư viện Rust và một loại tạo thư viện tương thích với C. Ngoài ra, đối với mục đích của hệ thống xây dựng, bạn có thể coi macro theo quy trình Rust (proc-macros) là một loại thư viện đặc biệt.
rust_library
Mô-đun rust_library tạo thư viện Rust để các mô-đun Rust khác sử dụng.
Ngoài các biến thể _host, thư viện Rust có các loại mô-đun kiểm soát liên kết có sẵn.
| Loại mô-đun thư viện Rust | Định nghĩa |
|---|---|
| rust_library | Cung cấp cả 2 biến thể thư viện là rlib và dylib. AOSP đề xuất loại mô-đun này cho thư viện Rust, vì loại mô-đun này cho phép các mô-đun hoạt động chính xác khi được liệt kê là phần phụ thuộc trong thuộc tính rustlibs |
| rust_library_rlib | Chỉ cung cấp biến thể rlib của thư viện Rust;
không đảm bảo rằng các mô-đun chỉ cung cấp biến thể rlib sẽ hoạt động với
thuộc tính rustlibs. |
| rust_library_dylib | Chỉ cung cấp biến thể dylib của thư viện Rust; không đảm bảo rằng các mô-đun chỉ cung cấp biến thể dylib sẽ hoạt động với thuộc tính rustlibs. |
rust_ffi
Mô-đun rust_ffi tạo thư viện tương thích với C để tương tác với các mô-đun CC.
Ngoài các biến thể _host, thư viện Rust FFI có các loại mô-đun kiểm soát liên kết có sẵn, được trình bày trong bảng sau.
| Loại mô-đun thư viện Rust FFI | Định nghĩa |
|---|---|
| rust_ffi | Cung cấp cả 2 biến thể thư viện C: tĩnh và dùng chung. |
| rust_ffi_shared | Chỉ cung cấp biến thể thư viện dùng chung C. |
| rust_ffi_static | Chỉ cung cấp biến thể thư viện tĩnh C. |
Để xem ví dụ cơ bản về cách sử dụng rust_ffi để gọi Rust từ C, hãy xem trang
Mẫu Rust của Android.
Để biết thông tin về cách sử dụng nâng cao hơn, hãy truy cập vào tài liệu chính thức về Rust.
rust_proc_macro
Macro theo quy trình Rust (proc-macros) có thể hữu ích trong việc mở rộng trình biên dịch để thực hiện các phép biến đổi mã nguồn hoặc cung cấp các thuộc tính mới. Bạn có thể xem thêm thông tin về các macro này trên trang Macro theo quy trình trong tài liệu chính thức về Rust.
Đối với mục đích của hệ thống xây dựng, mô-đun rust_proc_macro hoạt động tương tự như các mô-đun rust_library. Đối với các mô-đun phụ thuộc vào rust_proc_macros,
hãy thêm tên mô-đun vào thuộc tính proc_macros.
Vì proc_macros là các trình bổ trợ trình biên dịch, nên chúng nhất thiết phải nhắm đến máy chủ và không tạo ra bất kỳ mã nào chạy trên thiết bị.
Các thuộc tính đáng chú ý của thư viện Rust
Các thuộc tính được xác định trong bảng bên dưới là ngoài các Thuộc tính chung quan trọng
áp dụng cho tất cả các mô-đun. Các thuộc tính này đặc biệt quan trọng đối với các mô-đun thư viện Rust hoặc thể hiện hành vi riêng biệt dành riêng cho loại mô-đun rust_library.
| Thuộc tính thư viện Rust | Định nghĩa |
|---|---|
| stem / name | Thuộc tính stem kiểm soát tên tệp thư viện đầu ra,
nếu không thì tên tệp này sẽ mặc định là name.
Trình biên dịch Rust áp đặt một số yêu cầu nhất định đối với tên tệp thư viện và do đó, hệ thống xây dựng sẽ thực thi các yêu cầu này để tránh các vấn đề về quá trình biên dịch.
Tên tệp đầu ra phải tuân theo định dạng |
| crate_name | Đây là thuộc tính bắt buộc đối với các mô-đun tạo thư viện;
thuộc tính này cũng có mối quan hệ với tên tệp đầu ra. (Xem định nghĩa stem.) |
| export_include_dirs | Đối với các mô-đun rust_ffi, thuộc tính này xác định danh sách các
chuỗi đại diện cho các đường dẫn bao gồm tương đối: các đường dẫn chứa tiêu đề
mà các mô-đun cc phụ thuộc có thể sử dụng. |
Liên kết của rust_library hoặc rust_ffi
Theo mặc định, các mô-đun thư viện Rust nhắm đến thiết bị luôn được liên kết động với libstd. Tuy nhiên, các mô-đun máy chủ luôn được liên kết tĩnh với libstd.
Liên kết được dùng cho các phần phụ thuộc rustlibs phụ thuộc vào tuỳ chọn liên kết của mô-đun gốc. (Ví dụ: rust_binary có prefer_rlib: true sẽ sử dụng các biến thể thư viện Rust liên kết rustlibs dưới dạng rlibs.)
Để cho phép tạo các phần phụ thuộc gốc không dựa vào bất kỳ thư viện Rust động nào (chẳng hạn như tệp thực thi tĩnh), rlibs cung cấp cả biến thể liên kết libstd động và tĩnh. Soong sẽ tự động liên kết biến thể chính xác.