1 个不稳定版本
0.0.0 | 2019年5月26日 |
---|
#63 in #cranelift
2KB
Cranelift 为 Rust 编译器提供的代码生成后端
本项目的目标是创建一个基于 Cranelift 的 Rust 编译器代码生成后端替代方案。这有可能在调试模式下提高编译时间。如果你的项目没有使用“尚未支持”部分列出的任何内容,它应该可以正常工作。如果不可以,请提出问题。
使用 Rustup 下载
Cranelift 代码生成后端在 Linux 和 x86_64 macOS 的夜间构建中分发。如果你想要使用 Rustup 安装它,可以通过运行以下命令实现:
$ rustup component add rustc-codegen-cranelift-preview --toolchain nightly
安装完成后,你可以通过以下方法之一启用它:
CARGO_PROFILE_DEV_CODEGEN_BACKEND=cranelift cargo+nightly build-Zcodegen-backend
RUSTFLAGS="-Zcodegen-backend=cranelift" cargo+nightly build
- 将以下内容添加到
.cargo/config.toml
[unstable] codegen-backend = true [profile.dev] codegen-backend = "cranelift"
- 将以下内容添加到
Cargo.toml
# This line needs to come before anything else in Cargo.toml cargo-features = ["codegen-backend"] [profile.dev] codegen-backend = "cranelift"
预编译构建
您还可以从 发布 页面下载预构建版本。将存档中的 dist
目录解压缩到您想要的位置。如果您想使用 cargo clif build
而不是指定 cargo-clif
可执行文件的完整路径,您可以将解压缩的 dist
目录的 bin
子目录添加到您的 PATH
。 (教程 for Windows,和 for Linux/MacOS).
构建和测试
如果您想手动构建后端,可以从 GitHub 下载它并自行构建。
$ git clone https://github.com/rust-lang/rustc_codegen_cranelift
$ cd rustc_codegen_cranelift
$ ./y.sh prepare
$ ./y.sh build
要运行测试套件,将最后一个命令替换为:
$ ./test.sh
有关如何构建和测试的更多文档,请参阅 build_system/usage.txt 或 ./y.sh
的帮助信息。
平台支持
OS \ 架构 | x86_64 | AArch64 | Riscv64 | s390x (System-Z) |
---|---|---|---|---|
Linux | ✅ | ✅ | ✅[^no-rustup] | ✅[^no-rustup] |
FreeBSD | ✅[^no-rustup] | ❓ | ❓ | ❓ |
AIX | ❌[^xcoff] | N/A | N/A | ❌[^xcoff] |
其他 Unix 系统 | ❓ | ❓ | ❓ | ❓ |
macOS | ✅ | ✅[^no-rustup] | N/A | N/A |
Windows | ✅[^no-rustup] | ❌ | N/A | N/A |
✅: 完全支持并经过测试 ❓: 可能支持,但未测试 ❌: 完全不支持
并非所有目标都作为 rustup 组件在夜间版本中可用。请参阅平台支持矩阵中的注释。
[^xcoff]: 不支持 XCOFF 对象文件格式。[^no-rustup]: 作为 rustup 组件在夜间版本中不可用。您可以自行构建。
用法
rustc_codegen_cranelift可以用作现有项目的近似即插即用替换,用于cargo build
或cargo run
。
假设$cg_clif_dir
是您克隆此仓库的目录,并且您已按照说明(y.sh prepare
和y.sh build
或test.sh
)进行。
在包含您的项目目录中(您可以在这里执行常规的cargo build
),运行
$ $cg_clif_dir/dist/cargo-clif build
这将使用rustc_codegen_cranelift而不是常规的LLVM后端构建您的项目。
有关使用rustc_codegen_cranelift的更多方式,如JIT模式,请参阅usage.md。
使用rustc代码更改进行构建和测试
请参阅rustc_testing.md。
尚未支持
- 向量指令(此处跟踪,
std::simd
完全支持,std::arch
部分支持) - 恐慌时的展开(无cranelift支持,默认启用
-Cpanic=abort
)
许可
根据您的选择,许可为以下之一
- Apache License,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或https://open-source.org.cn/licenses/MIT)
。
贡献
除非您明确说明,否则您有意提交的任何贡献,在您的工作中应按上述方式双许可,无需任何额外条款或条件。