Building in Android

genrule を 2 つ作成します。1 つは CXX ヘッダーの生成用、もう 1 つは CXX ソースファイルの生成用です。これらは cc_library_static への入力として使用されます。

// lib.rs にある Rustからエクスポートされた関数に対する
// C++ バインディングを含む C++ ヘッダーを生成します。
genrule {
    name: "libcxx_test_bridge_header",
    tools: ["cxxbridge"],
    cmd: "$(location cxxbridge) $(in) --header > $(out)",
    srcs: ["lib.rs"],
    out: ["lib.rs.h"],
}

// Rust が呼び出す C++ コードを生成します。
genrule {
    name: "libcxx_test_bridge_code",
    tools: ["cxxbridge"],
    cmd: "$(location cxxbridge) $(in) > $(out)",
    srcs: ["lib.rs"],
    out: ["lib.rs.cc"],
}
  • cxxbridge ツールは、ブリッジ モジュールの C++ 側を生成するスタンドアロン ツールです。Android に組み込まれており、Soong ツールとして利用できます。
  • 慣例として、Rust ソースファイルが lib.rs の場合、ヘッダー ファイルの名前は lib.rs.h、ソースファイルの名前は lib.rs.cc となります。ただし、この命名規則は強制ではありません。