Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 3 months ago
JSON representation
`wasm-snip` replaces a WebAssembly function's body with an `unreachable`
- Host: GitHub
- URL: https://github.com/rustwasm/wasm-snip
- Owner: rustwasm
- Created: 2018-01-10T23:54:53.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-03-20T08:58:44.000Z (over 1 year ago)
- Last Synced: 2024-07-06T11:43:21.841Z (4 months ago)
- Topics: wasm
- Language: Rust
- Size: 153 KB
- Stars: 213
- Watchers: 5
- Forks: 13
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
- awesome-wasm-tools - repo
README
wasm-snip
wasm-snip
replaces a Wasm function's body with anunreachable
instruction.
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 informationOPTIONS:
-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.