diff --git a/Cargo.lock b/Cargo.lock
index c2ccf78f4..4d354e7b6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -87,7 +87,7 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5"
dependencies = [
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -97,7 +97,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
dependencies = [
"anstyle",
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -318,8 +318,7 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
[[package]]
name = "clio"
version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7fc6734af48458f72f5a3fa7b840903606427d98a710256e808f76a965047d9"
+source = "git+https://github.com/0xmozak/clio.git#a5a47f19470ee6991cf7200751eae8d2e3ac07af"
dependencies = [
"cfg-if",
"clap",
@@ -327,7 +326,7 @@ dependencies = [
"libc",
"tempfile",
"walkdir",
- "windows-sys 0.42.0",
+ "windows-sys",
]
[[package]]
@@ -607,12 +606,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.8"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -790,7 +789,7 @@ checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
dependencies = [
"hermit-abi",
"libc",
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -924,6 +923,8 @@ dependencies = [
"itertools 0.12.1",
"log",
"mozak-circuits-derive",
+ "mozak-cli-args",
+ "mozak-examples",
"mozak-runner",
"mozak-sdk",
"plonky2",
@@ -953,15 +954,13 @@ name = "mozak-cli"
version = "0.1.0"
dependencies = [
"anyhow",
- "clap",
- "clap-verbosity-flag",
- "clap_derive",
"clio",
"criterion",
"env_logger",
"itertools 0.12.1",
"log",
"mozak-circuits",
+ "mozak-cli-args",
"mozak-examples",
"mozak-node",
"mozak-runner",
@@ -977,6 +976,16 @@ dependencies = [
"tempfile",
]
+[[package]]
+name = "mozak-cli-args"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "clap-verbosity-flag",
+ "clap_derive",
+ "clio",
+]
+
[[package]]
name = "mozak-examples"
version = "0.1.0"
@@ -1057,9 +1066,9 @@ checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
[[package]]
name = "num"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41"
+checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
dependencies = [
"num-bigint",
"num-complex",
@@ -1082,9 +1091,9 @@ dependencies = [
[[package]]
name = "num-complex"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6"
+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [
"num-traits",
"rand",
@@ -1118,11 +1127,10 @@ dependencies = [
[[package]]
name = "num-rational"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
- "autocfg",
"num-bigint",
"num-integer",
"num-traits",
@@ -1505,7 +1513,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -1537,9 +1545,9 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.200"
+version = "1.0.201"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f"
+checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c"
dependencies = [
"serde_derive",
]
@@ -1557,9 +1565,9 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.200"
+version = "1.0.201"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb"
+checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865"
dependencies = [
"proc-macro2",
"quote",
@@ -1568,9 +1576,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.116"
+version = "1.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
+checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
dependencies = [
"itoa",
"ryu",
@@ -1733,7 +1741,7 @@ dependencies = [
"cfg-if",
"fastrand",
"rustix",
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -2081,7 +2089,7 @@ version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
dependencies = [
- "windows-sys 0.52.0",
+ "windows-sys",
]
[[package]]
@@ -2093,21 +2101,6 @@ dependencies = [
"windows-targets",
]
-[[package]]
-name = "windows-sys"
-version = "0.42.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
-]
-
[[package]]
name = "windows-sys"
version = "0.52.0"
@@ -2123,46 +2116,28 @@ version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
- "windows_aarch64_gnullvm 0.52.5",
- "windows_aarch64_msvc 0.52.5",
- "windows_i686_gnu 0.52.5",
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
"windows_i686_gnullvm",
- "windows_i686_msvc 0.52.5",
- "windows_x86_64_gnu 0.52.5",
- "windows_x86_64_gnullvm 0.52.5",
- "windows_x86_64_msvc 0.52.5",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
]
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
-
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
-
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
-[[package]]
-name = "windows_i686_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
-
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
@@ -2175,48 +2150,24 @@ version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
-[[package]]
-name = "windows_i686_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
-
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
-
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
-
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
-
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
@@ -2243,18 +2194,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.7.33"
+version = "0.7.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c"
+checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.33"
+version = "0.7.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393"
+checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
dependencies = [
"proc-macro2",
"quote",
diff --git a/Cargo.toml b/Cargo.toml
index 20151305e..16ccb30b0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,6 +17,7 @@
[workspace]
exclude = ["sdk"]
members = [
+ "args",
"circuits",
"cli",
"examples-builder",
@@ -56,6 +57,7 @@ plonky2_crypto = { git = "https://github.com/0xmozak/plonky2-crypto.git" }
criterion = { version = "0.5", default-features = false, features = ["html_reports", "plotters", "cargo_bench_support"] }
[patch.crates-io]
+clio = { git = "https://github.com/0xmozak/clio.git" }
plonky2 = { git = "https://github.com/0xmozak/plonky2.git" }
plonky2_maybe_rayon = { git = "https://github.com/0xmozak/plonky2.git" }
starky = { git = "https://github.com/0xmozak/plonky2.git" }
diff --git a/args/Cargo.toml b/args/Cargo.toml
new file mode 100644
index 000000000..c9aff02a8
--- /dev/null
+++ b/args/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+categories = ["cryptography"]
+description = "MozakVM cli"
+edition = "2021"
+keywords = ["crypto", "zero-knowledge", "vm"]
+license = "All rights reserved"
+name = "mozak-cli-args"
+readme = "README.md"
+repository = "https://github.com/0xmozak/mozak-vm"
+version = "0.1.0"
+
+[dependencies]
+clap = { version = "4.5", features = [
+ "derive",
+ "cargo",
+ "env",
+ "unicode",
+] }
+# TODO(Matthias): implement shell completion for CLI via clap_complete
+# clap_complete = "4.3"
+clap-verbosity-flag = "2.2"
+clap_derive = "4.5"
+clio = { version = "0.3", features = ["clap-parse"] }
diff --git a/args/src/bench_args.rs b/args/src/bench_args.rs
new file mode 100644
index 000000000..42f943bb7
--- /dev/null
+++ b/args/src/bench_args.rs
@@ -0,0 +1,31 @@
+use clap::{Args as Args_, Subcommand};
+
+#[derive(Debug, Args_, Clone)]
+#[command(args_conflicts_with_subcommands = true)]
+pub struct BenchArgs {
+ #[command(subcommand)]
+ pub function: BenchFunction,
+}
+
+#[derive(PartialEq, Debug, Subcommand, Clone)]
+pub enum BenchFunction {
+ XorBench {
+ iterations: u32,
+ },
+ NopBench {
+ iterations: u32,
+ },
+ Poseidon2Bench {
+ input_len: u32,
+ },
+ /// Benchmarks (almost) every instruction.
+ OmniBench {
+ iterations: u32,
+ },
+ SortBench {
+ n: u32,
+ },
+ SortBenchRecursive {
+ n: u32,
+ },
+}
diff --git a/args/src/lib.rs b/args/src/lib.rs
new file mode 100644
index 000000000..3d1981a16
--- /dev/null
+++ b/args/src/lib.rs
@@ -0,0 +1,76 @@
+#![deny(clippy::pedantic)]
+#![deny(clippy::cargo)]
+#![allow(clippy::multiple_crate_versions)]
+pub mod bench_args;
+
+use bench_args::BenchArgs;
+use clap::{Parser, Subcommand};
+use clap_derive::Args;
+use clio::{Input, Output};
+
+#[derive(Parser, Debug, Clone)]
+#[command(author, version, about, long_about = None)]
+pub struct Cli {
+ #[clap(flatten)]
+ pub verbose: clap_verbosity_flag::Verbosity,
+ #[command(subcommand)]
+ pub command: Command,
+ /// Debug API, default is OFF, currently only `prove` command is supported
+ #[arg(short, long)]
+ pub debug: bool,
+}
+
+#[derive(Clone, Debug, Args)]
+pub struct RunArgs {
+ pub elf: Input,
+ #[arg(long)]
+ pub system_tape: Option,
+ #[arg(long)]
+ pub self_prog_id: Option,
+}
+
+#[derive(Clone, Debug, Args)]
+pub struct ProveArgs {
+ pub elf: Input,
+ pub proof: Output,
+ #[arg(long)]
+ pub system_tape: Option,
+ #[arg(long)]
+ pub self_prog_id: Option,
+ pub recursive_proof: Option