]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_codegen_cranelift/Readme.md
New upstream version 1.65.0+dfsg1
[rustc.git] / compiler / rustc_codegen_cranelift / Readme.md
CommitLineData
5869c6ff 1# Cranelift codegen backend for rust
29967ef6 2
5869c6ff 3The goal of this project is to create an alternative codegen backend for the rust compiler based on [Cranelift](https://github.com/bytecodealliance/wasmtime/blob/main/cranelift).
29967ef6
XL
4This has the potential to improve compilation times in debug mode.
5If your project doesn't use any of the things listed under "Not yet supported", it should work fine.
6If not please open an issue.
7
8## Building and testing
9
10```bash
11$ git clone https://github.com/bjorn3/rustc_codegen_cranelift.git
12$ cd rustc_codegen_cranelift
136023e0
XL
13$ ./y.rs prepare # download and patch sysroot src and install hyperfine for benchmarking
14$ ./y.rs build
29967ef6
XL
15```
16
17To run the test suite replace the last command with:
18
19```bash
20$ ./test.sh
21```
22
136023e0 23This will implicitly build cg_clif too. Both `y.rs build` and `test.sh` accept a `--debug` argument to
29967ef6
XL
24build in debug mode.
25
26Alternatively you can download a pre built version from [GHA]. It is listed in the artifacts section
27of workflow runs. Unfortunately due to GHA restrictions you need to be logged in to access it.
28
29[GHA]: https://github.com/bjorn3/rustc_codegen_cranelift/actions?query=branch%3Amaster+event%3Apush+is%3Asuccess
30
31## Usage
32
33rustc_codegen_cranelift can be used as a near-drop-in replacement for `cargo build` or `cargo run` for existing projects.
34
136023e0 35Assuming `$cg_clif_dir` is the directory you cloned this repo into and you followed the instructions (`y.rs prepare` and `y.rs build` or `test.sh`).
29967ef6 36
29967ef6
XL
37In the directory with your project (where you can do the usual `cargo build`), run:
38
39```bash
a2a8927a 40$ $cg_clif_dir/build/cargo-clif build
29967ef6
XL
41```
42
cdc7bbd5 43This will build your project with rustc_codegen_cranelift instead of the usual LLVM backend.
29967ef6 44
cdc7bbd5 45For additional ways to use rustc_codegen_cranelift like the JIT mode see [usage.md](docs/usage.md).
29967ef6 46
17df50a5 47## Configuration
29967ef6 48
17df50a5
XL
49See the documentation on the `BackendConfig` struct in [config.rs](src/config.rs) for all
50configuration options.
29967ef6
XL
51
52## Not yet supported
53
5869c6ff 54* Inline assembly ([no cranelift support](https://github.com/bytecodealliance/wasmtime/issues/1041))
f2b60f7d 55 * On UNIX there is support for invoking an external assembler for `global_asm!` and `asm!`.
29967ef6 56* SIMD ([tracked here](https://github.com/bjorn3/rustc_codegen_cranelift/issues/171), some basic things work)
cdc7bbd5
XL
57
58## License
59
60Licensed under either of
61
62 * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
63 http://www.apache.org/licenses/LICENSE-2.0)
64 * MIT license ([LICENSE-MIT](LICENSE-MIT) or
65 http://opensource.org/licenses/MIT)
66
67at your option.
68
69### Contribution
70
71Unless you explicitly state otherwise, any contribution intentionally submitted
72for inclusion in the work by you shall be dual licensed as above, without any
73additional terms or conditions.