aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-02-26 13:27:18 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-02-26 17:10:12 +0200
commitc92624c518609245340df6c3afb919ff6f0ecd29 (patch)
tree1c6bb7f33362980b39423bc8a42b9c6a50333658
parentaaedf9d730179082f6e9c6f15682390d3eb2dba2 (diff)
downloadzkVMs-benchmarks-c92624c518609245340df6c3afb919ff6f0ecd29.tar
zkVMs-benchmarks-c92624c518609245340df6c3afb919ff6f0ecd29.tar.gz
zkVMs-benchmarks-c92624c518609245340df6c3afb919ff6f0ecd29.zip
feat(zkvmLib): Add ability to stop compilation and execution of certain zkVMs with guests
You need to add a ".no_zkvm" file in the guests/guest/ directory for your guest and zkvm. You may add details on why the zkVM is not supported inside the file itself, but it is not mandatory.
-rw-r--r--zkvmLib.nix235
1 files changed, 127 insertions, 108 deletions
diff --git a/zkvmLib.nix b/zkvmLib.nix
index 74eb855..686071d 100644
--- a/zkvmLib.nix
+++ b/zkvmLib.nix
@@ -96,128 +96,147 @@ pkgs: guest: let
{ }));
};
-in {
- buildDepsOnly = craneLib: args: let
- cargoLocks = generateCargoLocks craneLib args;
- in craneLib.buildDepsOnly (cargoLocks // (builtins.removeAttrs args ["overrideVendorCargoPackage" "overrideVendorGitCheckout"]) // {
- postUnpack = ''
- ${args.postUnpack or ""}
- ln -s ../../../guests ./source/zkvms/${args.pname}/guest/
- ln -s ../../../guests_macro ./source/zkvms/${args.pname}/guest/
-
- cp '${cargoLocks.cargoLockDrv}/Cargo.lock' ./source/zkvms/${args.pname}/guest/Cargo.lock
- chmod +w ./source/zkvms/${args.pname}/guest/Cargo.lock
- '';
+in
+{
+ buildDepsOnly = craneLib: args: if builtins.pathExists ./guests/${guest}/.no_${args.pname} then
+ { }
+ else let
+ cargoLocks = generateCargoLocks craneLib args;
+ in craneLib.buildDepsOnly (cargoLocks // (builtins.removeAttrs args ["overrideVendorCargoPackage" "overrideVendorGitCheckout"]) // {
+ postUnpack = ''
+ ${args.postUnpack or ""}
+ ln -s ../../../guests ./source/zkvms/${args.pname}/guest/
+ ln -s ../../../guests_macro ./source/zkvms/${args.pname}/guest/
+
+ cp '${cargoLocks.cargoLockDrv}/Cargo.lock' ./source/zkvms/${args.pname}/guest/Cargo.lock
+ chmod +w ./source/zkvms/${args.pname}/guest/Cargo.lock
+ '';
- preBuild = ''
- ${args.preBuild or ""}
- cd zkvms/${args.pname}/guest
- cargo check --release --offline --all-targets
- '';
- } // {
- pname = "${args.pname}_${guest}";
- });
-
- buildPackage = craneLib: args: let
- pname = "${args.pname}_${guest}";
- cargoLocks = generateCargoLocks craneLib args;
- in craneLib.buildPackage (cargoLocks // {
- phases = [
- "unpackPhase" "patchPhase" "configurePhase" # Standard phases
- "cargoSetupGuest" "buildGuestPhase" # Custom phases
- "buildPhase" "checkPhase" "installPhase" "fixupPhase" # Standard phases
- ];
-
- cargoSetupGuest = let
- appended = ''
- [features]
- guest = [] # Only used in jolt
- no_std = ["zkp/no_std"]
- ${args.pname} = ["zkp/${args.pname}"]
- '';
- in ''
- pushd zkvms/${args.pname}/guest
+ preBuild = ''
+ ${args.preBuild or ""}
+ cd zkvms/${args.pname}/guest
+ cargo check --release --offline --all-targets
+ '';
+ } // {
+ pname = "${args.pname}_${guest}";
+ });
+
+ buildPackage = craneLib: args: if builtins.pathExists ./guests/${guest}/.no_${args.pname} then
+ pkgs.writeShellApplication {
+ name = "${args.pname}_${guest}";
+
+ text = let
+ contents = builtins.readFile ./guests/${guest}/.no_${args.pname};
+ in ''
+ echo 'Guest program "${guest}" has blacklisted ${args.pname} zkVM!'
+
+ '' + (if builtins.stringLength contents > 1 then ''
+ echo
+ echo 'Reason:'
+ echo '${contents}'
+ '' else ''
+ '');
+ }
+ else let
+ pname = "${args.pname}_${guest}";
+ cargoLocks = generateCargoLocks craneLib args;
+ in craneLib.buildPackage (cargoLocks // {
+ phases = [
+ "unpackPhase" "patchPhase" "configurePhase" # Standard phases
+ "cargoSetupGuest" "buildGuestPhase" # Custom phases
+ "buildPhase" "checkPhase" "installPhase" "fixupPhase" # Standard phases
+ ];
+
+ cargoSetupGuest = let
+ appended = ''
+ [features]
+ guest = [] # Only used in jolt
+ no_std = ["zkp/no_std"]
+ ${args.pname} = ["zkp/${args.pname}"]
+ '';
+ in ''
+ pushd zkvms/${args.pname}/guest
- cp '${cargoLocks.cargoLockDrv}/Cargo.lock' Cargo.lock
- cargo add --path "../../../guests/${guest}" --rename zkp --offline
- echo '${appended}' >> Cargo.toml
+ cp '${cargoLocks.cargoLockDrv}/Cargo.lock' Cargo.lock
+ cargo add --path "../../../guests/${guest}" --rename zkp --offline
+ echo '${appended}' >> Cargo.toml
- popd
- '';
+ popd
+ '';
- buildGuestPhase = ''
- export INPUTS_DIR="$PWD/guests/${guest}"
- export ZKVM="${args.pname}" GUEST="${guest}"
- OLD_PATH="$PATH"
+ buildGuestPhase = ''
+ export INPUTS_DIR="$PWD/guests/${guest}"
+ export ZKVM="${args.pname}" GUEST="${guest}"
+ OLD_PATH="$PATH"
- ${if args ? guestToolchain then "export PATH=\"${args.guestToolchain}/bin:$PATH\"" else ""}
+ ${if args ? guestToolchain then "export PATH=\"${args.guestToolchain}/bin:$PATH\"" else ""}
- pushd zkvms/${args.pname}/guest
- runHook preBuildGuest
+ pushd zkvms/${args.pname}/guest
+ runHook preBuildGuest
- ${args.buildGuestCommand or "cargo build --release --features ${args.pname}"} \
- ${if args ? guestTarget then "--target " + args.guestTarget else ""} \
- ${args.guestExtraArgs or ""}
+ ${args.buildGuestCommand or "cargo build --release --features ${args.pname}"} \
+ ${if args ? guestTarget then "--target " + args.guestTarget else ""} \
+ ${args.guestExtraArgs or ""}
- ${if args ? guestTarget then "ln -s ../../guest/target/${args.guestTarget}/release/guest ../host/src/guest" else ""}
- unset RUSTUP_TOOLCHAIN RUSTFLAGS CARGO_ENCODED_RUSTFLAGS
- export PATH="$OLD_PATH"
+ ${if args ? guestTarget then "ln -s ../../guest/target/${args.guestTarget}/release/guest ../host/src/guest" else ""}
+ unset RUSTUP_TOOLCHAIN RUSTFLAGS CARGO_ENCODED_RUSTFLAGS
+ export PATH="$OLD_PATH"
- runHook postBuildGuest
- popd
- '';
+ runHook postBuildGuest
+ popd
+ '';
- buildPhase = ''
- export INPUTS_DIR="$PWD/guests/${guest}"
- export ZKVM="${args.pname}" GUEST="${guest}"
- OLD_PATH="$PATH"
+ buildPhase = ''
+ export INPUTS_DIR="$PWD/guests/${guest}"
+ export ZKVM="${args.pname}" GUEST="${guest}"
+ OLD_PATH="$PATH"
- ${if args ? hostToolchain then "export PATH=\"${args.hostToolchain}/bin:$PATH\"" else ""}
+ ${if args ? hostToolchain then "export PATH=\"${args.hostToolchain}/bin:$PATH\"" else ""}
- pushd zkvms/${args.pname}/host
- runHook preBuild
+ pushd zkvms/${args.pname}/host
+ runHook preBuild
- cargo --version
- cargo build --release
+ cargo --version
+ cargo build --release
- export PATH="$OLD_PATH"
+ export PATH="$OLD_PATH"
- runHook postBuild
- popd
- '';
+ runHook postBuild
+ popd
+ '';
- installPhase = let
- preRunBinaries =
- if args ? preRunBinaries && builtins.length args.preRunBinaries > 0 then
- "export PATH=\"\\$PATH:" + pkgs.lib.makeBinPath args.preRunBinaries + "\""
- else
- "";
- preRunLibraries =
- if args ? preRunLibraries && builtins.length args.preRunLibraries > 0 then
- "export LD_LIBRARY_PATH=\"\\$LD_LIBRARY_PATH:" + pkgs.lib.makeLibraryPath args.preRunLibraries + "\""
- else
- "";
- in ''
- runHook preInstall
-
- mkdir -p "$out"/bin
- for bin in $(find . -type f -regex "./zkvms/.*release/[^/]*" -executable -print)
- do
- mv "$bin" "$out"/bin/
- done
-
- cat <<EOF > "$out"/bin/${pname}
- #!/usr/bin/env sh
- ${preRunBinaries}
- ${preRunLibraries}
- ${args.preRun or ""}
- "$out"/bin/host-${args.pname} \$@
- EOF
- chmod +x "$out"/bin/${pname}
-
- runHook postInstall
- '';
-
- doNotPostBuildInstallCargoBinaries = true;
- } // (builtins.removeAttrs args ["overrideVendorCargoPackage" "overrideVendorGitCheckout"]) // { inherit pname; });
+ installPhase = let
+ preRunBinaries =
+ if args ? preRunBinaries && builtins.length args.preRunBinaries > 0 then
+ "export PATH=\"\\$PATH:" + pkgs.lib.makeBinPath args.preRunBinaries + "\""
+ else
+ "";
+ preRunLibraries =
+ if args ? preRunLibraries && builtins.length args.preRunLibraries > 0 then
+ "export LD_LIBRARY_PATH=\"\\$LD_LIBRARY_PATH:" + pkgs.lib.makeLibraryPath args.preRunLibraries + "\""
+ else
+ "";
+ in ''
+ runHook preInstall
+
+ mkdir -p "$out"/bin
+ for bin in $(find . -type f -regex "./zkvms/.*release/[^/]*" -executable -print)
+ do
+ mv "$bin" "$out"/bin/
+ done
+
+ cat <<EOF > "$out"/bin/${pname}
+ #!/usr/bin/env sh
+ ${preRunBinaries}
+ ${preRunLibraries}
+ ${args.preRun or ""}
+ "$out"/bin/host-${args.pname} \$@
+ EOF
+ chmod +x "$out"/bin/${pname}
+
+ runHook postInstall
+ '';
+
+ doNotPostBuildInstallCargoBinaries = true;
+ } // (builtins.removeAttrs args ["overrideVendorCargoPackage" "overrideVendorGitCheckout"]) // { inherit pname; });
}