summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2025-12-15 15:26:38 +0500
committerPhyscik <mynameisgennadiy@vk.com>2025-12-15 15:26:38 +0500
commit942d5d8b84f55d71a275a7d6f3446587ab7368a3 (patch)
tree92d5dfa321f0b2b41a2b2cabd1d770c4febc9289
Wasm build pipeline
-rw-r--r--.gitignore1
-rw-r--r--Makefile6
-rw-r--r--hello.c3
-rw-r--r--inter/go.mod5
-rw-r--r--inter/go.sum2
-rw-r--r--inter/main.go42
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
+
diff --git a/hello.c b/hello.c
new file mode 100644
index 0000000..09d79ce
--- /dev/null
+++ b/hello.c
@@ -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)
+}