在 Fuchsia 上使用貨運服務

Rust 生態系統中的許多工具都假設您使用的是 Cargo。適用於 這在建構中沒有對應項目 但可以利用 正在產生 Cargo.toml 檔案。您可以執行 Cargo 本身 (以下項目為 cargo check 執行個體)。

這項功能由志工負責維護。GN 和 Cargo 進行過設計 不相符可能會導致產生的 Cargo.toml 檔案無法運作 不需要手動調整正因如此 正式支援;有時候可能會發生故障

正在產生 Cargo.toml 個檔案

如要根據 GN 的建構圖產生 Cargo 檔案,請將 --cargo-toml-gen 新增至 fx set 指令或 //build/rust:cargo_toml_gen 目標設為 $OUT_DIR/args.gnuniverse_package_labels。這會在 gn gen 增加幾秒鐘。請務必執行 更新設定後,可以顯示完整的 fx build

fx set PRODUCT.BOARD --cargo-toml-gen <other fx args>
fx build

注意:如果需要 Cargo.toml 才能完成 fx build,例如 必須執行 cbindgen 才能為 Rust Crate 產生新的 C 繫結,您可以 而必須改用 //build/rust:cargo_toml_gen 建構目標。這個目標只會 建構 Cargo.toml 檔案

多數編輯器會要求 Cargo.toml 檔案必須位於相鄰的位置 src/ 目錄。可以使用下列指令產生這些檔案的符號連結 指令,其中 //foo/path/to/target:some_label 是您想要的 GN 目標 編輯作業:

fx gen-cargo foo/path/to/target:some_label

注意:上述方法不適用於 rustc_staticlib 目標,例如鐵鏽色 用來產生 C 繫結的 Crate 通常會使用 rustc_staticlib 目標 範本。針對 rustc_staticlib 目標,您應該改用下列指令。

fx gen-cargo foo/path/to/target:_some_label_rustc_static

請注意,這個標籤必須指向 rustc_... GN 範本 (非 Fuchsia 套件或其他 GN 目標)。例如:

rustc_binary("some_label") {
   ...
}

正在產生 .cargo/config 檔案

部分外掛程式需要 .cargo/config 檔案,才能讓 Cargo 在 Fuchsia 中正常運作 (例如執行 cargo check)。如要輕鬆產生這個檔案,請使用 fargo 工具。

  1. 安裝擴充功能
  2. 執行下列指令,將 rustup 設為使用 Fuchsia Rust 工具鍊:

    rustup toolchain link fuchsia $($FUCHSIA_DIR/scripts/youcompleteme/paths.py VSCODE_RUST_TOOLCHAIN)
    rustup default fuchsia
    
  3. 按照下列步驟在 $FUCHSIA_DIR 中複製並安裝 fargo 工具: 適用於 Fargo 的入門指南

  4. 建立設定:

    cd $FUCHSIA_DIR && fargo write-config
    # Note the caveats about changing architecture in the fargo readme
    # https://fuchsia.googlesource.com/fargo/#creating-a-cargo_config