bindings-chicory-wasip1

Implementation of WASI Preview 1 host functions for the Chicory JVM WebAssembly runtime.

Maven Central Version

  • Targets: JVM, Android API 31+

Usage

Use ChasmWasiPreview1Builder to set up host functions.

import at.released.weh.bindings.chicory.exception.ProcExitException
import at.released.weh.bindings.chicory.wasip1.ChicoryWasiPreview1Builder
import at.released.weh.host.EmbedderHost
import com.dylibso.chicory.runtime.HostFunction
import com.dylibso.chicory.runtime.ImportValues
import com.dylibso.chicory.runtime.Instance
import com.dylibso.chicory.wasm.Parser
import com.dylibso.chicory.wasm.WasmModule

// Create Host and run code
EmbedderHost {
    fileSystem {
        addPreopenedDirectory(".", "/data")
    }
}.use { executeCode(it) }

private fun executeCode(embedderHost: EmbedderHost) {
    // Prepare WASI Preview 1 host imports
    val wasiImports: List<HostFunction> = ChicoryWasiPreview1Builder {
        host = embedderHost
    }.build()
    val hostImports = ImportValues.builder().withFunctions(wasiImports).build()

    // Instantiate the WebAssembly module
    val instance = Instance
        .builder(wasmModule)
        .withImportValues(hostImports)
        .withInitialize(true)
        .withStart(false)
        .build()

    // Execute code
    try {
        instance.export("_start").apply()
    } catch (pre: ProcExitException) {
        // Handle exception depending on pre.exitCode
    }
}

Packages

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard