Examples of using WebAssembly compiled from Rust with tinywasm. These examples are meant to be run with `cargo run --example wasm-rust `. For example, `cargo run --example wasm-rust hello`. To run these, you first need to compile the Rust examples to WebAssembly: ```sh ./examples/rust/build.sh ``` This requires the `wasm32-unknown-unknown` target, `binaryen`, and `wabt` to be installe
()
| 20 | /// <https://github.com/WebAssembly/wabt> |
| 21 | /// <https://github.com/WebAssembly/binaryen> |
| 22 | fn main() -> Result<()> { |
| 23 | pretty_env_logger::init(); |
| 24 | |
| 25 | if !std::path::Path::new("./examples/rust/out/").exists() { |
| 26 | return Err(eyre!("No WebAssembly files found. See examples/wasm-rust.rs for instructions.")); |
| 27 | } |
| 28 | |
| 29 | let args = std::env::args().collect::<Vec<_>>(); |
| 30 | if args.len() < 2 { |
| 31 | println!("Usage: cargo run --example wasm-rust <rust_example>"); |
| 32 | println!("Available examples:"); |
| 33 | println!(" hello"); |
| 34 | println!(" printi32"); |
| 35 | println!(" host_fn"); |
| 36 | println!(" fibonacci - calculate fibonacci(30)"); |
| 37 | println!(" tinywasm - run printi32 inside of tinywasm inside of itself"); |
| 38 | println!(" argon2id - run argon2id(1000, 2, 1)"); |
| 39 | return Ok(()); |
| 40 | } |
| 41 | |
| 42 | match args[1].as_str() { |
| 43 | "hello" => hello()?, |
| 44 | "printi32" => printi32()?, |
| 45 | "fibonacci" => fibonacci()?, |
| 46 | "tinywasm" => tinywasm()?, |
| 47 | "tinywasm_no_std" => tinywasm_no_std()?, |
| 48 | "argon2id" => argon2id()?, |
| 49 | "host_fn" => host_fn()?, |
| 50 | "all" => { |
| 51 | println!("Running all examples"); |
| 52 | println!("\nhello.wasm:"); |
| 53 | hello()?; |
| 54 | println!("\nprinti32.wasm:"); |
| 55 | printi32()?; |
| 56 | println!("\nfibonacci.wasm:"); |
| 57 | fibonacci()?; |
| 58 | println!("\ntinywasm.wasm:"); |
| 59 | tinywasm()?; |
| 60 | println!("\ntinywasm_no_std.wasm:"); |
| 61 | tinywasm_no_std()?; |
| 62 | println!("argon2id.wasm:"); |
| 63 | argon2id()?; |
| 64 | println!("\nhost_fn.wasm:"); |
| 65 | host_fn()?; |
| 66 | } |
| 67 | _ => {} |
| 68 | } |
| 69 | |
| 70 | Ok(()) |
| 71 | } |
| 72 | |
| 73 | fn tinywasm() -> Result<()> { |
| 74 | let module = tinywasm::parse_file("./examples/rust/out/tinywasm.opt.wasm")?; |