diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2025-12-15 15:26:38 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2025-12-15 15:26:38 +0500 |
| commit | 942d5d8b84f55d71a275a7d6f3446587ab7368a3 (patch) | |
| tree | 92d5dfa321f0b2b41a2b2cabd1d770c4febc9289 | |
Wasm build pipeline
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | hello.c | 3 | ||||
| -rw-r--r-- | inter/go.mod | 5 | ||||
| -rw-r--r-- | inter/go.sum | 2 | ||||
| -rw-r--r-- | inter/main.go | 42 |
6 files changed, 59 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19e1bce --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.wasm diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1f14348 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +all: build_wasm + cd inter; go run . + +build_wasm: + emcc hello.c -sEXPORTED_FUNCTIONS="_Add" -o hello.wasm --no-entry + @@ -0,0 +1,3 @@ +int Add(int a, int b) { + return a + b; +} diff --git a/inter/go.mod b/inter/go.mod new file mode 100644 index 0000000..ec2d0ad --- /dev/null +++ b/inter/go.mod @@ -0,0 +1,5 @@ +module inter + +go 1.25.4 + +require github.com/tetratelabs/wazero v1.10.1 // indirect diff --git a/inter/go.sum b/inter/go.sum new file mode 100644 index 0000000..c3d453a --- /dev/null +++ b/inter/go.sum @@ -0,0 +1,2 @@ +github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2wwFuH8= +github.com/tetratelabs/wazero v1.10.1/go.mod h1:DRm5twOQ5Gr1AoEdSi0CLjDQF1J9ZAuyqFIjl1KKfQU= diff --git a/inter/main.go b/inter/main.go new file mode 100644 index 0000000..e0dd0a7 --- /dev/null +++ b/inter/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "context" + "fmt" + "os" + + "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" +) + +const wasmLocation = "../hello.wasm" + +func main() { + var ctx = context.Background() + + var runtime = wazero.NewRuntime(ctx) + defer runtime.Close(ctx) + + wasi_snapshot_preview1.MustInstantiate(ctx, runtime) + + var wasm, wasmErr = LoadWasm() + if wasmErr != nil { + panic(fmt.Sprintf("Failed to load WASM module: %s", wasmErr.Error())) + } + + var mod, modErr = runtime.Instantiate(ctx, wasm) + if modErr != nil { + panic(fmt.Sprintf("Failed to instantiate WASM module: %s", modErr.Error())) + } + + var add = mod.ExportedFunction("Add") + var result, callErr = add.Call(ctx, 25, 25) + if callErr != nil { + panic(fmt.Sprintf("Failed to call WASM finction: %s", callErr.Error())) + } + fmt.Printf("Addition result: %v\n", result[0]) +} + +func LoadWasm() ([]byte, error) { + return os.ReadFile(wasmLocation) +} |
