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によって自動的にリンクされます。