From d931d669d960d8c0679bf547c04c98c857120712 Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Fri, 30 Apr 2021 13:43:13 +0300 Subject: [PATCH] Add Cookbook --- docs/Cookbook.md | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docs/Cookbook.md diff --git a/docs/Cookbook.md b/docs/Cookbook.md new file mode 100644 index 0000000..cb56a2a --- /dev/null +++ b/docs/Cookbook.md @@ -0,0 +1,91 @@ +# Wasm3 cookbook + +### Rust WASI app + +TODO + +### AssemblyScript WASI app + +TODO + +### TinyGo WASI app + +TODO + +### Zig WASI app + +Create `hello.zig`: +```zig +const std = @import("std"); + +pub fn main() !void { + const stdout = std.io.getStdOut().writer(); + try stdout.print("Hello, {s}!\n", .{"world"}); +} +``` + +```sh +$ zig build-exe -O ReleaseSmall -target wasm32-wasi hello.zig + +$ wasm3 hello.wasm +Hello, world! +``` + +## Zig library + +Create `add.zig`: +```zig +export fn add(a: i32, b: i32) i64 { + return a + b; +} +``` + +```sh +$ zig build-lib add.zig -O ReleaseSmall -target wasm32-freestanding + +$ wasm3 --repl add.wasm +wasm3> add 1 2 +Result: 3 +``` + +### C WASI app + +The easiest way to start is to use [Wasienv](https://github.com/wasienv/wasienv). + +Create `hello.c`: +```c +#include + +int main() +{ + printf("Hello, %s!\n", "world"); + return 0; +} +``` + +```sh +$ wasicc -O3 -Wl,--stack-first hello.c -o hello.wasm + +$ wasm3 hello.wasm +Hello, world! +``` + +### C++ WASI app + +Create `hello.cpp`: +```cpp +#include + +int main() +{ + std::cout << "Hello World!" << std::endl; + return 0; +} +``` + +```sh +$ wasic++ -O3 -Wl,--stack-first hello.cpp -o hello.wasm + +$ wasm3 hello.wasm +Hello World! +```