mirror of
https://github.com/fluencelabs/marine.git
synced 2025-03-15 22:10:49 +00:00
78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
import { WASI } from '@wasmer/wasi'
|
|
import browserBindings from '@wasmer/wasi/lib/bindings/browser'
|
|
import { WasmFs } from '@wasmer/wasmfs'
|
|
import init, { register_module, call_module} from "./marine_web_runtime.js";
|
|
|
|
|
|
const greetingPath = '/greeting.wasm' // Path to our WASI module
|
|
const avmPath = '/air_interpreter_server.wasm' // Path to our WASI module
|
|
const echoStr = 'Hello World!' // Text string to echo
|
|
|
|
//window.MARINE_WASM_MODULES = {}
|
|
// Instantiate new WASI and WasmFs Instances
|
|
// IMPORTANT:
|
|
// Instantiating WasmFs is only needed when running in a browser.
|
|
// When running on the server, NodeJS's native FS module is assigned by default
|
|
const wasmFs = new WasmFs()
|
|
|
|
let wasi = new WASI({
|
|
// Arguments passed to the Wasm Module
|
|
// The first argument is usually the filepath to the executable WASI module
|
|
// we want to run.
|
|
args: [],
|
|
|
|
// Environment variables that are accesible to the WASI module
|
|
env: {},
|
|
|
|
// Bindings that are used by the WASI Instance (fs, path, etc...)
|
|
bindings: {
|
|
...browserBindings,
|
|
fs: wasmFs.fs
|
|
}
|
|
})
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Async function to run our WASI module/instance
|
|
|
|
async function loadMarineModule(modulePath, moduleName) {
|
|
console.log("loading", moduleName);
|
|
let response = await fetch(modulePath)
|
|
let wasmBytes = new Uint8Array(await response.arrayBuffer())
|
|
|
|
let wasmModule = await WebAssembly.compile(wasmBytes);
|
|
console.log(wasmModule)
|
|
|
|
let instance = await WebAssembly.instantiate(wasmModule, {
|
|
...wasi.getImports(wasmModule),
|
|
});
|
|
console.log(instance)
|
|
|
|
//window.MARINE_WASM_MODULES[moduleName] = instance;
|
|
|
|
wasi.start(instance) // Start the WASI instance
|
|
let custom_sections = WebAssembly.Module.customSections(wasmModule,"interface-types");
|
|
console.log(custom_sections)
|
|
let custom_section2 = new Uint8Array(custom_sections[0])
|
|
return {
|
|
name: moduleName,
|
|
custom_section: custom_section2,
|
|
instance: instance,
|
|
}
|
|
}
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Everything starts here
|
|
|
|
async function main() {
|
|
let greeting = await loadMarineModule(greetingPath, "greeting");
|
|
let avm = await loadMarineModule(avmPath, "avm");
|
|
await init()
|
|
|
|
//register_module(avm.name, avm.custom_section)
|
|
register_module(greeting.name, greeting.custom_section, greeting.instance)
|
|
//test_call_avm()
|
|
let result = call_module(greeting.name, "greeting", JSON.stringify(["js"]));
|
|
console.log("JS: got result from call_module:", result)
|
|
}
|
|
|
|
main()
|