risc0-build 3.0.6

RISC Zero zero-knowledge VM build tool
Documentation
Build RISC Zero zkVM guest code and provide handles to the host side.

In order for the host to execute guest code in the [RISC Zero
zkVM](https://docs.rs/risc0-zkvm), the host must be provided a compiled RISC-V
ELF file and the corresponding ImageID. This crate contains the functions needed
to take zkVM guest code, build a corresponding ELF file and ImageID, and make
the ImageID and a path to the ELF file available for the host to use.

## Using `risc0-build` to Build Guest Methods

Using this crate can be a bit delicate, so we encourage you to follow along in
our [RISC Zero Rust Starter
repository](https://github.com/risc0/risc0-rust-starter). In that repository,
`risc0-build` is used in the [`methods`
directory](https://github.com/risc0/risc0-rust-starter/tree/main/methods).

Guest methods are embedded for the host to use by calling
[embed\_methods](crate::embed_methods) (or
[embed\_methods\_with\_options](crate::embed_methods_with_options)) in a [build
script](https://doc.rust-lang.org/cargo/reference/build-scripts.html). An
example `build.rs` file would look like:

```no_run
fn main() {
    risc0_build::embed_methods();
}
```

This requires including `risc0-build` as a _build_ dependency. You will also
need add a `[package.metadata.risc0]` section to your cargo file. In this
section, put a `methods` field with a list of relative paths containing the
guest code. For example, if your guest code is in the `guest` directory,
then `Cargo.toml` might include:

```toml
[build-dependencies]
risc0-build = "0.17"

[package.metadata.risc0]
methods = ["guest"]
```

This builds a file `methods.rs` in your cargo output directory which you
must then include for the host to use. For example, you might make a file
`src/lib.rs` containing:

```text
include!(concat!(env!("OUT_DIR"), "/methods.rs"));
```

This process will generate an image ID (`*_ID`) and the contents of an ELF
file (`*_ELF`). The names will be derived from the name of the ELF
binary, which will be converted to ALL\_CAPS to comply with Rust naming
conventions. Thus, if a method binary is named `multiply`, the image ID
will be named `methods::MULTIPLY_ID` and the contents of the ELF file will
be named `methods::MULTIPLY_ELF`. These are included at the beginning
of the host-side code:

```text
use methods::{MULTIPLY_ELF, MULTIPLY_ID};
```