summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go146
1 files changed, 146 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go
new file mode 100644
index 000000000..13480b221
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/language-bindings/go/wamr/module.go
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2019 Intel Corporation. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+package wamr
+
+// #include <wasm_export.h>
+import "C"
+import (
+ "unsafe"
+ "runtime"
+ "fmt"
+)
+
+type Module struct {
+ module C.wasm_module_t
+}
+
+/* Create WASM/AOT module from the memory buffer */
+func NewModule(wasmBytes []byte) (*Module, error) {
+ if (wasmBytes == nil || len(wasmBytes) == 0) {
+ return nil, fmt.Errorf("NewModule error: invalid input")
+ }
+
+ wasmPtr := (*C.uint8_t)(unsafe.Pointer(&wasmBytes[0]))
+ wasmLen := C.uint(len(wasmBytes))
+
+ errorBytes := make([]byte, 128)
+ errorPtr := (*C.char)(unsafe.Pointer(&errorBytes[0]))
+ errorLen := C.uint(len(errorBytes))
+
+ m := C.wasm_runtime_load(wasmPtr, wasmLen, errorPtr, errorLen)
+ if (m == nil) {
+ return nil, fmt.Errorf("NewModule error: %s", string(errorBytes))
+ }
+
+ self := &Module{
+ module: m,
+ }
+
+ runtime.SetFinalizer(self, func(self *Module) {
+ self.Destroy()
+ })
+
+ return self, nil
+}
+
+/* Destroy the module */
+func (self *Module) Destroy() {
+ runtime.SetFinalizer(self, nil)
+ if (self.module != nil) {
+ C.wasm_runtime_unload(self.module)
+ }
+}
+
+/* Set module's wasi arguments */
+func (self *Module) SetWasiArgs(dirList [][]byte, mapDirList [][]byte,
+ env [][]byte, argv[][]byte) {
+ var dirPtr, mapDirPtr, envPtr, argvPtr **C.char
+ var dirCount, mapDirCount, envCount C.uint
+ var argc C.int
+
+ if (dirList != nil) {
+ dirPtr = (**C.char)(unsafe.Pointer(&dirList[0]))
+ dirCount = C.uint(len(dirList))
+ }
+
+ if (mapDirList != nil) {
+ mapDirPtr = (**C.char)(unsafe.Pointer(&mapDirList[0]))
+ mapDirCount = C.uint(len(mapDirList))
+ }
+
+ if (env != nil) {
+ envPtr = (**C.char)(unsafe.Pointer(&env[0]))
+ envCount = C.uint(len(env))
+ }
+
+ if (argv != nil) {
+ argvPtr = (**C.char)(unsafe.Pointer(&argv[0]))
+ argc = C.int(len(argv))
+ }
+
+ C.wasm_runtime_set_wasi_args(self.module, dirPtr, dirCount,
+ mapDirPtr, mapDirCount,
+ envPtr, envCount, argvPtr, argc)
+}
+
+/* Set module's wasi arguments */
+func (self *Module) SetWasiArgsEx(dirList [][]byte, mapDirList [][]byte,
+ env [][]byte, argv[][]byte,
+ stdinfd int, stdoutfd int, stderrfd int) {
+ var dirPtr, mapDirPtr, envPtr, argvPtr **C.char
+ var dirCount, mapDirCount, envCount C.uint
+ var argc C.int
+
+ if (dirList != nil) {
+ dirPtr = (**C.char)(unsafe.Pointer(&dirList[0]))
+ dirCount = C.uint(len(dirList))
+ }
+
+ if (mapDirList != nil) {
+ mapDirPtr = (**C.char)(unsafe.Pointer(&mapDirList[0]))
+ mapDirCount = C.uint(len(mapDirList))
+ }
+
+ if (env != nil) {
+ envPtr = (**C.char)(unsafe.Pointer(&env[0]))
+ envCount = C.uint(len(env))
+ }
+
+ if (argv != nil) {
+ argvPtr = (**C.char)(unsafe.Pointer(&argv[0]))
+ argc = C.int(len(argv))
+ }
+
+ C.wasm_runtime_set_wasi_args_ex(self.module, dirPtr, dirCount,
+ mapDirPtr, mapDirCount,
+ envPtr, envCount, argvPtr, argc,
+ C.int(stdinfd), C.int(stdoutfd),
+ C.int(stderrfd))
+}
+
+/* Set module's wasi network address pool */
+func (self *Module) SetWasiAddrPool(addrPool [][]byte) {
+ var addrPoolPtr **C.char
+ var addrPoolSize C.uint
+
+ if (addrPool != nil) {
+ addrPoolPtr = (**C.char)(unsafe.Pointer(&addrPool[0]))
+ addrPoolSize = C.uint(len(addrPool))
+ }
+ C.wasm_runtime_set_wasi_addr_pool(self.module, addrPoolPtr, addrPoolSize)
+}
+
+/* Set module's wasi domain lookup pool */
+func(self *Module) SetWasiNsLookupPool(nsLookupPool [][]byte) {
+ var nsLookupPoolPtr **C.char
+ var nsLookupPoolSize C.uint
+
+ if (nsLookupPool != nil) {
+ nsLookupPoolPtr = (**C.char)(unsafe.Pointer(&nsLookupPool[0]))
+ nsLookupPoolSize = C.uint(len(nsLookupPool))
+ }
+ C.wasm_runtime_set_wasi_ns_lookup_pool(self.module, nsLookupPoolPtr, nsLookupPoolSize)
+}