Provides utilities for loading and running WASM modules
Built on top of the Wasmer runtime.
Setup
Start by installing the tools needed to build the Wasmer runtime:
-
Install the Rust SDK.
-
On Windows, to get
link.exe, install the Visual Studio build tools with the "Desktop development with C++"-option selected.
Basic Usage
As a simple example, we'll try to call a simple C function from Dart using
package:wasm. For a more detailed example that uses WASI, check out the
example directory.
-
First create new Dart app folder:
dart create wasmtest -
Add a dependency to package
wasminpubspec.yamland rundart pub get -
Next run
dart run wasm:setupto build the Wasmer runtime. This will take a few minutes. -
Then add a new file
square.ccwith the following contents:extern "C" int square(int n) { return n * n; } -
We can compile this C++ code to WASM using a recent version of the clang compiler:
clang --target=wasm32 -nostdlib "-Wl,--export-all" "-Wl,--no-entry" -o square.wasm square.cc -
Replace the contents of your Dart program (
bin/wasmtest.dart) with:import 'dart:io'; import 'package:wasm/wasm.dart'; void main() { final data = File('square.wasm').readAsBytesSync(); final mod = WasmModule(data); print(mod.describe()); final inst = mod.builder().build(); final square = inst.lookupFunction('square'); print(square(12)); } -
Run the Dart program:
dart run. This should print:export memory: memory export function: int32 square(int32) 144