diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-03-27 13:25:05 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-04-04 11:03:00 +0300 |
| commit | a30b4022fa85320806b8b4d004ea713b68df6566 (patch) | |
| tree | dae482b317a9fb331c2ddf3a831d55bd754d5649 /zkvms/risc0/guest_elf_patch | |
| parent | 696e6041a88f2ed5d0d3a699a7af55252ecba1ca (diff) | |
| download | zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar.gz zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.zip | |
feat(zkvms/risc0): Implement elf encoding
Recently, RISC0 have added code to their SDK which adds magic bytes to
the (already compiled) ELF. Since we're taking another route than
intended, we'll need to replicate this step too.
We're doing things in a different fashion, because their SDK normally
compiles the guest, and doesn't allow you to supply a prebuilt ELF.
Diffstat (limited to 'zkvms/risc0/guest_elf_patch')
| -rw-r--r-- | zkvms/risc0/guest_elf_patch/Cargo.toml | 9 | ||||
| -rw-r--r-- | zkvms/risc0/guest_elf_patch/src/main.rs | 11 |
2 files changed, 20 insertions, 0 deletions
diff --git a/zkvms/risc0/guest_elf_patch/Cargo.toml b/zkvms/risc0/guest_elf_patch/Cargo.toml new file mode 100644 index 0000000..2008faf --- /dev/null +++ b/zkvms/risc0/guest_elf_patch/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "guest-elf-patch-risc0" +version = "0.1.0" +edition = "2021" + +[dependencies] +risc0-binfmt = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/binfmt" } +risc0-zkos-v1compat = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/zkos/v1compat" } +bytemuck_derive = "<1.9.0" diff --git a/zkvms/risc0/guest_elf_patch/src/main.rs b/zkvms/risc0/guest_elf_patch/src/main.rs new file mode 100644 index 0000000..6999ab4 --- /dev/null +++ b/zkvms/risc0/guest_elf_patch/src/main.rs @@ -0,0 +1,11 @@ +use risc0_binfmt::ProgramBinary; +use risc0_zkos_v1compat::V1COMPAT_ELF; + +static ELF: &[u8] = include_bytes!("../../host/src/guest"); + +// https://github.com/risc0/risc0/blob/fee2e19a3c49b3da492403de5e2d011c890e52de/risc0/build/src/lib.rs#L179-L187 +fn main() { + let binary = ProgramBinary::new(&ELF, V1COMPAT_ELF); + let elf = binary.encode(); + std::fs::write("../host/src/guest", &elf).expect("couldn't add magic bytes to elf!"); +} |
