#cranelift #codegen #rustc #github #com #reserved #back-end

rustc_codegen_cranelift

保留用于 https://github.com/bjorn3/rustc_codegen_cranelift

1 个不稳定版本

0.0.0 2019年5月26日

#63 in #cranelift

MIT/Apache

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 buildcargo run

假设$cg_clif_dir是您克隆此仓库的目录,并且您已按照说明(y.sh preparey.sh buildtest.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

许可

根据您的选择,许可为以下之一

贡献

除非您明确说明,否则您有意提交的任何贡献,在您的工作中应按上述方式双许可,无需任何额外条款或条件。

无运行时依赖