To install the `wasm-snip` executable, run
$ cargo install wasm-snip
You can use `wasm-snip` to remove the `annoying_space_waster`
function from `input.wasm` and put the new binary in `output.wasm` like this:
$ wasm-snip input.wasm -o output.wasm annoying_space_waster
For information on using the `wasm-snip` executable, run
$ wasm-snip --help
And you'll get the most up-to-date help text, like:
Replace a wasm function with an `unreachable`.
wasm-snip [FLAGS] [OPTIONS] <input> [--] [function]...
-h, --help Prints help information
--snip-rust-fmt-code Snip Rust's `std::fmt` and `core::fmt` code.
--snip-rust-panicking-code Snip Rust's `std::panicking` and `core::panicking` code.
-V, --version Prints version information
-o, --output <output> The path to write the output wasm file to. Defaults to stdout.
-p, --pattern <pattern>... Snip any function that matches the given regular expression.
<input> The input wasm file containing the function(s) to snip.
<function>... The specific function(s) to snip. These must match exactly. Use the -p flag for fuzzy matching.
To use `wasm-snip` as a library, add this to your `Cargo.toml`:
default-features = false
See [docs.rs/wasm-snip][docs] for API documentation.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
<strong><code>wasm-snip</code> replaces a Wasm function's body with an <code>unreachable</code> instruction.</strong>
<sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub>
`wasm-snip` replaces a WebAssembly function's body with an `unreachable`.
Maybe you know that some function will never be called at runtime, but the
compiler can't prove that at compile time? Snip it! All the functions it
transitively called — which weren't called by anything else and therefore
could also never be called at runtime — will get removed too.
Very helpful when shrinking the size of WebAssembly binaries!
This functionality relies on the "name" section being present in the `.wasm`
file, so build with debug symbols:
debug = true