From 6874b8cbd027da0e1c06eb36b218bd6868660358 Mon Sep 17 00:00:00 2001 From: Kamen Mladenov Date: Thu, 16 Jan 2025 12:50:08 +0200 Subject: feat(flake): Implement zkm package --- zkvms/zkm/default.nix | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 zkvms/zkm/default.nix (limited to 'zkvms') diff --git a/zkvms/zkm/default.nix b/zkvms/zkm/default.nix new file mode 100644 index 0000000..da7224b --- /dev/null +++ b/zkvms/zkm/default.nix @@ -0,0 +1,89 @@ +{ zkVM-helpers, + stdenv, + lib, + just, + metacraft-labs, + rust-bin, + protobuf, + pkg-config, + openssl, + buildGoModule, + craneLib-default, +}: +let + zkm_libsnark = buildGoModule { + pname = "zkm_libsnark"; + version = "0.1.0"; + src = with lib.fileset; toSource { + root = ./sdk/src/local/libsnark; + fileset = ./sdk/src/local/libsnark; + }; + vendorHash = "sha256-tGajRfJ8G4M89QSiJnjpTzQ3+VA2RLkavD1ipANeOSI="; + + buildPhase = "sh ./compile.sh"; + installPhase = '' + mkdir -p "$out"/lib + mv libsnark.so "$out"/lib/ + ''; + }; + + commonArgs = { + pname = "zkm"; + version = "infdev"; + + src = with lib.fileset; toSource { + root = ../..; + fileset = intersection (gitTracked ../..) (unions [ + ./. + ../../guests + ../../guests_macro + ../../zkvms_host_io + ../../Vertices-010.in + ]); + }; + + cargoLock = ./Cargo.lock; + + nativeBuildInputs = [ + pkg-config + openssl + protobuf + metacraft-labs.zkm + ]; + }; + + craneLib = craneLib-default.overrideToolchain metacraft-labs.zkm; + cargoArtifacts = craneLib.buildDepsOnly (zkVM-helpers.fixDeps commonArgs); +in + craneLib.buildPackage (zkVM-helpers.withCustomPhases (commonArgs + // { + inherit cargoArtifacts; + + postPatch = '' + ln -s ../../../../guests/graph_coloring ./zkvms/zkm/guest/src/zkp + ''; + + hostBin = "host-zkm"; + guestTarget = "mips-zkm-zkvm-elf"; + + preBuildGuest = '' + # https://github.com/zkMIPS/zkm/blob/0e62a053970eb25c81aa409d0c7234f5611a192d/build/src/command/utils.rs#L45-L61 + 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" + ''; + + 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; + })) -- cgit v1.2.3