Building in Android

๋‘ ๊ฐœ์˜ genrule์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” CXX ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” 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๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ด๋ฆ„ ์ง€์ • ๊ทœ์น™์€ ๊ฐ•์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.