Rustライブラリモジュールには2つのタイプがあります。1つはRustライブラリを生成し、もう1つはC互換ライブラリを生成します。さらに、ビルドシステムの目的で、Rust手続き型マクロ( proc-macros )を特別なタイプのライブラリと見なすことができます。
rust_library
rust_libraryモジュールは、他のRustモジュールで使用するためのRustライブラリを生成します。
_hostバリアントに加えて、Rustライブラリには利用可能なリンケージを制御するモジュールタイプがあります。
| ラストライブラリモジュールタイプ | 意味 |
|---|---|
| rust_library | ライブラリバリアント、 rlibとdylibの両方を提供します。 AOSPは、 rustlibsプロパティの下に依存関係としてリストされている場合にモジュールが正しく機能できるようにするため、Rustライブラリにこのモジュールタイプを推奨します |
| rust_library_rlib | Rustライブラリのrlibバリアントのみを提供します。 rlibバリアントのみを提供するモジュールは、 rustlibsプロパティで動作することを保証できません。 |
| rust_library_dylib | Rustライブラリのdylibバリアントのみを提供します。 dylibバリアントのみを提供するモジュールは、 rustlibsプロパティで動作することを保証できません。 |
rust_ffi
rust_ffiモジュールは、CCモジュールと相互運用するためのC互換ライブラリを生成します。
_hostバリアントに加えて、Rust FFIライブラリには、次の表に示すように、使用可能なリンケージを制御するモジュールタイプがあります。
| RustFFIライブラリモジュールタイプ | 意味 |
|---|---|
| rust_ffi | 静的と共有の両方のCライブラリバリアントを提供します。 |
| rust_ffi_shared | C共有ライブラリバリアントのみを提供します。 |
| rust_ffi_static | C静的ライブラリバリアントのみを提供します。 |
CからRustを呼び出すためにrust_ffiを使用する基本的な例については、 AndroidのRustパターンのページを参照してください。
より高度な使用法については、 Rustの公式ドキュメントをご覧ください。
rust_proc_macro
Rust手続き型マクロ(proc-macros)は、コンパイラを拡張してソースコード変換を実行したり、新しい属性を提供したりする場合に役立ちます。これらの詳細については、Rustの公式ドキュメントのProceduralMacrosページを参照してください。
ビルドシステムの目的上、 rust_proc_macroモジュールはrust_libraryモジュールと同様に機能します。 rust_proc_macrosに依存するモジュールの場合、モジュール名をproc_macrosプロパティに追加します。
proc_macrosはコンパイラプラグインであるため、必然的にホストをターゲットにし、デバイスで実行されるコードを生成しません。
注目すべきRustライブラリのプロパティ
次の表で定義されているプロパティは、すべてのモジュールに適用される重要な共通プロパティに追加されます。これらは、Rustライブラリモジュールにとって特に重要であるか、 rust_libraryモジュールタイプに固有の固有の動作を示します。
| ラストライブラリのプロパティ | 意味 |
|---|---|
| 茎/名前 | stemプロパティは、出力ライブラリのファイル名を制御します。それ以外の場合は、デフォルトでnameになります。 Rustコンパイラは、ライブラリファイル名に特定の要件を課します。その結果、ビルドシステムは、コンパイルの問題を回避するためにこれらの要件を適用します。出力ファイル名は、 |
| crate_name | これは、ライブラリ生成モジュールに必須のプロパティです。さらに、出力ファイル名との関係があります。 ( stemの定義を参照してください。) |
| include_dirs | rust_ffiモジュールの場合、このプロパティは、相対インクルードパス(依存ccモジュールが使用できるヘッダーを含むパス)を表す文字列のリストを定義します。 |
rust_libraryまたはrust_ffiのリンケージ
デフォルトでは、デバイスを対象とするRustライブラリモジュールは常にlibstdに対して動的にリンクされます。ただし、ホストモジュールは常にlibstdに対して静的にリンクされます。
rustlibsの依存関係に使用されるリンケージは、ルートモジュールのリンケージ設定によって異なります。 (たとえば、 rust_binaryを持つprefer_rlibsは、 rlibsをrustlibsとしてリンクするRustライブラリバリアントを使用します。)
動的なrustライブラリ(静的実行可能ファイルなど)に依存しないルート依存関係モジュールの作成を可能にするために、 rlibsは動的および静的の両方のlibstdリンケージバリアントを提供します。正しいバリアントはSoongによって自動的にリンクされます。