Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rustwasm/wasm-snip

`wasm-snip` replaces a WebAssembly function's body with an `unreachable`
https://github.com/rustwasm/wasm-snip

wasm

Last synced: 19 days ago
JSON representation

`wasm-snip` replaces a WebAssembly function's body with an `unreachable`

Awesome Lists containing this project

README

        

wasm-snip

wasm-snip replaces a Wasm function's body with an unreachable instruction.


Build Status
Crates.io version
Download
docs.rs docs


API Docs
|
Contributing
|
Chat

Built with 🦀🕸 by The Rust and WebAssembly Working Group

## About

`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:

```toml
[profile.release]
debug = true
```

* [Executable](#executable)
* [Library](#library)
* [License](#license)
* [Contributing](#contributing)

### Executable

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`.

USAGE:
wasm-snip [FLAGS] [OPTIONS] [--] [function]...

FLAGS:
-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

OPTIONS:
-o, --output The path to write the output wasm file to. Defaults to stdout.
-p, --pattern ... Snip any function that matches the given regular expression.

ARGS:
The input wasm file containing the function(s) to snip.
... The specific function(s) to snip. These must match exactly. Use the -p flag for fuzzy matching.
```

### Library

To use `wasm-snip` as a library, add this to your `Cargo.toml`:

```toml
[dependencies.wasm-snip]
# Do not build the executable.
default-features = false
```

See [docs.rs/wasm-snip][docs] for API documentation.

[docs]: https://docs.rs/wasm-snip

### License

Licensed under either of

* [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)

* [MIT license](http://opensource.org/licenses/MIT)

at your option.

### Contributing

See
[CONTRIBUTING.md](https://github.com/rustwasm/wasm-snip/blob/master/CONTRIBUTING.md)
for hacking.

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.