microsoft / Spartan

Spartan: High-speed zkSNARKs without trusted setup
MIT License
672 stars 112 forks source link

Error compiling with latest rust: could not compile `packed_simd_2` (lib) due to 6 previous errors #66

Closed cdesch closed 5 months ago

cdesch commented 10 months ago

When compiling a project using the Spartan Lib (Code Below) on the current nightly (rustc 1.76.0-nightly (ba7c7a301 2023-11-13)), I get the following error (below) that packed_simd_2 could not be compiled. I'm not sure what is causing this, although in doing some searching, it seems support was dropped in rust 1.72 for this function [Ref: https://github.com/dtolnay/proc-macro2/issues/398]. However, I did try falling back to rust 1.71 stable and received a different error because the dependencies need the nightly features to work. It seems that this may be related, although I am not sure: https://github.com/rust-lang/packed_simd/issues/356

For what it is worth, I get the same error when compiling on Rust 1.74 nightly (rustc 1.74.0-nightly (7d9bce327 2023-09-16))

Error:

>  cargo check
    Blocking waiting for file lock on build directory
    Checking cfg-if v1.0.0
    Checking byteorder v1.5.0
    Checking byte-tools v0.3.1
    Checking keccak v0.1.4
    Checking ppv-lite86 v0.2.17
    Checking adler v1.0.2
    Checking either v1.9.0
    Checking libc v0.2.150
    Checking typenum v1.17.0
    Checking libm v0.1.4
    Checking opaque-debug v0.2.3
    Checking subtle v2.5.0
    Checking unicode-ident v1.0.12
    Checking serde v1.0.192
    Checking zeroize v1.6.0
    Checking crc32fast v1.3.2
    Checking block-padding v0.1.5
    Checking miniz_oxide v0.7.1
    Checking proc-macro2 v1.0.69
    Checking itertools v0.10.5
    Checking packed_simd_2 v0.3.8
    Checking flate2 v1.0.28
    Checking generic-array v0.12.4
    Checking generic-array v0.14.7
    Checking getrandom v0.1.16
    Checking getrandom v0.2.11
    Checking rand_core v0.6.4
    Checking rand_core v0.5.1
    Checking block-buffer v0.7.3
    Checking digest v0.8.1
    Checking merlin v3.0.0
    Checking sha3 v0.8.2
    Checking rand_chacha v0.2.2
    Checking digest v0.9.0
    Checking rand v0.7.3
    Checking bincode v1.3.3
error: unrecognized platform-specific intrinsic function: `simd_shuffle2`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:10:5
   |
10 |     pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: unrecognized platform-specific intrinsic function: `simd_shuffle4`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:11:5
   |
11 |     pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: unrecognized platform-specific intrinsic function: `simd_shuffle8`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:12:5
   |
12 |     pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: unrecognized platform-specific intrinsic function: `simd_shuffle16`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:13:5
   |
13 |     pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: unrecognized platform-specific intrinsic function: `simd_shuffle32`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:14:5
   |
14 |     pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: unrecognized platform-specific intrinsic function: `simd_shuffle64`
  --> /home/cj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/packed_simd_2-0.3.8/src/codegen/llvm.rs:15:5
   |
15 |     pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: could not compile `packed_simd_2` (lib) due to 6 previous errors

Project Code

Cargo.toml

[package]
name = "spartan-pocf"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
merlin = "3.0.0"
spartan = "0.8.0"

main.rs

extern crate libspartan;
extern crate merlin;
use libspartan::{Instance, SNARKGens, SNARK};
use merlin::Transcript;

fn main() {
    test_libspartan();
}

fn test_libspartan() {
      // specify the size of an R1CS instance
      let num_vars = 1024;
      let num_cons = 1024;
      let num_inputs = 10;
      let num_non_zero_entries = 1024;

      // produce public parameters
      let gens = SNARKGens::new(num_cons, num_vars, num_inputs, num_non_zero_entries);

      // ask the library to produce a synthentic R1CS instance
      let (inst, vars, inputs) = Instance::produce_synthetic_r1cs(num_cons, num_vars, num_inputs);

      // create a commitment to the R1CS instance
      let (comm, decomm) = SNARK::encode(&inst, &gens);

      // produce a proof of satisfiability
      let mut prover_transcript = Transcript::new(b"snark_example");
      let proof = SNARK::prove(&inst, &comm, &decomm, vars, &inputs, &gens, &mut prover_transcript);

      // verify the proof of satisfiability
      let mut verifier_transcript = Transcript::new(b"snark_example");
      assert!(proof
        .verify(&comm, &inputs, &mut verifier_transcript, &gens)
        .is_ok());
      println!("proof verification successful!");
}

Versions

Rust Version

❯ rustc --version
rustc 1.76.0-nightly (ba7c7a301 2023-11-13)

Ubuntu Version

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:    22.04
Codename:   jammy
srinathsetty commented 9 months ago

Hi! One option could be to run it with default-features turned off. If you see the default feature here, it turns on the simd-backend feature of curve25519-dalek: https://github.com/microsoft/Spartan/blob/e0f964c3f93dc95134ba36940b22e0ad6b09fe98/Cargo.toml#L61

xiaolin9595 commented 7 months ago

Althought I have done what you say, the problem still existed

srinathsetty commented 5 months ago

Please check the latest master. I think the build issue should be resolved.