Update to clap 3.* (#4082)
* Update to clap 3.0 This commit migrates all CLI commands internally used in this project from structopt/clap2 to clap 3. The intent here is to ensure that we're using maintained versions of the dependencies as structopt and clap 2 are less maintained nowadays. Most transitions were pretty straightforward and mostly dealing with structopt/clap3 differences. * Fix a number of `cargo deny` errors This commit fixes a few errors around duplicate dependencies which arose from the prior update to clap3. This also uses a new feature in `deny.toml`, `skip-tree`, which allows having a bit more targeted ignores for skips of duplicate version checks. This showed a few more locations in Wasmtime itself where we could update some dependencies.
This commit is contained in:
148
Cargo.lock
generated
148
Cargo.lock
generated
@@ -396,13 +396,48 @@ version = "2.34.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
|
||||||
"atty",
|
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"strsim",
|
|
||||||
"textwrap 0.11.0",
|
"textwrap 0.11.0",
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
"vec_map",
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "3.1.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7c167e37342afc5f33fd87bbc870cedd020d2a6dffa05d45ccd9241fbdd146db"
|
||||||
|
dependencies = [
|
||||||
|
"atty",
|
||||||
|
"bitflags",
|
||||||
|
"clap_derive",
|
||||||
|
"clap_lex",
|
||||||
|
"indexmap",
|
||||||
|
"lazy_static",
|
||||||
|
"strsim",
|
||||||
|
"termcolor",
|
||||||
|
"textwrap 0.15.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "3.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "189ddd3b5d32a70b35e7686054371742a937b0d99128e76dde6340210e966669"
|
||||||
|
dependencies = [
|
||||||
|
"os_str_bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -643,7 +678,7 @@ dependencies = [
|
|||||||
name = "cranelift-serde"
|
name = "cranelift-serde"
|
||||||
version = "0.84.0"
|
version = "0.84.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap 3.1.12",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"cranelift-reader",
|
"cranelift-reader",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -656,6 +691,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"capstone",
|
"capstone",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
"clap 3.1.12",
|
||||||
"cranelift",
|
"cranelift",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"cranelift-entity",
|
"cranelift-entity",
|
||||||
@@ -675,7 +711,6 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"pretty_env_logger",
|
"pretty_env_logger",
|
||||||
"rayon",
|
"rayon",
|
||||||
"structopt",
|
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"termcolor",
|
"termcolor",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
@@ -718,7 +753,7 @@ checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"atty",
|
"atty",
|
||||||
"cast",
|
"cast",
|
||||||
"clap",
|
"clap 2.34.0",
|
||||||
"criterion-plot",
|
"criterion-plot",
|
||||||
"csv",
|
"csv",
|
||||||
"itertools",
|
"itertools",
|
||||||
@@ -1037,19 +1072,6 @@ dependencies = [
|
|||||||
"termcolor",
|
"termcolor",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "env_logger"
|
|
||||||
version = "0.8.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
|
|
||||||
dependencies = [
|
|
||||||
"atty",
|
|
||||||
"humantime 2.1.0",
|
|
||||||
"log",
|
|
||||||
"regex",
|
|
||||||
"termcolor",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@@ -1282,12 +1304,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.3.3"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
|
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||||
dependencies = [
|
|
||||||
"unicode-segmentation",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
@@ -1438,10 +1457,10 @@ dependencies = [
|
|||||||
name = "islec"
|
name = "islec"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"clap 3.1.12",
|
||||||
"cranelift-isle",
|
"cranelift-isle",
|
||||||
"env_logger 0.8.4",
|
"env_logger 0.9.0",
|
||||||
"miette",
|
"miette",
|
||||||
"structopt",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1909,6 +1928,12 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "os_str_bytes"
|
||||||
|
version = "6.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owo-colors"
|
name = "owo-colors"
|
||||||
version = "3.4.0"
|
version = "3.4.0"
|
||||||
@@ -2639,33 +2664,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.8.0"
|
version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "structopt"
|
|
||||||
version = "0.3.26"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
|
|
||||||
dependencies = [
|
|
||||||
"clap",
|
|
||||||
"lazy_static",
|
|
||||||
"structopt-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "structopt-derive"
|
|
||||||
version = "0.4.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
|
|
||||||
dependencies = [
|
|
||||||
"heck",
|
|
||||||
"proc-macro-error",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
@@ -2824,6 +2825,12 @@ dependencies = [
|
|||||||
"unicode-width",
|
"unicode-width",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "textwrap"
|
||||||
|
version = "0.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.30"
|
version = "1.0.30"
|
||||||
@@ -2975,12 +2982,6 @@ dependencies = [
|
|||||||
"regex",
|
"regex",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-segmentation"
|
|
||||||
version = "1.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-width"
|
name = "unicode-width"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
@@ -3031,12 +3032,6 @@ version = "0.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vec_map"
|
|
||||||
version = "0.8.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
@@ -3367,7 +3362,7 @@ version = "0.19.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cap-std",
|
"cap-std",
|
||||||
"env_logger 0.8.4",
|
"env_logger 0.9.0",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"wasi-cap-std-sync",
|
"wasi-cap-std-sync",
|
||||||
"wasmtime",
|
"wasmtime",
|
||||||
@@ -3413,8 +3408,9 @@ version = "0.37.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
"clap 3.1.12",
|
||||||
"criterion",
|
"criterion",
|
||||||
"env_logger 0.8.4",
|
"env_logger 0.9.0",
|
||||||
"file-per-thread-logger",
|
"file-per-thread-logger",
|
||||||
"filecheck",
|
"filecheck",
|
||||||
"humantime 2.1.0",
|
"humantime 2.1.0",
|
||||||
@@ -3428,7 +3424,6 @@ dependencies = [
|
|||||||
"pretty_env_logger",
|
"pretty_env_logger",
|
||||||
"rayon",
|
"rayon",
|
||||||
"rustix",
|
"rustix",
|
||||||
"structopt",
|
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"test-programs",
|
"test-programs",
|
||||||
@@ -3444,7 +3439,7 @@ dependencies = [
|
|||||||
"wasmtime-wasi-crypto",
|
"wasmtime-wasi-crypto",
|
||||||
"wasmtime-wasi-nn",
|
"wasmtime-wasi-nn",
|
||||||
"wasmtime-wast",
|
"wasmtime-wast",
|
||||||
"wast 39.0.0",
|
"wast 40.0.0",
|
||||||
"wat",
|
"wat",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
@@ -3519,7 +3514,7 @@ version = "0.19.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arbitrary",
|
"arbitrary",
|
||||||
"env_logger 0.8.4",
|
"env_logger 0.9.0",
|
||||||
"log",
|
"log",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"rayon",
|
"rayon",
|
||||||
@@ -3658,17 +3653,6 @@ dependencies = [
|
|||||||
"leb128",
|
"leb128",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wast"
|
|
||||||
version = "39.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e9bbbd53432b267421186feee3e52436531fa69a7cfee9403f5204352df3dd05"
|
|
||||||
dependencies = [
|
|
||||||
"leb128",
|
|
||||||
"memchr",
|
|
||||||
"unicode-width",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wast"
|
name = "wast"
|
||||||
version = "40.0.0"
|
version = "40.0.0"
|
||||||
@@ -3755,7 +3739,7 @@ dependencies = [
|
|||||||
name = "wiggle-test"
|
name = "wiggle-test"
|
||||||
version = "0.21.0"
|
version = "0.21.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"env_logger 0.8.4",
|
"env_logger 0.9.0",
|
||||||
"proptest",
|
"proptest",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ wasmtime-wast = { path = "crates/wast", version = "=0.37.0" }
|
|||||||
wasmtime-wasi = { path = "crates/wasi", version = "0.37.0" }
|
wasmtime-wasi = { path = "crates/wasi", version = "0.37.0" }
|
||||||
wasmtime-wasi-crypto = { path = "crates/wasi-crypto", version = "0.37.0", optional = true }
|
wasmtime-wasi-crypto = { path = "crates/wasi-crypto", version = "0.37.0", optional = true }
|
||||||
wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "0.37.0", optional = true }
|
wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "0.37.0", optional = true }
|
||||||
structopt = { version = "0.3.5", features = ["color", "suggestions"] }
|
clap = { version = "3.1.12", features = ["color", "suggestions", "derive"] }
|
||||||
anyhow = "1.0.19"
|
anyhow = "1.0.19"
|
||||||
target-lexicon = { version = "0.12.0", default-features = false }
|
target-lexicon = { version = "0.12.0", default-features = false }
|
||||||
pretty_env_logger = "0.4.0"
|
pretty_env_logger = "0.4.0"
|
||||||
@@ -47,7 +47,7 @@ rustix = "0.33.7"
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
# depend again on wasmtime to activate its default features for tests
|
# depend again on wasmtime to activate its default features for tests
|
||||||
wasmtime = { path = "crates/wasmtime", version = "0.37.0" }
|
wasmtime = { path = "crates/wasmtime", version = "0.37.0" }
|
||||||
env_logger = "0.8.1"
|
env_logger = "0.9.0"
|
||||||
filecheck = "0.5.0"
|
filecheck = "0.5.0"
|
||||||
more-asserts = "0.2.1"
|
more-asserts = "0.2.1"
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
@@ -55,7 +55,7 @@ test-programs = { path = "crates/test-programs" }
|
|||||||
wasmtime-runtime = { path = "crates/runtime" }
|
wasmtime-runtime = { path = "crates/runtime" }
|
||||||
tokio = { version = "1.8.0", features = ["rt", "time", "macros", "rt-multi-thread"] }
|
tokio = { version = "1.8.0", features = ["rt", "time", "macros", "rt-multi-thread"] }
|
||||||
tracing-subscriber = "0.3.1"
|
tracing-subscriber = "0.3.1"
|
||||||
wast = "39.0.0"
|
wast = "40.0.0"
|
||||||
criterion = "0.3.4"
|
criterion = "0.3.4"
|
||||||
num_cpus = "1.13.0"
|
num_cpus = "1.13.0"
|
||||||
winapi = { version = "0.3.9", features = ['memoryapi'] }
|
winapi = { version = "0.3.9", features = ['memoryapi'] }
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ indicatif = "0.13.0"
|
|||||||
thiserror = "1.0.15"
|
thiserror = "1.0.15"
|
||||||
walkdir = "2.2"
|
walkdir = "2.2"
|
||||||
anyhow = "1.0.32"
|
anyhow = "1.0.32"
|
||||||
structopt = "0.3.17"
|
clap = { version = "3.1.12", features = ["derive"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["disas", "wasm", "cranelift-codegen/all-arch", "souper-harvest"]
|
default = ["disas", "wasm", "cranelift-codegen/all-arch", "souper-harvest"]
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cranelift-isle = { version = "*", path = "../isle/" }
|
cranelift-isle = { version = "*", path = "../isle/" }
|
||||||
env_logger = { version = "0.8", default-features = false }
|
env_logger = { version = "0.9", default-features = false }
|
||||||
miette = { version = "3.0.0", features = ["fancy"] }
|
miette = { version = "3.0.0", features = ["fancy"] }
|
||||||
structopt = "0.3.23"
|
clap = { version = "3.1.12", features = ["derive"] }
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use clap::Parser;
|
||||||
use cranelift_isle::{compile, lexer, parser};
|
use cranelift_isle::{compile, lexer, parser};
|
||||||
use miette::{Context, IntoDiagnostic, Result};
|
use miette::{Context, IntoDiagnostic, Result};
|
||||||
use std::{
|
use std::{
|
||||||
@@ -5,17 +6,16 @@ use std::{
|
|||||||
io::{self, Write},
|
io::{self, Write},
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
};
|
};
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
struct Opts {
|
struct Opts {
|
||||||
/// The output file to write the generated Rust code to. `stdout` is used if
|
/// The output file to write the generated Rust code to. `stdout` is used if
|
||||||
/// this is not given.
|
/// this is not given.
|
||||||
#[structopt(short, long, parse(from_os_str))]
|
#[clap(short, long)]
|
||||||
output: Option<PathBuf>,
|
output: Option<PathBuf>,
|
||||||
|
|
||||||
/// The input ISLE DSL source files.
|
/// The input ISLE DSL source files.
|
||||||
#[structopt(parse(from_os_str), required(true))]
|
#[clap(required = true)]
|
||||||
inputs: Vec<PathBuf>,
|
inputs: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ fn main() -> Result<()> {
|
|||||||
)
|
)
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let opts = Opts::from_args();
|
let opts = Opts::parse();
|
||||||
|
|
||||||
let lexer = lexer::Lexer::from_files(opts.inputs)?;
|
let lexer = lexer::Lexer::from_files(opts.inputs)?;
|
||||||
let defs = parser::parse(lexer)?;
|
let defs = parser::parse(lexer)?;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ name = "clif-json"
|
|||||||
path = "src/clif-json.rs"
|
path = "src/clif-json.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = { version = "3.1.12", features = ["derive"] }
|
||||||
serde_json = "1.0.26"
|
serde_json = "1.0.26"
|
||||||
cranelift-codegen = { path = "../codegen", version = "0.84.0", features = ["enable-serde"] }
|
cranelift-codegen = { path = "../codegen", version = "0.84.0", features = ["enable-serde"] }
|
||||||
cranelift-reader = { path = "../reader", version = "0.84.0" }
|
cranelift-reader = { path = "../reader", version = "0.84.0" }
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
|
|
||||||
use clap::{App, Arg, SubCommand};
|
use clap::Parser;
|
||||||
use cranelift_codegen::ir::Function;
|
use cranelift_codegen::ir::Function;
|
||||||
use cranelift_reader::parse_functions;
|
use cranelift_reader::parse_functions;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
@@ -54,50 +54,40 @@ fn call_de(file: &File) -> Result<(), String> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
/// Cranelift JSON serializer/deserializer utility
|
||||||
let matches = App::new("Cranelift JSON serializer/deserializer utility")
|
#[derive(Parser, Debug)]
|
||||||
.subcommand(
|
#[clap(about)]
|
||||||
SubCommand::with_name("serialize")
|
enum Args {
|
||||||
.display_order(1)
|
/// Serializes Cranelift IR into JSON
|
||||||
.about("Serializes Cranelift IR into JSON.")
|
Serialize {
|
||||||
.arg(Arg::with_name("pretty").short("p").help("pretty json"))
|
/// Generate pretty json
|
||||||
.arg(
|
#[clap(long, short)]
|
||||||
Arg::with_name("FILE")
|
pretty: bool,
|
||||||
.required(true)
|
|
||||||
.value_name("FILE")
|
|
||||||
.help("Input file for serialization"),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.subcommand(
|
|
||||||
SubCommand::with_name("deserialize")
|
|
||||||
.about("Deserializes Cranelift IR into JSON.")
|
|
||||||
.arg(
|
|
||||||
Arg::with_name("FILE")
|
|
||||||
.required(true)
|
|
||||||
.value_name("FILE")
|
|
||||||
.help("Input file for deserialization"),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.get_matches();
|
|
||||||
|
|
||||||
let res_serde = match matches.subcommand() {
|
/// Input file for serialization
|
||||||
("serialize", Some(m)) => {
|
file: String,
|
||||||
let mut file =
|
},
|
||||||
File::open(m.value_of("FILE").unwrap()).expect("Unable to open the file");
|
/// Deserializes Cranelift IR into JSON
|
||||||
|
Deserialize {
|
||||||
|
/// Input file for deserialization
|
||||||
|
file: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let res_serde = match Args::parse() {
|
||||||
|
Args::Serialize { pretty, file } => {
|
||||||
let mut contents = String::new();
|
let mut contents = String::new();
|
||||||
|
let mut file = File::open(file).expect("Unable to open the file");
|
||||||
file.read_to_string(&mut contents)
|
file.read_to_string(&mut contents)
|
||||||
.expect("Unable to read the file");
|
.expect("Unable to read the file");
|
||||||
|
|
||||||
match m.occurrences_of("pretty") {
|
call_ser(&contents, pretty)
|
||||||
0 => call_ser(&contents, false),
|
|
||||||
_ => call_ser(&contents, true),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
("deserialize", Some(m)) => {
|
Args::Deserialize { file } => {
|
||||||
let file = File::open(m.value_of("FILE").unwrap()).expect("Unable to open the file");
|
let file = File::open(file).expect("Unable to open the file");
|
||||||
call_de(&file)
|
call_de(&file)
|
||||||
}
|
}
|
||||||
_ => Err("Invalid subcommand.".to_string()),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Err(mut msg) = res_serde {
|
if let Err(mut msg) = res_serde {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use crate::utils::{parse_sets_and_triple, read_to_string};
|
use crate::utils::{parse_sets_and_triple, read_to_string};
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::cursor::{Cursor, FuncCursor};
|
use cranelift_codegen::cursor::{Cursor, FuncCursor};
|
||||||
use cranelift_codegen::flowgraph::ControlFlowGraph;
|
use cranelift_codegen::flowgraph::ControlFlowGraph;
|
||||||
use cranelift_codegen::ir::types::{F32, F64};
|
use cranelift_codegen::ir::types::{F32, F64};
|
||||||
@@ -16,24 +17,22 @@ use cranelift_reader::{parse_test, ParseOptions};
|
|||||||
use indicatif::{ProgressBar, ProgressDrawTarget, ProgressStyle};
|
use indicatif::{ProgressBar, ProgressDrawTarget, ProgressStyle};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
/// Reduce size of clif file causing panic during compilation.
|
/// Reduce size of clif file causing panic during compilation.
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(parse(from_os_str))]
|
|
||||||
file: PathBuf,
|
file: PathBuf,
|
||||||
|
|
||||||
/// Configure Cranelift settings
|
/// Configure Cranelift settings
|
||||||
#[structopt(long("set"))]
|
#[clap(long = "set")]
|
||||||
settings: Vec<String>,
|
settings: Vec<String>,
|
||||||
|
|
||||||
/// Specify the target architecture.
|
/// Specify the target architecture.
|
||||||
target: String,
|
target: String,
|
||||||
|
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,19 +5,19 @@
|
|||||||
|
|
||||||
use crate::utils::read_to_string;
|
use crate::utils::read_to_string;
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_reader::parse_functions;
|
use cranelift_reader::parse_functions;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
/// Outputs .clif file
|
/// Outputs .clif file
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify input file(s) to be used. Use '-' for stdin.
|
/// Specify input file(s) to be used. Use '-' for stdin.
|
||||||
#[structopt(required(true), parse(from_os_str))]
|
#[clap(required = true)]
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::dbg::LOG_FILENAME_PREFIX;
|
use cranelift_codegen::dbg::LOG_FILENAME_PREFIX;
|
||||||
use std::{option::Option, path::PathBuf};
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
mod bugpoint;
|
mod bugpoint;
|
||||||
mod cat;
|
mod cat;
|
||||||
@@ -40,7 +40,7 @@ fn handle_debug_flag(debug: bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Cranelift code generator utility.
|
/// Cranelift code generator utility.
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
enum Commands {
|
enum Commands {
|
||||||
Test(TestOptions),
|
Test(TestOptions),
|
||||||
Run(run::Options),
|
Run(run::Options),
|
||||||
@@ -63,58 +63,57 @@ enum Commands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Run Cranelift tests
|
/// Run Cranelift tests
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
struct TestOptions {
|
struct TestOptions {
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
|
|
||||||
/// Print pass timing report for test
|
/// Print pass timing report for test
|
||||||
#[structopt(short = "T")]
|
#[clap(short = 'T')]
|
||||||
time_passes: bool,
|
time_passes: bool,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short = 'd')]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(required(true), parse(from_os_str))]
|
#[clap(required = true)]
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Run specified pass(es) on an input file.
|
/// Run specified pass(es) on an input file.
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
struct PassOptions {
|
struct PassOptions {
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
|
|
||||||
/// Print pass timing report for test
|
/// Print pass timing report for test
|
||||||
#[structopt(short = "T")]
|
#[clap(short = 'T')]
|
||||||
time_passes: bool,
|
time_passes: bool,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(parse(from_os_str))]
|
|
||||||
file: PathBuf,
|
file: PathBuf,
|
||||||
|
|
||||||
/// Specify the target architecture.
|
/// Specify the target architecture.
|
||||||
target: String,
|
target: String,
|
||||||
|
|
||||||
/// Specify pass(es) to be run on the input file
|
/// Specify pass(es) to be run on the input file
|
||||||
#[structopt(required(true))]
|
#[clap(required = true)]
|
||||||
passes: Vec<String>,
|
passes: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// (Compiled without support for this subcommand)
|
/// (Compiled without support for this subcommand)
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
struct CompiledWithoutSupportOptions {}
|
struct CompiledWithoutSupportOptions {}
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
fn main() -> anyhow::Result<()> {
|
||||||
match Commands::from_args() {
|
match Commands::parse() {
|
||||||
Commands::Cat(c) => cat::run(&c)?,
|
Commands::Cat(c) => cat::run(&c)?,
|
||||||
Commands::Run(r) => run::run(&r)?,
|
Commands::Run(r) => run::run(&r)?,
|
||||||
Commands::Interpret(i) => interpret::run(&i)?,
|
Commands::Interpret(i) => interpret::run(&i)?,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
use crate::disasm::print_all;
|
use crate::disasm::print_all;
|
||||||
use crate::utils::{parse_sets_and_triple, read_to_string};
|
use crate::utils::{parse_sets_and_triple, read_to_string};
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::print_errors::pretty_error;
|
use cranelift_codegen::print_errors::pretty_error;
|
||||||
use cranelift_codegen::settings::FlagsOrIsa;
|
use cranelift_codegen::settings::FlagsOrIsa;
|
||||||
use cranelift_codegen::timing;
|
use cranelift_codegen::timing;
|
||||||
@@ -10,37 +11,35 @@ use cranelift_codegen::Context;
|
|||||||
use cranelift_reader::{parse_test, ParseOptions};
|
use cranelift_reader::{parse_test, ParseOptions};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
/// Compiles Cranelift IR into target language
|
/// Compiles Cranelift IR into target language
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Print the resulting Cranelift IR
|
/// Print the resulting Cranelift IR
|
||||||
#[structopt(short("p"))]
|
#[clap(short)]
|
||||||
print: bool,
|
print: bool,
|
||||||
|
|
||||||
/// Print pass timing report
|
/// Print pass timing report
|
||||||
#[structopt(short("T"))]
|
#[clap(short = 'T')]
|
||||||
report_times: bool,
|
report_times: bool,
|
||||||
|
|
||||||
/// Print machine code disassembly
|
/// Print machine code disassembly
|
||||||
#[structopt(short("D"), long("disasm"))]
|
#[clap(short = 'D', long)]
|
||||||
disasm: bool,
|
disasm: bool,
|
||||||
|
|
||||||
/// Configure Cranelift settings
|
/// Configure Cranelift settings
|
||||||
#[structopt(long("set"))]
|
#[clap(long = "set")]
|
||||||
settings: Vec<String>,
|
settings: Vec<String>,
|
||||||
|
|
||||||
/// Specify the Cranelift target
|
/// Specify the Cranelift target
|
||||||
#[structopt(long("target"))]
|
#[clap(long = "target")]
|
||||||
target: String,
|
target: String,
|
||||||
|
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(parse(from_os_str))]
|
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
//! CLI tool to interpret Cranelift IR files.
|
//! CLI tool to interpret Cranelift IR files.
|
||||||
|
|
||||||
use crate::utils::iterate_files;
|
use crate::utils::iterate_files;
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_interpreter::environment::FunctionStore;
|
use cranelift_interpreter::environment::FunctionStore;
|
||||||
use cranelift_interpreter::interpreter::{Interpreter, InterpreterState};
|
use cranelift_interpreter::interpreter::{Interpreter, InterpreterState};
|
||||||
use cranelift_interpreter::step::ControlFlow;
|
use cranelift_interpreter::step::ControlFlow;
|
||||||
use cranelift_reader::{parse_run_command, parse_test, ParseError, ParseOptions};
|
use cranelift_reader::{parse_run_command, parse_test, ParseError, ParseOptions};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::{fs, io};
|
use std::{fs, io};
|
||||||
use structopt::StructOpt;
|
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
/// Interpret clif code
|
/// Interpret clif code
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(required(true), parse(from_os_str))]
|
#[clap(required = true)]
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,20 @@
|
|||||||
|
|
||||||
use crate::utils::read_to_string;
|
use crate::utils::read_to_string;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::cfg_printer::CFGPrinter;
|
use cranelift_codegen::cfg_printer::CFGPrinter;
|
||||||
use cranelift_reader::parse_functions;
|
use cranelift_reader::parse_functions;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
/// Prints out cfg in GraphViz Dot format
|
/// Prints out cfg in GraphViz Dot format
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(required(true), parse(from_os_str))]
|
#[clap(required = true)]
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,27 +2,27 @@
|
|||||||
|
|
||||||
use crate::utils::{iterate_files, read_to_string};
|
use crate::utils::{iterate_files, read_to_string};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::isa::{CallConv, TargetIsa};
|
use cranelift_codegen::isa::{CallConv, TargetIsa};
|
||||||
use cranelift_filetests::SingleFunctionCompiler;
|
use cranelift_filetests::SingleFunctionCompiler;
|
||||||
use cranelift_native::builder as host_isa_builder;
|
use cranelift_native::builder as host_isa_builder;
|
||||||
use cranelift_reader::{parse_run_command, parse_test, Details, IsaSpec, ParseOptions};
|
use cranelift_reader::{parse_run_command, parse_test, Details, IsaSpec, ParseOptions};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use structopt::StructOpt;
|
|
||||||
use target_lexicon::Triple;
|
use target_lexicon::Triple;
|
||||||
|
|
||||||
/// Execute clif code and verify with test expressions
|
/// Execute clif code and verify with test expressions
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(required(true), parse(from_os_str))]
|
#[clap(required = true)]
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use crate::utils::parse_sets_and_triple;
|
use crate::utils::parse_sets_and_triple;
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::Context;
|
use cranelift_codegen::Context;
|
||||||
use cranelift_wasm::{DummyEnvironment, ReturnMode};
|
use cranelift_wasm::{DummyEnvironment, ReturnMode};
|
||||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::{fs, io};
|
use std::{fs, io};
|
||||||
use structopt::StructOpt;
|
|
||||||
|
|
||||||
static WASM_MAGIC: &[u8] = &[0x00, 0x61, 0x73, 0x6D];
|
static WASM_MAGIC: &[u8] = &[0x00, 0x61, 0x73, 0x6D];
|
||||||
|
|
||||||
@@ -13,22 +13,21 @@ static WASM_MAGIC: &[u8] = &[0x00, 0x61, 0x73, 0x6D];
|
|||||||
///
|
///
|
||||||
/// Candidates are emitted in Souper's text format:
|
/// Candidates are emitted in Souper's text format:
|
||||||
/// <https://github.com/google/souper>
|
/// <https://github.com/google/souper>
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(parse(from_os_str))]
|
|
||||||
input: PathBuf,
|
input: PathBuf,
|
||||||
|
|
||||||
/// Specify the output file to be used. Use '-' for stdout.
|
/// Specify the output file to be used. Use '-' for stdout.
|
||||||
#[structopt(short("o"), long("output"), default_value("-"), parse(from_os_str))]
|
#[clap(short, long, default_value("-"))]
|
||||||
output: PathBuf,
|
output: PathBuf,
|
||||||
|
|
||||||
/// Configure Cranelift settings
|
/// Configure Cranelift settings
|
||||||
#[structopt(long("set"))]
|
#[clap(long = "set")]
|
||||||
settings: Vec<String>,
|
settings: Vec<String>,
|
||||||
|
|
||||||
/// Specify the Cranelift target
|
/// Specify the Cranelift target
|
||||||
#[structopt(long("target"))]
|
#[clap(long = "target")]
|
||||||
target: String,
|
target: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
use crate::disasm::print_all;
|
use crate::disasm::print_all;
|
||||||
use crate::utils::parse_sets_and_triple;
|
use crate::utils::parse_sets_and_triple;
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use cranelift_codegen::ir::DisplayFunctionAnnotations;
|
use cranelift_codegen::ir::DisplayFunctionAnnotations;
|
||||||
use cranelift_codegen::print_errors::{pretty_error, pretty_verifier_error};
|
use cranelift_codegen::print_errors::{pretty_error, pretty_verifier_error};
|
||||||
use cranelift_codegen::settings::FlagsOrIsa;
|
use cranelift_codegen::settings::FlagsOrIsa;
|
||||||
@@ -20,7 +21,6 @@ use cranelift_wasm::{translate_module, DummyEnvironment, FuncIndex, ReturnMode};
|
|||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
|
||||||
use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
|
use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
|
||||||
|
|
||||||
/// For verbose printing: only print if the `$x` expression is true.
|
/// For verbose printing: only print if the `$x` expression is true.
|
||||||
@@ -61,58 +61,57 @@ macro_rules! vcprint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Compiles Wasm binary/text into Cranelift IR and then into target language
|
/// Compiles Wasm binary/text into Cranelift IR and then into target language
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
/// Be more verbose
|
/// Be more verbose
|
||||||
#[structopt(short = "v", long = "verbose")]
|
#[clap(short, long)]
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
|
|
||||||
/// Print the resulting Cranelift IR
|
/// Print the resulting Cranelift IR
|
||||||
#[structopt(short("p"))]
|
#[clap(short)]
|
||||||
print: bool,
|
print: bool,
|
||||||
|
|
||||||
/// Print pass timing report
|
/// Print pass timing report
|
||||||
#[structopt(short("T"))]
|
#[clap(short = 'T')]
|
||||||
report_times: bool,
|
report_times: bool,
|
||||||
|
|
||||||
/// Print machine code disassembly
|
/// Print machine code disassembly
|
||||||
#[structopt(short("D"), long("disasm"))]
|
#[clap(short = 'D', long)]
|
||||||
disasm: bool,
|
disasm: bool,
|
||||||
|
|
||||||
/// Configure Cranelift settings
|
/// Configure Cranelift settings
|
||||||
#[structopt(long("set"))]
|
#[clap(long = "set")]
|
||||||
settings: Vec<String>,
|
settings: Vec<String>,
|
||||||
|
|
||||||
/// Specify the Cranelift target
|
/// Specify the Cranelift target
|
||||||
#[structopt(long("target"))]
|
#[clap(long = "target")]
|
||||||
target: String,
|
target: String,
|
||||||
|
|
||||||
/// Specify an input file to be used. Use '-' for stdin.
|
/// Specify an input file to be used. Use '-' for stdin.
|
||||||
#[structopt(parse(from_os_str))]
|
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
|
|
||||||
/// Enable debug output on stderr/stdout
|
/// Enable debug output on stderr/stdout
|
||||||
#[structopt(short = "d")]
|
#[clap(short)]
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
||||||
/// Print bytecode size
|
/// Print bytecode size
|
||||||
#[structopt(short("X"))]
|
#[clap(short = 'X')]
|
||||||
print_size: bool,
|
print_size: bool,
|
||||||
|
|
||||||
/// Just decode Wasm into Cranelift IR, don't compile it to native code
|
/// Just decode Wasm into Cranelift IR, don't compile it to native code
|
||||||
#[structopt(short("t"))]
|
#[clap(short = 't')]
|
||||||
just_decode: bool,
|
just_decode: bool,
|
||||||
|
|
||||||
/// Just checks the correctness of Cranelift IR translated from Wasm
|
/// Just checks the correctness of Cranelift IR translated from Wasm
|
||||||
#[structopt(short("c"))]
|
#[clap(short = 'c')]
|
||||||
check_translation: bool,
|
check_translation: bool,
|
||||||
|
|
||||||
/// Display values' ranges and their locations
|
/// Display values' ranges and their locations
|
||||||
#[structopt(long("value-ranges"))]
|
#[clap(long = "value-ranges")]
|
||||||
value_ranges: bool,
|
value_ranges: bool,
|
||||||
|
|
||||||
/// Use colors in output? [options: auto/never/always; default: auto]
|
/// Use colors in output? [options: auto/never/always; default: auto]
|
||||||
#[structopt(long("color"), default_value("auto"))]
|
#[clap(long = "color", default_value("auto"))]
|
||||||
color: ColorOpt,
|
color: ColorOpt,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ test = false
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
env_logger = "0.8"
|
env_logger = "0.9"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
once_cell = "1.3"
|
once_cell = "1.3"
|
||||||
wasmtime = { path = "../wasmtime", default-features = false, features = ['cranelift', 'wasm-backtrace'] }
|
wasmtime = { path = "../wasmtime", default-features = false, features = ['cranelift', 'wasm-backtrace'] }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ license = "Apache-2.0 WITH LLVM-exception"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.22"
|
anyhow = "1.0.22"
|
||||||
arbitrary = { version = "1.1.0", features = ["derive"] }
|
arbitrary = { version = "1.1.0", features = ["derive"] }
|
||||||
env_logger = "0.8.1"
|
env_logger = "0.9.0"
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
rayon = "1.2.1"
|
rayon = "1.2.1"
|
||||||
target-lexicon = "0.12.3"
|
target-lexicon = "0.12.3"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ include = ["src/**/*", "README.md", "LICENSE"]
|
|||||||
witx = { version = "0.9.1", path = "../../wasi-common/WASI/tools/witx" }
|
witx = { version = "0.9.1", path = "../../wasi-common/WASI/tools/witx" }
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
heck = "0.3"
|
heck = "0.4"
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
syn = { version = "1.0", features = ["full"] }
|
syn = { version = "1.0", features = ["full"] }
|
||||||
shellexpand = "2.0"
|
shellexpand = "2.0"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ mod names;
|
|||||||
mod types;
|
mod types;
|
||||||
pub mod wasmtime;
|
pub mod wasmtime;
|
||||||
|
|
||||||
use heck::ShoutySnakeCase;
|
use heck::ToShoutySnakeCase;
|
||||||
use lifetimes::anon_lifetime;
|
use lifetimes::anon_lifetime;
|
||||||
use proc_macro2::{Literal, TokenStream};
|
use proc_macro2::{Literal, TokenStream};
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use escaping::{escape_id, handle_2big_enum_variant, NamingConvention};
|
use escaping::{escape_id, handle_2big_enum_variant, NamingConvention};
|
||||||
use heck::{ShoutySnakeCase, SnakeCase};
|
use heck::{ToShoutySnakeCase, ToSnakeCase};
|
||||||
use proc_macro2::{Ident, TokenStream};
|
use proc_macro2::{Ident, TokenStream};
|
||||||
use quote::{format_ident, quote};
|
use quote::{format_ident, quote};
|
||||||
use witx::{BuiltinType, Id, Type, TypeRef, WasmType};
|
use witx::{BuiltinType, Id, Type, TypeRef, WasmType};
|
||||||
@@ -216,7 +216,7 @@ impl Names {
|
|||||||
/// variable. `dyn` was promoted to a strict keyword beginning in the 2018 edition.
|
/// variable. `dyn` was promoted to a strict keyword beginning in the 2018 edition.
|
||||||
mod escaping {
|
mod escaping {
|
||||||
use {
|
use {
|
||||||
heck::{CamelCase, SnakeCase},
|
heck::{ToSnakeCase, ToUpperCamelCase},
|
||||||
proc_macro2::Ident,
|
proc_macro2::Ident,
|
||||||
quote::format_ident,
|
quote::format_ident,
|
||||||
witx::Id,
|
witx::Id,
|
||||||
@@ -245,7 +245,7 @@ mod escaping {
|
|||||||
match (conv, id.as_str()) {
|
match (conv, id.as_str()) {
|
||||||
// For camel-cased identifiers, `Self` is the only potential keyword conflict.
|
// For camel-cased identifiers, `Self` is the only potential keyword conflict.
|
||||||
(CamelCase, "self") => format_ident!("Self_"),
|
(CamelCase, "self") => format_ident!("Self_"),
|
||||||
(CamelCase, s) => format_ident!("{}", s.to_camel_case()),
|
(CamelCase, s) => format_ident!("{}", s.to_upper_camel_case()),
|
||||||
// Snake-cased identifiers are where the bulk of conflicts can occur.
|
// Snake-cased identifiers are where the bulk of conflicts can occur.
|
||||||
(SnakeCase, s) => {
|
(SnakeCase, s) => {
|
||||||
let s = s.to_snake_case();
|
let s = s.to_snake_case();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ wiggle = { path = "..", features = ["tracing_log"] }
|
|||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
tracing = "0.1.26"
|
tracing = "0.1.26"
|
||||||
tracing-subscriber = "0.3.1"
|
tracing-subscriber = "0.3.1"
|
||||||
env_logger = "0.8"
|
env_logger = "0.9"
|
||||||
|
|
||||||
[badges]
|
[badges]
|
||||||
maintenance = { status = "actively-developed" }
|
maintenance = { status = "actively-developed" }
|
||||||
|
|||||||
22
deny.toml
22
deny.toml
@@ -27,13 +27,17 @@ multiple-versions = "deny"
|
|||||||
wildcards = "allow"
|
wildcards = "allow"
|
||||||
deny = []
|
deny = []
|
||||||
|
|
||||||
# Skip some multiple-versions checks, until they can be fixed.
|
skip-tree = [
|
||||||
skip = [
|
# Criterion 0.3 is pretty old at this point and has had an upcoming 0.4 for
|
||||||
{ name = "ansi_term" }, # transitive dependencies only
|
# a long time. This is a dev-dependency so we don't really mind its
|
||||||
{ name = "env_logger" }, # pretty_env_logger and file-per-thread-logger depend on 0.7
|
# dependency tree, so skip it entirely.
|
||||||
{ name = "humantime" }, # caused by env_logger
|
{ name = "criterion", depth = 20 },
|
||||||
{ name = "wast" }, # old one pulled in by witx
|
|
||||||
{ name = "quick-error" }, # transitive dependencies
|
# This is maintained externally and we allow it to have duplicate
|
||||||
{ name = "textwrap" }, # `miette` and `clap` depend on different versions
|
# dependencies relative to Wasmtime's main dependency tree.
|
||||||
{ name = "itoa" }, # `rustix` and `criterion` depend on different versions
|
{ name = "witx", depth = 20 },
|
||||||
|
|
||||||
|
# This is somewhat unmaintained at this point and seems to pull in an old
|
||||||
|
# version of `env_logger`, so ignore it.
|
||||||
|
{ name = "pretty_env_logger", depth = 20 },
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,20 +4,15 @@
|
|||||||
//! See `wasmtime --help` for usage.
|
//! See `wasmtime --help` for usage.
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use structopt::{clap::AppSettings, clap::ErrorKind, StructOpt};
|
use clap::{ErrorKind, Parser};
|
||||||
use wasmtime_cli::commands::{
|
use wasmtime_cli::commands::{
|
||||||
CompileCommand, ConfigCommand, RunCommand, SettingsCommand, WastCommand,
|
CompileCommand, ConfigCommand, RunCommand, SettingsCommand, WastCommand,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Wasmtime WebAssembly Runtime
|
/// Wasmtime WebAssembly Runtime
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(
|
#[clap(
|
||||||
name = "wasmtime",
|
version,
|
||||||
version = env!("CARGO_PKG_VERSION"),
|
|
||||||
global_settings = &[
|
|
||||||
AppSettings::VersionlessSubcommands,
|
|
||||||
AppSettings::ColoredHelp
|
|
||||||
],
|
|
||||||
after_help = "If a subcommand is not provided, the `run` subcommand will be used.\n\
|
after_help = "If a subcommand is not provided, the `run` subcommand will be used.\n\
|
||||||
\n\
|
\n\
|
||||||
Usage examples:\n\
|
Usage examples:\n\
|
||||||
@@ -34,7 +29,7 @@ use wasmtime_cli::commands::{
|
|||||||
\n \
|
\n \
|
||||||
wasmtime example.wasm --invoke add 1 2\n"
|
wasmtime example.wasm --invoke add 1 2\n"
|
||||||
)]
|
)]
|
||||||
enum WasmtimeApp {
|
enum Wasmtime {
|
||||||
// !!! IMPORTANT: if subcommands are added or removed, update `parse_module` in `src/commands/run.rs`. !!!
|
// !!! IMPORTANT: if subcommands are added or removed, update `parse_module` in `src/commands/run.rs`. !!!
|
||||||
/// Controls Wasmtime configuration settings
|
/// Controls Wasmtime configuration settings
|
||||||
Config(ConfigCommand),
|
Config(ConfigCommand),
|
||||||
@@ -48,7 +43,7 @@ enum WasmtimeApp {
|
|||||||
Wast(WastCommand),
|
Wast(WastCommand),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WasmtimeApp {
|
impl Wasmtime {
|
||||||
/// Executes the command.
|
/// Executes the command.
|
||||||
pub fn execute(self) -> Result<()> {
|
pub fn execute(self) -> Result<()> {
|
||||||
match self {
|
match self {
|
||||||
@@ -62,14 +57,13 @@ impl WasmtimeApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
WasmtimeApp::from_iter_safe(std::env::args())
|
Wasmtime::try_parse()
|
||||||
.unwrap_or_else(|e| match e.kind {
|
.unwrap_or_else(|e| match e.kind() {
|
||||||
ErrorKind::HelpDisplayed
|
ErrorKind::DisplayHelp
|
||||||
| ErrorKind::VersionDisplayed
|
| ErrorKind::DisplayVersion
|
||||||
| ErrorKind::MissingArgumentOrSubcommand => e.exit(),
|
| ErrorKind::MissingSubcommand
|
||||||
_ => WasmtimeApp::Run(
|
| ErrorKind::MissingRequiredArgument => e.exit(),
|
||||||
RunCommand::from_iter_safe(std::env::args()).unwrap_or_else(|_| e.exit()),
|
_ => Wasmtime::Run(RunCommand::parse()),
|
||||||
),
|
|
||||||
})
|
})
|
||||||
.execute()
|
.execute()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
use crate::CommonOptions;
|
use crate::CommonOptions;
|
||||||
use anyhow::{bail, Context, Result};
|
use anyhow::{bail, Context, Result};
|
||||||
|
use clap::Parser;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::{clap::AppSettings, StructOpt};
|
|
||||||
use target_lexicon::Triple;
|
use target_lexicon::Triple;
|
||||||
use wasmtime::Engine;
|
use wasmtime::Engine;
|
||||||
|
|
||||||
@@ -34,27 +34,26 @@ lazy_static::lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Compiles a WebAssembly module.
|
/// Compiles a WebAssembly module.
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(
|
#[structopt(
|
||||||
name = "compile",
|
name = "compile",
|
||||||
version = env!("CARGO_PKG_VERSION"),
|
version,
|
||||||
setting = AppSettings::ColoredHelp,
|
|
||||||
after_help = AFTER_HELP.as_str()
|
after_help = AFTER_HELP.as_str()
|
||||||
)]
|
)]
|
||||||
pub struct CompileCommand {
|
pub struct CompileCommand {
|
||||||
#[structopt(flatten)]
|
#[clap(flatten)]
|
||||||
common: CommonOptions,
|
common: CommonOptions,
|
||||||
|
|
||||||
/// The target triple; default is the host triple
|
/// The target triple; default is the host triple
|
||||||
#[structopt(long, value_name = "TARGET")]
|
#[clap(long, value_name = "TARGET")]
|
||||||
target: Option<String>,
|
target: Option<String>,
|
||||||
|
|
||||||
/// The path of the output compiled module; defaults to <MODULE>.cwasm
|
/// The path of the output compiled module; defaults to <MODULE>.cwasm
|
||||||
#[structopt(short = "o", long, value_name = "OUTPUT", parse(from_os_str))]
|
#[clap(short = 'o', long, value_name = "OUTPUT", parse(from_os_str))]
|
||||||
output: Option<PathBuf>,
|
output: Option<PathBuf>,
|
||||||
|
|
||||||
/// The path of the WebAssembly to compile
|
/// The path of the WebAssembly to compile
|
||||||
#[structopt(index = 1, value_name = "MODULE", parse(from_os_str))]
|
#[clap(index = 1, value_name = "MODULE", parse(from_os_str))]
|
||||||
module: PathBuf,
|
module: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +109,7 @@ mod test {
|
|||||||
|
|
||||||
let output_path = NamedTempFile::new()?.into_temp_path();
|
let output_path = NamedTempFile::new()?.into_temp_path();
|
||||||
|
|
||||||
let command = CompileCommand::from_iter_safe(vec![
|
let command = CompileCommand::try_parse_from(vec![
|
||||||
"compile",
|
"compile",
|
||||||
"--disable-logging",
|
"--disable-logging",
|
||||||
"-o",
|
"-o",
|
||||||
@@ -141,7 +140,7 @@ mod test {
|
|||||||
let output_path = NamedTempFile::new()?.into_temp_path();
|
let output_path = NamedTempFile::new()?.into_temp_path();
|
||||||
|
|
||||||
// Set all the x64 flags to make sure they work
|
// Set all the x64 flags to make sure they work
|
||||||
let command = CompileCommand::from_iter_safe(vec![
|
let command = CompileCommand::try_parse_from(vec![
|
||||||
"compile",
|
"compile",
|
||||||
"--disable-logging",
|
"--disable-logging",
|
||||||
"--cranelift-enable",
|
"--cranelift-enable",
|
||||||
@@ -190,7 +189,7 @@ mod test {
|
|||||||
let output_path = NamedTempFile::new()?.into_temp_path();
|
let output_path = NamedTempFile::new()?.into_temp_path();
|
||||||
|
|
||||||
// Set all the aarch64 flags to make sure they work
|
// Set all the aarch64 flags to make sure they work
|
||||||
let command = CompileCommand::from_iter_safe(vec![
|
let command = CompileCommand::try_parse_from(vec![
|
||||||
"compile",
|
"compile",
|
||||||
"--disable-logging",
|
"--disable-logging",
|
||||||
"--cranelift-enable",
|
"--cranelift-enable",
|
||||||
@@ -215,7 +214,7 @@ mod test {
|
|||||||
let output_path = NamedTempFile::new()?.into_temp_path();
|
let output_path = NamedTempFile::new()?.into_temp_path();
|
||||||
|
|
||||||
// aarch64 flags should not be supported
|
// aarch64 flags should not be supported
|
||||||
let command = CompileCommand::from_iter_safe(vec![
|
let command = CompileCommand::try_parse_from(vec![
|
||||||
"compile",
|
"compile",
|
||||||
"--disable-logging",
|
"--disable-logging",
|
||||||
"--cranelift-enable",
|
"--cranelift-enable",
|
||||||
@@ -251,7 +250,7 @@ mod test {
|
|||||||
"icelake",
|
"icelake",
|
||||||
"znver1",
|
"znver1",
|
||||||
] {
|
] {
|
||||||
let command = CompileCommand::from_iter_safe(vec![
|
let command = CompileCommand::try_parse_from(vec![
|
||||||
"compile",
|
"compile",
|
||||||
"--disable-logging",
|
"--disable-logging",
|
||||||
"--cranelift-enable",
|
"--cranelift-enable",
|
||||||
|
|||||||
@@ -1,35 +1,41 @@
|
|||||||
//! The module that implements the `wasmtime config` command.
|
//! The module that implements the `wasmtime config` command.
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use structopt::StructOpt;
|
use clap::Parser;
|
||||||
|
|
||||||
const CONFIG_NEW_AFTER_HELP: &str =
|
const CONFIG_NEW_AFTER_HELP: &str =
|
||||||
"If no file path is specified, the system configuration file path will be used.";
|
"If no file path is specified, the system configuration file path will be used.";
|
||||||
|
|
||||||
/// Controls Wasmtime configuration settings
|
/// Controls Wasmtime configuration settings
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(name = "run")]
|
#[clap(name = "config")]
|
||||||
pub enum ConfigCommand {
|
pub struct ConfigCommand {
|
||||||
|
#[clap(subcommand)]
|
||||||
|
subcommand: ConfigSubcommand,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(clap::Subcommand)]
|
||||||
|
enum ConfigSubcommand {
|
||||||
/// Creates a new Wasmtime configuration file
|
/// Creates a new Wasmtime configuration file
|
||||||
#[structopt(after_help = CONFIG_NEW_AFTER_HELP)]
|
#[clap(after_help = CONFIG_NEW_AFTER_HELP)]
|
||||||
New(ConfigNewCommand),
|
New(ConfigNewCommand),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ConfigCommand {
|
impl ConfigCommand {
|
||||||
/// Executes the command.
|
/// Executes the command.
|
||||||
pub fn execute(self) -> Result<()> {
|
pub fn execute(self) -> Result<()> {
|
||||||
match self {
|
match self.subcommand {
|
||||||
Self::New(c) => c.execute(),
|
ConfigSubcommand::New(c) => c.execute(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new Wasmtime configuration file
|
/// Creates a new Wasmtime configuration file
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(name = "new", after_help = CONFIG_NEW_AFTER_HELP)]
|
#[clap(name = "new", after_help = CONFIG_NEW_AFTER_HELP)]
|
||||||
pub struct ConfigNewCommand {
|
pub struct ConfigNewCommand {
|
||||||
/// The path of the new configuration file
|
/// The path of the new configuration file
|
||||||
#[structopt(index = 1, value_name = "FILE_PATH")]
|
#[clap(index = 1, value_name = "FILE_PATH")]
|
||||||
path: Option<String>,
|
path: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
use crate::{CommonOptions, WasiModules};
|
use crate::{CommonOptions, WasiModules};
|
||||||
use anyhow::{anyhow, bail, Context as _, Result};
|
use anyhow::{anyhow, bail, Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{
|
use std::{
|
||||||
ffi::{OsStr, OsString},
|
ffi::OsStr,
|
||||||
path::{Component, Path, PathBuf},
|
path::{Component, Path, PathBuf},
|
||||||
process,
|
process,
|
||||||
};
|
};
|
||||||
use structopt::{clap::AppSettings, StructOpt};
|
|
||||||
use wasmtime::{Engine, Func, Linker, Module, Store, Trap, Val, ValType};
|
use wasmtime::{Engine, Func, Linker, Module, Store, Trap, Val, ValType};
|
||||||
use wasmtime_wasi::sync::{ambient_authority, Dir, TcpListener, WasiCtxBuilder};
|
use wasmtime_wasi::sync::{ambient_authority, Dir, TcpListener, WasiCtxBuilder};
|
||||||
|
|
||||||
@@ -21,11 +21,11 @@ use wasmtime_wasi_nn::WasiNnCtx;
|
|||||||
#[cfg(feature = "wasi-crypto")]
|
#[cfg(feature = "wasi-crypto")]
|
||||||
use wasmtime_wasi_crypto::WasiCryptoCtx;
|
use wasmtime_wasi_crypto::WasiCryptoCtx;
|
||||||
|
|
||||||
fn parse_module(s: &OsStr) -> Result<PathBuf, OsString> {
|
fn parse_module(s: &OsStr) -> anyhow::Result<PathBuf> {
|
||||||
// Do not accept wasmtime subcommand names as the module name
|
// Do not accept wasmtime subcommand names as the module name
|
||||||
match s.to_str() {
|
match s.to_str() {
|
||||||
Some("help") | Some("config") | Some("run") | Some("wast") | Some("compile") => {
|
Some("help") | Some("config") | Some("run") | Some("wast") | Some("compile") => {
|
||||||
Err("module name cannot be the same as a subcommand".into())
|
bail!("module name cannot be the same as a subcommand")
|
||||||
}
|
}
|
||||||
_ => Ok(s.into()),
|
_ => Ok(s.into()),
|
||||||
}
|
}
|
||||||
@@ -72,14 +72,14 @@ lazy_static::lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Runs a WebAssembly module
|
/// Runs a WebAssembly module
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(name = "run", setting = AppSettings::TrailingVarArg, after_help = AFTER_HELP.as_str())]
|
#[structopt(name = "run", trailing_var_arg = true, after_help = AFTER_HELP.as_str())]
|
||||||
pub struct RunCommand {
|
pub struct RunCommand {
|
||||||
#[structopt(flatten)]
|
#[clap(flatten)]
|
||||||
common: CommonOptions,
|
common: CommonOptions,
|
||||||
|
|
||||||
/// Allow unknown exports when running commands.
|
/// Allow unknown exports when running commands.
|
||||||
#[structopt(long = "allow-unknown-exports")]
|
#[clap(long = "allow-unknown-exports")]
|
||||||
allow_unknown_exports: bool,
|
allow_unknown_exports: bool,
|
||||||
|
|
||||||
/// Allow executing precompiled WebAssembly modules as `*.cwasm` files.
|
/// Allow executing precompiled WebAssembly modules as `*.cwasm` files.
|
||||||
@@ -88,16 +88,16 @@ pub struct RunCommand {
|
|||||||
/// is arbitrary user input. Only `wasmtime`-precompiled modules generated
|
/// is arbitrary user input. Only `wasmtime`-precompiled modules generated
|
||||||
/// via the `wasmtime compile` command or equivalent should be passed as an
|
/// via the `wasmtime compile` command or equivalent should be passed as an
|
||||||
/// argument with this option specified.
|
/// argument with this option specified.
|
||||||
#[structopt(long = "allow-precompiled")]
|
#[clap(long = "allow-precompiled")]
|
||||||
allow_precompiled: bool,
|
allow_precompiled: bool,
|
||||||
|
|
||||||
/// Inherit environment variables and file descriptors following the
|
/// Inherit environment variables and file descriptors following the
|
||||||
/// systemd listen fd specification (UNIX only)
|
/// systemd listen fd specification (UNIX only)
|
||||||
#[structopt(long = "listenfd")]
|
#[clap(long = "listenfd")]
|
||||||
listenfd: bool,
|
listenfd: bool,
|
||||||
|
|
||||||
/// Grant access to the given TCP listen socket
|
/// Grant access to the given TCP listen socket
|
||||||
#[structopt(
|
#[clap(
|
||||||
long = "tcplisten",
|
long = "tcplisten",
|
||||||
number_of_values = 1,
|
number_of_values = 1,
|
||||||
value_name = "SOCKET ADDRESS"
|
value_name = "SOCKET ADDRESS"
|
||||||
@@ -105,24 +105,23 @@ pub struct RunCommand {
|
|||||||
tcplisten: Vec<String>,
|
tcplisten: Vec<String>,
|
||||||
|
|
||||||
/// Grant access to the given host directory
|
/// Grant access to the given host directory
|
||||||
#[structopt(long = "dir", number_of_values = 1, value_name = "DIRECTORY")]
|
#[clap(long = "dir", number_of_values = 1, value_name = "DIRECTORY")]
|
||||||
dirs: Vec<String>,
|
dirs: Vec<String>,
|
||||||
|
|
||||||
/// Pass an environment variable to the program
|
/// Pass an environment variable to the program
|
||||||
#[structopt(long = "env", number_of_values = 1, value_name = "NAME=VAL", parse(try_from_str = parse_env_var))]
|
#[clap(long = "env", number_of_values = 1, value_name = "NAME=VAL", parse(try_from_str = parse_env_var))]
|
||||||
vars: Vec<(String, String)>,
|
vars: Vec<(String, String)>,
|
||||||
|
|
||||||
/// The name of the function to run
|
/// The name of the function to run
|
||||||
#[structopt(long, value_name = "FUNCTION")]
|
#[clap(long, value_name = "FUNCTION")]
|
||||||
invoke: Option<String>,
|
invoke: Option<String>,
|
||||||
|
|
||||||
/// Grant access to a guest directory mapped as a host directory
|
/// Grant access to a guest directory mapped as a host directory
|
||||||
#[structopt(long = "mapdir", number_of_values = 1, value_name = "GUEST_DIR::HOST_DIR", parse(try_from_str = parse_map_dirs))]
|
#[clap(long = "mapdir", number_of_values = 1, value_name = "GUEST_DIR::HOST_DIR", parse(try_from_str = parse_map_dirs))]
|
||||||
map_dirs: Vec<(String, String)>,
|
map_dirs: Vec<(String, String)>,
|
||||||
|
|
||||||
/// The path of the WebAssembly module to run
|
/// The path of the WebAssembly module to run
|
||||||
#[structopt(
|
#[clap(
|
||||||
index = 1,
|
|
||||||
required = true,
|
required = true,
|
||||||
value_name = "MODULE",
|
value_name = "MODULE",
|
||||||
parse(try_from_os_str = parse_module),
|
parse(try_from_os_str = parse_module),
|
||||||
@@ -130,7 +129,7 @@ pub struct RunCommand {
|
|||||||
module: PathBuf,
|
module: PathBuf,
|
||||||
|
|
||||||
/// Load the given WebAssembly module before the main module
|
/// Load the given WebAssembly module before the main module
|
||||||
#[structopt(
|
#[clap(
|
||||||
long = "preload",
|
long = "preload",
|
||||||
number_of_values = 1,
|
number_of_values = 1,
|
||||||
value_name = "NAME=MODULE_PATH",
|
value_name = "NAME=MODULE_PATH",
|
||||||
@@ -139,7 +138,7 @@ pub struct RunCommand {
|
|||||||
preloads: Vec<(String, PathBuf)>,
|
preloads: Vec<(String, PathBuf)>,
|
||||||
|
|
||||||
/// Maximum execution time of wasm code before timing out (1, 2s, 100ms, etc)
|
/// Maximum execution time of wasm code before timing out (1, 2s, 100ms, etc)
|
||||||
#[structopt(
|
#[clap(
|
||||||
long = "wasm-timeout",
|
long = "wasm-timeout",
|
||||||
value_name = "TIME",
|
value_name = "TIME",
|
||||||
parse(try_from_str = parse_dur),
|
parse(try_from_str = parse_dur),
|
||||||
@@ -148,7 +147,7 @@ pub struct RunCommand {
|
|||||||
|
|
||||||
// NOTE: this must come last for trailing varargs
|
// NOTE: this must come last for trailing varargs
|
||||||
/// The arguments to pass to the module
|
/// The arguments to pass to the module
|
||||||
#[structopt(value_name = "ARGS")]
|
#[clap(value_name = "ARGS")]
|
||||||
module_args: Vec<String>,
|
module_args: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
//! The module that implements the `wasmtime settings` command.
|
//! The module that implements the `wasmtime settings` command.
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
|
use clap::Parser;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use structopt::StructOpt;
|
|
||||||
use wasmtime_environ::{FlagValue, Setting, SettingKind};
|
use wasmtime_environ::{FlagValue, Setting, SettingKind};
|
||||||
|
|
||||||
/// Displays available Cranelift settings for a target.
|
/// Displays available Cranelift settings for a target.
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(name = "run")]
|
#[clap(name = "run")]
|
||||||
pub struct SettingsCommand {
|
pub struct SettingsCommand {
|
||||||
/// The target triple to get the settings for; defaults to the host triple.
|
/// The target triple to get the settings for; defaults to the host triple.
|
||||||
#[structopt(long, value_name = "TARGET")]
|
#[clap(long, value_name = "TARGET")]
|
||||||
target: Option<String>,
|
target: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use crate::CommonOptions;
|
use crate::CommonOptions;
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use clap::Parser;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::{clap::AppSettings, StructOpt};
|
|
||||||
use wasmtime::{Engine, Store};
|
use wasmtime::{Engine, Store};
|
||||||
use wasmtime_wast::WastContext;
|
use wasmtime_wast::WastContext;
|
||||||
|
|
||||||
@@ -14,19 +14,18 @@ lazy_static::lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Runs a WebAssembly test script file
|
/// Runs a WebAssembly test script file
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
#[structopt(
|
#[clap(
|
||||||
name = "wast",
|
name = "wast",
|
||||||
version = env!("CARGO_PKG_VERSION"),
|
version,
|
||||||
setting = AppSettings::ColoredHelp,
|
|
||||||
after_help = AFTER_HELP.as_str(),
|
after_help = AFTER_HELP.as_str(),
|
||||||
)]
|
)]
|
||||||
pub struct WastCommand {
|
pub struct WastCommand {
|
||||||
#[structopt(flatten)]
|
#[clap(flatten)]
|
||||||
common: CommonOptions,
|
common: CommonOptions,
|
||||||
|
|
||||||
/// The path of the WebAssembly test script to run
|
/// The path of the WebAssembly test script to run
|
||||||
#[structopt(required = true, value_name = "SCRIPT_FILE", parse(from_os_str))]
|
#[clap(required = true, value_name = "SCRIPT_FILE", parse(from_os_str))]
|
||||||
scripts: Vec<PathBuf>,
|
scripts: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
70
src/lib.rs
70
src/lib.rs
@@ -92,9 +92,9 @@ lazy_static::lazy_static! {
|
|||||||
pub mod commands;
|
pub mod commands;
|
||||||
|
|
||||||
use anyhow::{bail, Result};
|
use anyhow::{bail, Result};
|
||||||
|
use clap::Parser;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
|
||||||
use wasmtime::{Config, ProfilingStrategy};
|
use wasmtime::{Config, ProfilingStrategy};
|
||||||
#[cfg(feature = "pooling-allocator")]
|
#[cfg(feature = "pooling-allocator")]
|
||||||
use wasmtime::{InstanceLimits, PoolingAllocationStrategy};
|
use wasmtime::{InstanceLimits, PoolingAllocationStrategy};
|
||||||
@@ -138,51 +138,51 @@ fn init_file_per_thread_logger(prefix: &'static str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Common options for commands that translate WebAssembly modules
|
/// Common options for commands that translate WebAssembly modules
|
||||||
#[derive(StructOpt)]
|
#[derive(Parser)]
|
||||||
struct CommonOptions {
|
struct CommonOptions {
|
||||||
/// Use specified configuration file
|
/// Use specified configuration file
|
||||||
#[structopt(long, parse(from_os_str), value_name = "CONFIG_PATH")]
|
#[clap(long, parse(from_os_str), value_name = "CONFIG_PATH")]
|
||||||
config: Option<PathBuf>,
|
config: Option<PathBuf>,
|
||||||
|
|
||||||
/// Disable logging.
|
/// Disable logging.
|
||||||
#[structopt(long, conflicts_with = "log_to_files")]
|
#[clap(long, conflicts_with = "log-to-files")]
|
||||||
disable_logging: bool,
|
disable_logging: bool,
|
||||||
|
|
||||||
/// Log to per-thread log files instead of stderr.
|
/// Log to per-thread log files instead of stderr.
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
log_to_files: bool,
|
log_to_files: bool,
|
||||||
|
|
||||||
/// Generate debug information
|
/// Generate debug information
|
||||||
#[structopt(short = "g")]
|
#[clap(short = 'g')]
|
||||||
debug_info: bool,
|
debug_info: bool,
|
||||||
|
|
||||||
/// Disable cache system
|
/// Disable cache system
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
disable_cache: bool,
|
disable_cache: bool,
|
||||||
|
|
||||||
/// Enables or disables WebAssembly features
|
/// Enables or disables WebAssembly features
|
||||||
#[structopt(long, value_name = "FEATURE,FEATURE,...", parse(try_from_str = parse_wasm_features))]
|
#[clap(long, value_name = "FEATURE,FEATURE,...", parse(try_from_str = parse_wasm_features))]
|
||||||
wasm_features: Option<WasmFeatures>,
|
wasm_features: Option<WasmFeatures>,
|
||||||
|
|
||||||
/// Enables or disables WASI modules
|
/// Enables or disables WASI modules
|
||||||
#[structopt(long, value_name = "MODULE,MODULE,...", parse(try_from_str = parse_wasi_modules))]
|
#[clap(long, value_name = "MODULE,MODULE,...", parse(try_from_str = parse_wasi_modules))]
|
||||||
wasi_modules: Option<WasiModules>,
|
wasi_modules: Option<WasiModules>,
|
||||||
|
|
||||||
/// Generate jitdump file (supported on --features=profiling build)
|
/// Generate jitdump file (supported on --features=profiling build)
|
||||||
#[structopt(long, conflicts_with = "vtune")]
|
#[clap(long, conflicts_with = "vtune")]
|
||||||
jitdump: bool,
|
jitdump: bool,
|
||||||
|
|
||||||
/// Generate vtune (supported on --features=vtune build)
|
/// Generate vtune (supported on --features=vtune build)
|
||||||
#[structopt(long, conflicts_with = "jitdump")]
|
#[clap(long, conflicts_with = "jitdump")]
|
||||||
vtune: bool,
|
vtune: bool,
|
||||||
|
|
||||||
/// Run optimization passes on translated functions, on by default
|
/// Run optimization passes on translated functions, on by default
|
||||||
#[structopt(short = "O", long)]
|
#[clap(short = 'O', long)]
|
||||||
optimize: bool,
|
optimize: bool,
|
||||||
|
|
||||||
/// Optimization level for generated functions
|
/// Optimization level for generated functions
|
||||||
/// Supported levels: 0 (none), 1, 2 (most), or s (size); default is "most"
|
/// Supported levels: 0 (none), 1, 2 (most), or s (size); default is "most"
|
||||||
#[structopt(
|
#[clap(
|
||||||
long,
|
long,
|
||||||
value_name = "LEVEL",
|
value_name = "LEVEL",
|
||||||
parse(try_from_str = parse_opt_level),
|
parse(try_from_str = parse_opt_level),
|
||||||
@@ -192,12 +192,12 @@ struct CommonOptions {
|
|||||||
|
|
||||||
/// Set a Cranelift setting to a given value.
|
/// Set a Cranelift setting to a given value.
|
||||||
/// Use `wasmtime settings` to list Cranelift settings for a target.
|
/// Use `wasmtime settings` to list Cranelift settings for a target.
|
||||||
#[structopt(long = "cranelift-set", value_name = "NAME=VALUE", number_of_values = 1, verbatim_doc_comment, parse(try_from_str = parse_cranelift_flag))]
|
#[clap(long = "cranelift-set", value_name = "NAME=VALUE", number_of_values = 1, verbatim_doc_comment, parse(try_from_str = parse_cranelift_flag))]
|
||||||
cranelift_set: Vec<(String, String)>,
|
cranelift_set: Vec<(String, String)>,
|
||||||
|
|
||||||
/// Enable a Cranelift boolean setting or preset.
|
/// Enable a Cranelift boolean setting or preset.
|
||||||
/// Use `wasmtime settings` to list Cranelift settings for a target.
|
/// Use `wasmtime settings` to list Cranelift settings for a target.
|
||||||
#[structopt(
|
#[clap(
|
||||||
long,
|
long,
|
||||||
value_name = "SETTING",
|
value_name = "SETTING",
|
||||||
number_of_values = 1,
|
number_of_values = 1,
|
||||||
@@ -207,27 +207,27 @@ struct CommonOptions {
|
|||||||
|
|
||||||
/// Maximum size in bytes of wasm memory before it becomes dynamically
|
/// Maximum size in bytes of wasm memory before it becomes dynamically
|
||||||
/// relocatable instead of up-front-reserved.
|
/// relocatable instead of up-front-reserved.
|
||||||
#[structopt(long, value_name = "MAXIMUM")]
|
#[clap(long, value_name = "MAXIMUM")]
|
||||||
static_memory_maximum_size: Option<u64>,
|
static_memory_maximum_size: Option<u64>,
|
||||||
|
|
||||||
/// Force using a "static" style for all wasm memories.
|
/// Force using a "static" style for all wasm memories.
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
static_memory_forced: bool,
|
static_memory_forced: bool,
|
||||||
|
|
||||||
/// Byte size of the guard region after static memories are allocated.
|
/// Byte size of the guard region after static memories are allocated.
|
||||||
#[structopt(long, value_name = "SIZE")]
|
#[clap(long, value_name = "SIZE")]
|
||||||
static_memory_guard_size: Option<u64>,
|
static_memory_guard_size: Option<u64>,
|
||||||
|
|
||||||
/// Byte size of the guard region after dynamic memories are allocated.
|
/// Byte size of the guard region after dynamic memories are allocated.
|
||||||
#[structopt(long, value_name = "SIZE")]
|
#[clap(long, value_name = "SIZE")]
|
||||||
dynamic_memory_guard_size: Option<u64>,
|
dynamic_memory_guard_size: Option<u64>,
|
||||||
|
|
||||||
/// Enable Cranelift's internal debug verifier (expensive)
|
/// Enable Cranelift's internal debug verifier (expensive)
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
enable_cranelift_debug_verifier: bool,
|
enable_cranelift_debug_verifier: bool,
|
||||||
|
|
||||||
/// Enable Cranelift's internal NaN canonicalization
|
/// Enable Cranelift's internal NaN canonicalization
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
enable_cranelift_nan_canonicalization: bool,
|
enable_cranelift_nan_canonicalization: bool,
|
||||||
|
|
||||||
/// Enable execution fuel with N units fuel, where execution will trap after
|
/// Enable execution fuel with N units fuel, where execution will trap after
|
||||||
@@ -237,29 +237,29 @@ struct CommonOptions {
|
|||||||
/// such as `nop`, `drop`, `block`, and `loop`, consume 0 units, as any
|
/// such as `nop`, `drop`, `block`, and `loop`, consume 0 units, as any
|
||||||
/// execution cost associated with them involves other instructions which do
|
/// execution cost associated with them involves other instructions which do
|
||||||
/// consume fuel.
|
/// consume fuel.
|
||||||
#[structopt(long, value_name = "N")]
|
#[clap(long, value_name = "N")]
|
||||||
fuel: Option<u64>,
|
fuel: Option<u64>,
|
||||||
|
|
||||||
/// Executing wasm code will yield when a global epoch counter
|
/// Executing wasm code will yield when a global epoch counter
|
||||||
/// changes, allowing for async operation without blocking the
|
/// changes, allowing for async operation without blocking the
|
||||||
/// executor.
|
/// executor.
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
epoch_interruption: bool,
|
epoch_interruption: bool,
|
||||||
|
|
||||||
/// Disables the on-by-default address map from native code to wasm code.
|
/// Disables the on-by-default address map from native code to wasm code.
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
disable_address_map: bool,
|
disable_address_map: bool,
|
||||||
|
|
||||||
/// Disables the default of attempting to initialize linear memory via a
|
/// Disables the default of attempting to initialize linear memory via a
|
||||||
/// copy-on-write mapping.
|
/// copy-on-write mapping.
|
||||||
#[cfg(feature = "memory-init-cow")]
|
#[cfg(feature = "memory-init-cow")]
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
disable_memory_init_cow: bool,
|
disable_memory_init_cow: bool,
|
||||||
|
|
||||||
/// Enables the pooling allocator, in place of the on-demand
|
/// Enables the pooling allocator, in place of the on-demand
|
||||||
/// allocator.
|
/// allocator.
|
||||||
#[cfg(feature = "pooling-allocator")]
|
#[cfg(feature = "pooling-allocator")]
|
||||||
#[structopt(long)]
|
#[clap(long)]
|
||||||
pooling_allocator: bool,
|
pooling_allocator: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,7 +561,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_all_features() -> Result<()> {
|
fn test_all_features() -> Result<()> {
|
||||||
let options = CommonOptions::from_iter_safe(vec!["foo", "--wasm-features=all"])?;
|
let options = CommonOptions::try_parse_from(vec!["foo", "--wasm-features=all"])?;
|
||||||
|
|
||||||
let WasmFeatures {
|
let WasmFeatures {
|
||||||
reference_types,
|
reference_types,
|
||||||
@@ -586,7 +586,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_no_features() -> Result<()> {
|
fn test_no_features() -> Result<()> {
|
||||||
let options = CommonOptions::from_iter_safe(vec!["foo", "--wasm-features=-all"])?;
|
let options = CommonOptions::try_parse_from(vec!["foo", "--wasm-features=-all"])?;
|
||||||
|
|
||||||
let WasmFeatures {
|
let WasmFeatures {
|
||||||
reference_types,
|
reference_types,
|
||||||
@@ -611,7 +611,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_multiple_features() -> Result<()> {
|
fn test_multiple_features() -> Result<()> {
|
||||||
let options = CommonOptions::from_iter_safe(vec![
|
let options = CommonOptions::try_parse_from(vec![
|
||||||
"foo",
|
"foo",
|
||||||
"--wasm-features=-reference-types,simd,multi-memory,memory64",
|
"--wasm-features=-reference-types,simd,multi-memory,memory64",
|
||||||
])?;
|
])?;
|
||||||
@@ -642,13 +642,13 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn $test_name() -> Result<()> {
|
fn $test_name() -> Result<()> {
|
||||||
let options =
|
let options =
|
||||||
CommonOptions::from_iter_safe(vec!["foo", concat!("--wasm-features=", $flag)])?;
|
CommonOptions::try_parse_from(vec!["foo", concat!("--wasm-features=", $flag)])?;
|
||||||
|
|
||||||
let WasmFeatures { $name, .. } = options.wasm_features.unwrap();
|
let WasmFeatures { $name, .. } = options.wasm_features.unwrap();
|
||||||
|
|
||||||
assert_eq!($name, Some(true));
|
assert_eq!($name, Some(true));
|
||||||
|
|
||||||
let options = CommonOptions::from_iter_safe(vec![
|
let options = CommonOptions::try_parse_from(vec![
|
||||||
"foo",
|
"foo",
|
||||||
concat!("--wasm-features=-", $flag),
|
concat!("--wasm-features=-", $flag),
|
||||||
])?;
|
])?;
|
||||||
@@ -676,7 +676,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_default_modules() {
|
fn test_default_modules() {
|
||||||
let options = CommonOptions::from_iter_safe(vec!["foo", "--wasi-modules=default"]).unwrap();
|
let options = CommonOptions::try_parse_from(vec!["foo", "--wasi-modules=default"]).unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
options.wasi_modules.unwrap(),
|
options.wasi_modules.unwrap(),
|
||||||
WasiModules {
|
WasiModules {
|
||||||
@@ -689,7 +689,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_empty_modules() {
|
fn test_empty_modules() {
|
||||||
let options = CommonOptions::from_iter_safe(vec!["foo", "--wasi-modules="]).unwrap();
|
let options = CommonOptions::try_parse_from(vec!["foo", "--wasi-modules="]).unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
options.wasi_modules.unwrap(),
|
options.wasi_modules.unwrap(),
|
||||||
WasiModules {
|
WasiModules {
|
||||||
@@ -702,7 +702,7 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_some_modules() {
|
fn test_some_modules() {
|
||||||
let options = CommonOptions::from_iter_safe(vec![
|
let options = CommonOptions::try_parse_from(vec![
|
||||||
"foo",
|
"foo",
|
||||||
"--wasi-modules=experimental-wasi-nn,-wasi-common",
|
"--wasi-modules=experimental-wasi-nn,-wasi-common",
|
||||||
])
|
])
|
||||||
@@ -720,7 +720,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_no_modules() {
|
fn test_no_modules() {
|
||||||
let options =
|
let options =
|
||||||
CommonOptions::from_iter_safe(vec!["foo", "--wasi-modules=-default"]).unwrap();
|
CommonOptions::try_parse_from(vec!["foo", "--wasi-modules=-default"]).unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
options.wasi_modules.unwrap(),
|
options.wasi_modules.unwrap(),
|
||||||
WasiModules {
|
WasiModules {
|
||||||
|
|||||||
Reference in New Issue
Block a user