diff options
| -rw-r--r-- | flake.nix | 43 | ||||
| -rw-r--r-- | zkvms/jolt/default.nix | 16 | ||||
| -rw-r--r-- | zkvms/nexus/default.nix | 19 | ||||
| -rw-r--r-- | zkvms/risc0/default.nix | 11 | ||||
| -rw-r--r-- | zkvms/sp1/default.nix | 1 | ||||
| -rw-r--r-- | zkvms/zkm/default.nix | 13 | ||||
| -rw-r--r-- | zkvms/zkwasm/default.nix | 21 |
7 files changed, 69 insertions, 55 deletions
@@ -39,17 +39,32 @@ }; - # Overrides build and install phases for use with zkVMs + # Creates custom build and install phases + # Adds the "buildGuest" phase + # Adds the "run" pseudo-phase (running your zkVM is done with a shell script, + # this "phase" allows one to add things to the script) # Requirements: # - zkVM is inside zkvms/pname/ # - guest crate is located at zkvms/pname/guest and is named "guest" - withCustomPhases = currentPackage: with currentPackage; { + withCustomPhases = currentPackage: let + hostBin = currentPackage.hostBin or ("host-" + currentPackage.pname); + in with currentPackage; { + phases = [ + "unpackPhase" "patchPhase" "configurePhase" # Standard phases + "buildGuestPhase" # Custom phase + "buildPhase" "checkPhase" "installPhase" "fixupPhase" # Standard phases + ]; + buildGuestPhase = '' - pushd guest + pushd zkvms/${currentPackage.pname}/guest runHook preBuildGuest - cargo build --release --target ${currentPackage.guestTarget} ${currentPackage.extraGuestArgs or ""} - ln -s ../../guest/target/${currentPackage.guestTarget}/release/guest ../host/src/guest + ${currentPackage.buildGuestCommand or "cargo build --release"} \ + ${if currentPackage ? guestTarget then "--target " + currentPackage.guestTarget else ""} \ + ${currentPackage.guestExtraArgs or ""} + + ${if currentPackage ? guestTarget then "ln -s ../../guest/target/${currentPackage.guestTarget}/release/guest ../host/src/guest" else ""} + unset RUSTUP_TOOLCHAIN RUSTFLAGS CARGO_ENCODED_RUSTFLAGS runHook postBuildGuest popd @@ -59,7 +74,6 @@ export INPUTS="$PWD/Vertices-010.in" pushd zkvms/${currentPackage.pname} - runPhase buildGuestPhase runHook preBuild cargo build --bin ${hostBin} --release @@ -68,7 +82,18 @@ popd ''; - installPhase = '' + installPhase = let + preRunBinaries = + if currentPackage ? preRunBinaries && builtins.length currentPackage.preRunBinaries > 0 then + "export PATH=\"\\$PATH:" + pkgs.lib.makeBinPath currentPackage.preRunBinaries + "\"" + else + ""; + preRunLibraries = + if currentPackage ? preRunLibraries && builtins.length currentPackage.preRunLibraries > 0 then + "export LD_LIBRARY_PATH=\"\\$LD_LIBRARY_PATH:" + pkgs.lib.makeLibraryPath currentPackage.preRunLibraries + "\"" + else + ""; + in '' runHook preInstall mkdir -p "$out"/bin @@ -79,7 +104,9 @@ cat <<EOF > "$out"/bin/${pname} #!/usr/bin/env sh - ${if currentPackage ? preRun then preRun else ""} + ${preRunBinaries} + ${preRunLibraries} + ${currentPackage.preRun or ""} "$out"/bin/${hostBin} \$@ EOF chmod +x "$out"/bin/${pname} diff --git a/zkvms/jolt/default.nix b/zkvms/jolt/default.nix index 2c6399c..d0c6775 100644 --- a/zkvms/jolt/default.nix +++ b/zkvms/jolt/default.nix @@ -49,23 +49,21 @@ in sed -i '/guest\/guests/d' ./zkvms/jolt/Cargo.toml ''; - hostBin = "host-jolt"; guestTarget = "riscv32im-jolt-zkvm-elf"; - extraGuestArgs = "--features guest"; + guestExtraArgs = "--features guest"; preBuildGuest = '' - export RUSTUP_TOOLCHAIN="x" - export RUSTFLAGS="-C link-arg=-T${./guest/guest.ld} -C passes=lower-atomic -C panic=abort -C strip=symbols -C opt-level=z" + RUSTUP_TOOLCHAIN="x" + RUSTFLAGS="-C link-arg=-T${./guest/guest.ld} -C passes=lower-atomic -C panic=abort -C strip=symbols -C opt-level=z" + export RUSTUP_TOOLCHAIN RUSTFLAGS ''; - preBuild = '' - unset RUSTUP_TOOLCHAIN - export RUSTFLAGS="-Z macro-backtrace" - ''; + preRunBinaries = [ + metacraft-labs.jolt + ]; preRun = '' export ELF_PATH="$out/bin/guest" - export PATH="$PATH:${metacraft-labs.jolt}/bin" ''; doCheck = false; diff --git a/zkvms/nexus/default.nix b/zkvms/nexus/default.nix index 003edb7..e68da62 100644 --- a/zkvms/nexus/default.nix +++ b/zkvms/nexus/default.nix @@ -43,23 +43,20 @@ in ln -s ../../../../guests/graph_coloring ./zkvms/nexus/guest/src/zkp ''; - hostBin = "host-nexus"; - guestTarget = "riscv32i-unknown-none-elf"; - extraGuestArgs = "--features no_std -- -C link-arg=-T${guest/guest.ld}"; - - buildGuestPhase = '' - pushd guest + preBuildGuest = '' + export RUSTFLAGS="-C link-arg=-T${guest/guest.ld}" + ''; - cargo rustc --release --target ${guestTarget} ${extraGuestArgs} - ln -s ../../guest/target/${guestTarget}/release/guest ../host/src/guest + guestTarget = "riscv32i-unknown-none-elf"; + guestExtraArgs = "--features no_std"; - popd - ''; + preRunLibraries = [ + openssl + ]; preRun = '' export ELF_PATH="$out/bin/guest" export PKG_CONFIG_PATH='${openssl.dev}/lib/pkgconfig' # Dirty hack - export LD_LIBRARY_PATH='${lib.makeLibraryPath [ openssl ]}' ''; doCheck = false; diff --git a/zkvms/risc0/default.nix b/zkvms/risc0/default.nix index 4f43a54..2a80ece 100644 --- a/zkvms/risc0/default.nix +++ b/zkvms/risc0/default.nix @@ -40,18 +40,17 @@ in ln -s ../../../../guests/graph_coloring ./zkvms/risc0/guest/src/zkp ''; + guestTarget = "riscv32im-risc0-zkvm-elf"; + preBuild = '' # Used for verification # https://github.com/risc0/risc0/blob/881e512732eca72849b2d0e263a1242aba3158af/risc0/build/src/lib.rs#L192-L195 export GUEST_ID="$(${metacraft-labs.risc0}/bin/r0vm --elf ./host/src/guest --id)" ''; - hostBin = "host-risc0"; - guestTarget = "riscv32im-risc0-zkvm-elf"; - - preRun = '' - export PATH="\$PATH:${metacraft-labs.risc0}/bin" - ''; + preRunBinaries = [ + metacraft-labs.risc0 + ]; doCheck = false; })) diff --git a/zkvms/sp1/default.nix b/zkvms/sp1/default.nix index 9b42e58..2ab3afa 100644 --- a/zkvms/sp1/default.nix +++ b/zkvms/sp1/default.nix @@ -40,7 +40,6 @@ in ln -s ../../../../guests/graph_coloring ./zkvms/sp1/guest/src/zkp ''; - hostBin = "host-sp1"; guestTarget = "riscv32im-succinct-zkvm-elf"; doCheck = false; diff --git a/zkvms/zkm/default.nix b/zkvms/zkm/default.nix index da7224b..92abdbf 100644 --- a/zkvms/zkm/default.nix +++ b/zkvms/zkm/default.nix @@ -63,7 +63,6 @@ in ln -s ../../../../guests/graph_coloring ./zkvms/zkm/guest/src/zkp ''; - hostBin = "host-zkm"; guestTarget = "mips-zkm-zkvm-elf"; preBuildGuest = '' @@ -71,18 +70,18 @@ in export RUSTFLAGS="-C target-cpu=mips2 -C target-feature=+crt-static -C link-arg=-nostdlib -C link-arg=-g -C link-arg=--entry=main" ''; - postBuildGuest = '' - unset RUSTFLAGS - ''; - preBuild = '' - export RUSTFLAGS="-L ${zkm_libsnark}/lib $RUSTFLAGS" + export RUSTFLAGS="-L ${zkm_libsnark}/lib" ''; + preRunLibraries = [ + openssl + zkm_libsnark + ]; + preRun = '' export ELF_PATH="$out/bin/guest" export PKG_CONFIG_PATH='${openssl.dev}/lib/pkgconfig' # Dirty hack - export LD_LIBRARY_PATH='${lib.makeLibraryPath [ openssl zkm_libsnark ]}' ''; doCheck = false; diff --git a/zkvms/zkwasm/default.nix b/zkvms/zkwasm/default.nix index 4f4e42f..36c058e 100644 --- a/zkvms/zkwasm/default.nix +++ b/zkvms/zkwasm/default.nix @@ -48,30 +48,25 @@ in ln -s ../../../Cargo.lock ./zkvms/zkwasm/guest/ ''; - hostBin = "host-zkwasm"; - - buildGuestPhase = '' - pushd guest - + preBuildGuest = '' # Workaround from # https://github.com/rustwasm/wasm-pack/issues/1335 export WASM_PACK_CACHE=.wasm-pack-cache - - wasm-pack build --release --frozen - popd ''; - postInstall = '' - mv zkvms/zkwasm/guest/pkg "$out"/ - ''; + buildGuestCommand = "wasm-pack build --release --frozen"; preBuild = '' export GUEST_PATH="$out/pkg/guest_bg.wasm" ''; - preRun = '' - export PATH="\$PATH:${metacraft-labs.zkwasm}/bin" + postInstall = '' + mv zkvms/zkwasm/guest/pkg "$out"/ ''; + preRunBinaries = [ + metacraft-labs.zkwasm + ]; + doCheck = false; })) |
