-# WIP Cranelift codegen backend for rust
-
-> ⚠⚠⚠ Certain kinds of FFI don't work yet. ⚠⚠⚠
+# Cranelift codegen backend for rust
The 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).
This has the potential to improve compilation times in debug mode.
Assuming `$cg_clif_dir` is the directory you cloned this repo into and you followed the instructions (`prepare.sh` and `build.sh` or `test.sh`).
-### Cargo
-
In the directory with your project (where you can do the usual `cargo build`), run:
```bash
-$ $cg_clif_dir/build/cargo.sh run
-```
-
-This should build and run your project with rustc_codegen_cranelift instead of the usual LLVM backend.
-
-### Rustc
-
-> You should prefer using the Cargo method.
-
-```bash
-$ $cg_clif_dir/build/bin/cg_clif my_crate.rs
+$ $cg_clif_dir/build/cargo.sh build
```
-### Jit mode
-
-In jit mode cg_clif will immediately execute your code without creating an executable file.
+This will build your project with rustc_codegen_cranelift instead of the usual LLVM backend.
-> This requires all dependencies to be available as dynamic library.
-> The jit mode will probably need cargo integration to make this possible.
+For additional ways to use rustc_codegen_cranelift like the JIT mode see [usage.md](docs/usage.md).
-```bash
-$ $cg_clif_dir/build/cargo.sh jit
-```
+## Configuration
-or
-
-```bash
-$ $cg_clif_dir/build/bin/cg_clif --jit my_crate.rs
-```
+See the documentation on the `BackendConfig` struct in [config.rs](src/config.rs) for all
+configuration options.
-### Shell
+## Not yet supported
-These are a few functions that allow you to easily run rust code from the shell using cg_clif as jit.
+* Inline assembly ([no cranelift support](https://github.com/bytecodealliance/wasmtime/issues/1041))
+ * On Linux there is support for invoking an external assembler for `global_asm!` and `asm!`.
+ `llvm_asm!` will remain unimplemented forever. `asm!` doesn't yet support reg classes. You
+ have to specify specific registers instead.
+* SIMD ([tracked here](https://github.com/bjorn3/rustc_codegen_cranelift/issues/171), some basic things work)
-```bash
-function jit_naked() {
- echo "$@" | $cg_clif_dir/build/bin/cg_clif - --jit
-}
+## License
-function jit() {
- jit_naked "fn main() { $@ }"
-}
+Licensed under either of
-function jit_calc() {
- jit 'println!("0x{:x}", ' $@ ');';
-}
-```
+ * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
+ http://www.apache.org/licenses/LICENSE-2.0)
+ * MIT license ([LICENSE-MIT](LICENSE-MIT) or
+ http://opensource.org/licenses/MIT)
-## Env vars
+at your option.
-[see env_vars.md](docs/env_vars.md)
+### Contribution
-## Not yet supported
-
-* Good non-rust abi support ([several problems](https://github.com/bjorn3/rustc_codegen_cranelift/issues/10))
-* Inline assembly ([no cranelift support](https://github.com/bytecodealliance/wasmtime/issues/1041)
- * On Linux there is support for invoking an external assembler for `global_asm!` and `asm!`.
- `llvm_asm!` will remain unimplemented forever. `asm!` doesn't yet support reg classes. You
- have to specify specific registers instead.
-* SIMD ([tracked here](https://github.com/bjorn3/rustc_codegen_cranelift/issues/171), some basic things work)
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in the work by you shall be dual licensed as above, without any
+additional terms or conditions.