content: [workspace]
  resolver = "2"
  
  members = [
      "blake2s_u32",
      "cs",
      "prover",
      "trace_holder",
      "fft",
      "worker",
      "transcript",
      "verifier_generator",
      "verifier",
      "circuit_defs/risc_v_cycles",
      "circuit_defs/circuit_common",
      "circuit_defs/trace_and_split",
      "circuit_defs/setups",
      "circuit_defs/prover_examples",
      # "circuit_defs/opcode_tests",
      "circuit_defs/prover_examples",
      "circuit_defs/reduced_risc_v_machine",
      "circuit_defs/reduced_risc_v_log_23_machine",
      "circuit_defs/final_reduced_risc_v_machine",
      "circuit_defs/risc_v_cycles",
      "circuit_defs/risc_v_cycles/verifier",
      "circuit_defs/setups",
      "circuit_defs/trace_and_split",
      "cs",
      "execution_utils",
      "fft",
      "field",
      "full_statement_verifier",
      "gpu_prover",
      "non_determinism_source",
      "poseidon2",
      "prover",
      "risc_v_simulator",
      "tools/cli",
      "tools/generator",
      "tools/zksmith",
      "circuit_defs/reduced_risc_v_machine",
      "circuit_defs/risc_v_cycles/verifier",
      "full_statement_verifier",
      "verifier_common",
      "poseidon2",
      "non_determinism_source",
      "reduced_keccak",
      "risc_v_simulator",
      "execution_utils",
      "circuit_defs/blake2_with_compression",
      "circuit_defs/bigint_with_control",
      "witness_eval_generator",
      "gpu_witness_eval_generator",
      "circuit_defs/machine_without_signed_mul_div",
  ]
  
  default-members = [
      "blake2s_u32",
      "circuit_defs/bigint_with_control",
      "circuit_defs/blake2_with_compression",
      "circuit_defs/circuit_common",
      # "circuit_defs/opcode_tests",
      "circuit_defs/prover_examples",
      "circuit_defs/reduced_risc_v_machine",
      "circuit_defs/reduced_risc_v_log_23_machine",
      "circuit_defs/final_reduced_risc_v_machine",
      "circuit_defs/risc_v_cycles",
      "circuit_defs/risc_v_cycles/verifier",
      "circuit_defs/setups",
      "circuit_defs/trace_and_split",
      "cs",
      "execution_utils",
      "fft",
      "field",
      "full_statement_verifier",
      # gpu_prover is not a default member because it needs CUDA installation to compile
      "non_determinism_source",
      "poseidon2",
      "prover",
      "reduced_keccak",
      "risc_v_simulator",
      "tools/cli",
      "tools/generator",
      "trace_holder",
      "transcript",
      "verifier",
      "verifier_common",
      "verifier_generator",
      "worker",
      "witness_eval_generator",
      "gpu_witness_eval_generator",
  ]
  
  [workspace.package]
  version = "0.1.0"
  edition = "2021"
  authors = ["The Matter Labs Team <hello@matterlabs.dev>"]
  homepage = "https://zksync.io/"
  repository = "https://github.com/matter-labs/zksync-airbender/"
  license = "MIT OR Apache-2.0"
  keywords = ["blockchain", "zksync", "zk", "risc-v"]
  categories = ["cryptography"]
  
  [workspace.dependencies]
  field = { path = "./field", default-features = false }
  blake2s_u32 = { path = "./blake2s_u32", default-features = false }
  trace_holder = { path = "./trace_holder" }
  worker = { path = "./worker" }
  fft = { path = "./fft" }
  prover = { path = "./prover", default-features = false }
  cs = { path = "./cs", default-features = false }
  transcript = { path = "./transcript", default-features = false }
  verifier_generator = { path = "./verifier_generator" }
  circuit_common = { path = "./circuit_defs/circuit_common" }
  blake2_with_compression = { path = "./circuit_defs/blake2_with_compression" }
  bigint_with_control = { path = "./circuit_defs/bigint_with_control" }
  risc_v_cycles = { path = "./circuit_defs/risc_v_cycles" }
  machine_without_signed_mul_div = { path = "./circuit_defs/machine_without_signed_mul_div" }
  reduced_risc_v_machine = { path = "./circuit_defs/reduced_risc_v_machine" }
  reduced_risc_v_log_23_machine = { path = "./circuit_defs/reduced_risc_v_log_23_machine" }
  final_reduced_risc_v_machine = {path = "./circuit_defs/final_reduced_risc_v_machine"}
  trace_and_split = { path = "./circuit_defs/trace_and_split" }
  setups = { path = "./circuit_defs/setups" }
  # verifier = {path = "./verifier", default-features = false}
  verifier_common = { path = "./verifier_common", default-features = false }
  # full_statement_verifier  = { path = "./full_statement_verifier", default-features = false }
  poseidon2 = { path = "./poseidon2", default-features = false }
  non_determinism_source = { path = "./non_determinism_source", default-features = false }
  risc_v_simulator = { path = "./risc_v_simulator", default-features = false }
  execution_utils = { path = "./execution_utils", default-features = false }
  witness_eval_generator = { path = "./witness_eval_generator", default-features = false }
  gpu_witness_eval_generator = { path = "./gpu_witness_eval_generator" }
  gpu_prover = { path = "./gpu_prover" }
  
  serde = { version = "1", default-features = false, features = ["derive", "alloc"] }
  clap = { version = "4.5.21", features = ["derive"] }
  # rand = {version = "0.8", default-features = false, features = ["std_rng"] }
  rand = { version = "0.9", default-features = false }
  unroll = "0.1"
  seq-macro = "0.3"
  super-seq-macro = "0.3"
  arrayvec = { version = "0.7", default-features = false }
  itertools = { version = "0.14" }
  log = "0.4"
  
  [profile.release]
  opt-level = 3
  lto = "fat"
  codegen-units = 1
  debug = false
  
  
  # Special profile for compiling the cli tool.
  # that is doing some optimizations (otherwise proving is too slow)
  # but doesn't do them on verifier crate (as then the compilation can take over 15 min).
  [profile.cli]
  inherits = "dev"
  opt-level = 3
  debug = false # exponential in LLVM
  incremental = false
  
  [profile.cli.package.verifier]
  opt-level = 1
  
  # Special profile for ISA tests
  [profile.test-release]
  inherits = "release"  # Start with the release profile as a base
  opt-level = 2         # Moderate optimization (80% of opt-level 3, much faster compilation)
  codegen-units = 256   # High parallelism for faster compilation (default is 16 in release)
  lto = false           # Disable link-time optimization (LTO) to speed up linking
  incremental = true    # Enable incremental compilation for faster rebuilds
  debug = true         # Disable debug info to reduce compile time (optional, set to true if you need debugging)
  # strip = "symbols"     # Strip symbols to reduce binary size and linking time
  # panic = "unwind"      # Default panic strategy, no change needed (abort can be faster but less safe for tests)
  rpath = false         # Disable rpath (rarely needed, speeds up linking slightly)
  