如何构建 Mac Catalyst / x86_64-apple-ios-macabi?

How do I build for Mac Catalyst / x86_64-apple-ios-macabi?

rustup target list --toolchain nightly 的输出不包含 x86_64-apple-ios-macabi,即使它在 the Rust master branch 上的 src/librustc_target 中。

如何构建 Mac Catalyst / x86_64-apple-ios-macabi

x86_64-apple-ios-macabi 目标在夜间 (5c5b8afd8 2019-11-16) 编译器上可用。仅仅因为目标可用并不意味着标准库和朋友已编译或可用于 rustup:

% rustc +nightly --print target-list | grep macabi
x86_64-apple-ios-macabi

Rust 有一个 tier system (which is the subject of a proposed RFC)。这个目标太新了,它甚至没有列在层级列表中,但它无疑将成为层级 3。层级 2.5 说(强调我的):

Tier 2.5 platforms can be thought of as "guaranteed to build", but without builds available through rustup

同时,您需要从源代码构建您自己的 libcore / libstd。我没有时间也没有能力实际测试编译是否有效,但这些选择是一般的起始路径:

构建标准

不稳定的-Z build-std标志可用于构建标准库:

% cargo +nightly build -Z build-std --target x86_64-apple-ios-macabi

Xargo

可以使用 xargo 工具构建标准库。

% rustup override set nightly
info: using existing install for 'nightly-x86_64-apple-darwin'
info: override toolchain for '/private/tmp/example' set to 'nightly-x86_64-apple-darwin'

  nightly-x86_64-apple-darwin unchanged - rustc 1.41.0-nightly (5c5b8afd8 2019-11-16)

% cat > Xargo.toml
[target.x86_64-apple-ios-macabi.dependencies.std]
# features = ["jemalloc"] # Whatever is appropriate

% xargo build --target x86_64-apple-ios-macabi
# Iterate until libcore and libstd compile and work for your platform

是正确的。详细来说,你必须:

  • 安装 Xargo:
cargo install xargo
  • cd 在你的项目中

  • 使用夜间构建:

rustup override set nightly
  • 创建 Xargo.toml 文件,内容为:
[target.x86_64-apple-ios-macabi.dependencies.std]
  • 在您的项目 Cargo.toml 中,确保 [profile.release] 部分包含 panic = "abort"。如果没有,请添加。

  • 构建项目时,使用xargo代替cargo

如果你安装了旧的 Rust,你可能需要每晚删除旧的(或者至少对我来说它不能每晚更新):

rustup toolchain remove nightly
rustup update
rustup toolchain install nightly

Shepmaster 的回答有点过时了。 Cargo 现在支持 -Zbuild-std 命令。使用它,您可以定位 rustc 本身支持的任何目标,即使它们未在 rustup +nightly target list 中列出。只需:

rustc +nightly --print target-list

cargo +nightly build -Z build-std --target x86_64-apple-ios-macabi

现在应该够了。您不再需要 xargo 来构建标准库。