WAMR User APIs
Classes | Macros | Typedefs | Enumerations | Functions
wasm_c_api.h File Reference

This file defines the WebAssembly C APIs. More...

#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <assert.h>
Include dependency graph for wasm_c_api.h:

Go to the source code of this file.

Classes

union  MemAllocOption
 
struct  wasm_config_t
 
struct  InstantiationArgs
 
struct  wasm_limits_t
 
struct  wasm_val_t
 

Macros

#define WASM_API_EXTERN
 
#define WASM_API_DEPRECATED
 
#define own
 
#define WASM_DECLARE_OWN(name)
 
#define WASM_DECLARE_VEC(name, ptr_or_none)
 
#define wasm_name   wasm_byte_vec
 
#define wasm_name_new   wasm_byte_vec_new
 
#define wasm_name_new_empty   wasm_byte_vec_new_empty
 
#define wasm_name_new_new_uninitialized   wasm_byte_vec_new_uninitialized
 
#define wasm_name_copy   wasm_byte_vec_copy
 
#define wasm_name_delete   wasm_byte_vec_delete
 
#define MEM_ALLOC_OPTION_DEFINED
 
#define INSTANTIATION_ARGS_OPTION_DEFINED
 
#define WASM_DECLARE_TYPE(name)
 
#define WASM_VALKIND_T_DEFINED
 
#define WASM_VAL_T_DEFINED
 
#define WASM_DECLARE_REF_BASE(name)
 
#define WASM_DECLARE_REF(name)
 
#define WASM_DECLARE_SHARABLE_REF(name)
 
#define WASM_MODULE_T_DEFINED
 
#define WASM_EMPTY_VEC   {0, NULL, 0, 0, NULL}
 
#define WASM_ARRAY_VEC(array)   {sizeof(array)/sizeof(*(array)), array, sizeof(array)/sizeof(*(array)), sizeof(*(array)), NULL}
 
#define WASM_I32_VAL(i)   {.kind = WASM_I32, .__paddings = {0}, .of = {.i32 = i}}
 
#define WASM_I64_VAL(i)   {.kind = WASM_I64, .__paddings = {0}, .of = {.i64 = i}}
 
#define WASM_F32_VAL(z)   {.kind = WASM_F32, .__paddings = {0}, .of = {.f32 = z}}
 
#define WASM_F64_VAL(z)   {.kind = WASM_F64, .__paddings = {0}, .of = {.f64 = z}}
 
#define WASM_REF_VAL(r)   {.kind = WASM_ANYREF, .__paddings = {0}, .of = {.ref = r}}
 
#define WASM_INIT_VAL   {.kind = WASM_ANYREF, .__paddings = {0}, .of = {.ref = NULL}}
 
#define KILOBYTE(n)   ((n) * 1024)
 

Typedefs

typedef char byte_t
 
typedef float float32_t
 
typedef double float64_t
 
typedef byte_t wasm_byte_t
 
typedef wasm_byte_vec_t wasm_name_t
 
typedef union MemAllocOption MemAllocOption
 
typedef struct InstantiationArgs InstantiationArgs
 
typedef uint8_t wasm_mutability_t
 
typedef struct wasm_limits_t wasm_limits_t
 
typedef uint8_t wasm_valkind_t
 
typedef uint8_t wasm_externkind_t
 
typedef struct wasm_val_t wasm_val_t
 
typedef wasm_name_t wasm_message_t
 
typedef struct WASMModuleCommon * wasm_module_t
 
typedef wasm_module_t wasm_shared_module_t
 
typedef own wasm_trap_t *(* wasm_func_callback_t) (const wasm_val_vec_t *args, own wasm_val_vec_t *results)
 
typedef own wasm_trap_t *(* wasm_func_callback_with_env_t) (void *env, const wasm_val_vec_t *args, wasm_val_vec_t *results)
 
typedef uint32_t wasm_table_size_t
 
typedef uint32_t wasm_memory_pages_t
 

Enumerations

enum  mem_alloc_type_t {
  Alloc_With_Pool = 0, Alloc_With_Allocator, Alloc_With_System_Allocator, Alloc_With_Pool = 0,
  Alloc_With_Allocator, Alloc_With_System_Allocator
}
 
enum  wasm_mutability_enum { WASM_CONST, WASM_VAR }
 
enum  wasm_valkind_enum {
  WASM_I32, WASM_I64, WASM_F32, WASM_F64,
  WASM_ANYREF = 128, WASM_FUNCREF, WASM_I32, WASM_I64,
  WASM_F32, WASM_F64, WASM_ANYREF = 128, WASM_FUNCREF
}
 
enum  wasm_externkind_enum { WASM_EXTERN_FUNC, WASM_EXTERN_GLOBAL, WASM_EXTERN_TABLE, WASM_EXTERN_MEMORY }
 

Functions

WASM_API_EXTERN own wasm_config_twasm_config_new (void)
 
WASM_API_EXTERN own wasm_config_twasm_config_set_mem_alloc_opt (wasm_config_t *, mem_alloc_type_t, MemAllocOption *)
 
WASM_API_EXTERN own wasm_config_twasm_config_set_linux_perf_opt (wasm_config_t *, bool)
 
WASM_API_EXTERN wasm_config_twasm_config_set_segue_flags (wasm_config_t *config, uint32_t segue_flags)
 
WASM_API_EXTERN own wasm_engine_t * wasm_engine_new (void)
 
WASM_API_EXTERN own wasm_engine_t * wasm_engine_new_with_config (wasm_config_t *)
 
WASM_API_DEPRECATED WASM_API_EXTERN own wasm_engine_t * wasm_engine_new_with_args (mem_alloc_type_t type, const MemAllocOption *opts)
 
WASM_API_EXTERN own wasm_store_t * wasm_store_new (wasm_engine_t *)
 
WASM_API_EXTERN own wasm_valtype_t * wasm_valtype_new (wasm_valkind_t)
 
WASM_API_EXTERN wasm_valkind_t wasm_valtype_kind (const wasm_valtype_t *)
 
WASM_API_EXTERN own wasm_functype_t * wasm_functype_new (own wasm_valtype_vec_t *params, own wasm_valtype_vec_t *results)
 
const WASM_API_EXTERN wasm_valtype_vec_t * wasm_functype_params (const wasm_functype_t *)
 
const WASM_API_EXTERN wasm_valtype_vec_t * wasm_functype_results (const wasm_functype_t *)
 
WASM_API_EXTERN own wasm_globaltype_t * wasm_globaltype_new (own wasm_valtype_t *, wasm_mutability_t)
 
const WASM_API_EXTERN wasm_valtype_t * wasm_globaltype_content (const wasm_globaltype_t *)
 
WASM_API_EXTERN wasm_mutability_t wasm_globaltype_mutability (const wasm_globaltype_t *)
 
WASM_API_EXTERN own wasm_tabletype_t * wasm_tabletype_new (own wasm_valtype_t *, const wasm_limits_t *)
 
const WASM_API_EXTERN wasm_valtype_t * wasm_tabletype_element (const wasm_tabletype_t *)
 
const WASM_API_EXTERN wasm_limits_twasm_tabletype_limits (const wasm_tabletype_t *)
 
WASM_API_EXTERN own wasm_memorytype_t * wasm_memorytype_new (const wasm_limits_t *)
 
const WASM_API_EXTERN wasm_limits_twasm_memorytype_limits (const wasm_memorytype_t *)
 
WASM_API_EXTERN wasm_externkind_t wasm_externtype_kind (const wasm_externtype_t *)
 
WASM_API_EXTERN wasm_externtype_t * wasm_functype_as_externtype (wasm_functype_t *)
 
WASM_API_EXTERN wasm_externtype_t * wasm_globaltype_as_externtype (wasm_globaltype_t *)
 
WASM_API_EXTERN wasm_externtype_t * wasm_tabletype_as_externtype (wasm_tabletype_t *)
 
WASM_API_EXTERN wasm_externtype_t * wasm_memorytype_as_externtype (wasm_memorytype_t *)
 
WASM_API_EXTERN wasm_functype_t * wasm_externtype_as_functype (wasm_externtype_t *)
 
WASM_API_EXTERN wasm_globaltype_t * wasm_externtype_as_globaltype (wasm_externtype_t *)
 
WASM_API_EXTERN wasm_tabletype_t * wasm_externtype_as_tabletype (wasm_externtype_t *)
 
WASM_API_EXTERN wasm_memorytype_t * wasm_externtype_as_memorytype (wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_functype_as_externtype_const (const wasm_functype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_globaltype_as_externtype_const (const wasm_globaltype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_tabletype_as_externtype_const (const wasm_tabletype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_memorytype_as_externtype_const (const wasm_memorytype_t *)
 
const WASM_API_EXTERN wasm_functype_t * wasm_externtype_as_functype_const (const wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_globaltype_t * wasm_externtype_as_globaltype_const (const wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_tabletype_t * wasm_externtype_as_tabletype_const (const wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_memorytype_t * wasm_externtype_as_memorytype_const (const wasm_externtype_t *)
 
WASM_API_EXTERN own wasm_importtype_t * wasm_importtype_new (own wasm_name_t *module, own wasm_name_t *name, own wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_name_t * wasm_importtype_module (const wasm_importtype_t *)
 
const WASM_API_EXTERN wasm_name_t * wasm_importtype_name (const wasm_importtype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_importtype_type (const wasm_importtype_t *)
 
WASM_API_EXTERN bool wasm_importtype_is_linked (const wasm_importtype_t *)
 
WASM_API_EXTERN own wasm_exporttype_t * wasm_exporttype_new (own wasm_name_t *, own wasm_externtype_t *)
 
const WASM_API_EXTERN wasm_name_t * wasm_exporttype_name (const wasm_exporttype_t *)
 
const WASM_API_EXTERN wasm_externtype_t * wasm_exporttype_type (const wasm_exporttype_t *)
 
WASM_API_EXTERN void wasm_val_delete (own wasm_val_t *v)
 
WASM_API_EXTERN void wasm_val_copy (own wasm_val_t *out, const wasm_val_t *)
 
WASM_API_EXTERN own wasm_frame_t * wasm_frame_copy (const wasm_frame_t *)
 
WASM_API_EXTERN struct wasm_instance_t * wasm_frame_instance (const wasm_frame_t *)
 
WASM_API_EXTERN uint32_t wasm_frame_func_index (const wasm_frame_t *)
 
WASM_API_EXTERN size_t wasm_frame_func_offset (const wasm_frame_t *)
 
WASM_API_EXTERN size_t wasm_frame_module_offset (const wasm_frame_t *)
 
WASM_API_EXTERN own wasm_trap_t * wasm_trap_new (wasm_store_t *store, const wasm_message_t *)
 
WASM_API_EXTERN void wasm_trap_message (const wasm_trap_t *, own wasm_message_t *out)
 
WASM_API_EXTERN own wasm_frame_t * wasm_trap_origin (const wasm_trap_t *)
 
WASM_API_EXTERN void wasm_trap_trace (const wasm_trap_t *, own wasm_frame_vec_t *out)
 
WASM_API_EXTERN own wasm_foreign_t * wasm_foreign_new (wasm_store_t *)
 
WASM_API_EXTERN own wasm_module_t * wasm_module_new (wasm_store_t *, const wasm_byte_vec_t *binary)
 
WASM_API_EXTERN void wasm_module_delete (own wasm_module_t *)
 
WASM_API_EXTERN bool wasm_module_validate (wasm_store_t *, const wasm_byte_vec_t *binary)
 
WASM_API_EXTERN void wasm_module_imports (const wasm_module_t *, own wasm_importtype_vec_t *out)
 
WASM_API_EXTERN void wasm_module_exports (const wasm_module_t *, own wasm_exporttype_vec_t *out)
 
WASM_API_EXTERN void wasm_module_serialize (wasm_module_t *, own wasm_byte_vec_t *out)
 
WASM_API_EXTERN own wasm_module_t * wasm_module_deserialize (wasm_store_t *, const wasm_byte_vec_t *)
 
WASM_API_EXTERN own wasm_shared_module_t * wasm_module_share (wasm_module_t *)
 
WASM_API_EXTERN own wasm_module_t * wasm_module_obtain (wasm_store_t *, wasm_shared_module_t *)
 
WASM_API_EXTERN void wasm_shared_module_delete (own wasm_shared_module_t *)
 
WASM_API_EXTERN bool wasm_module_set_name (wasm_module_t *, const char *name)
 
const WASM_API_EXTERN char * wasm_module_get_name (wasm_module_t *)
 
WASM_API_EXTERN own wasm_func_t * wasm_func_new (wasm_store_t *, const wasm_functype_t *, wasm_func_callback_t)
 
WASM_API_EXTERN own wasm_func_t * wasm_func_new_with_env (wasm_store_t *, const wasm_functype_t *type, wasm_func_callback_with_env_t, void *env, void(*finalizer)(void *))
 
WASM_API_EXTERN own wasm_functype_t * wasm_func_type (const wasm_func_t *)
 
WASM_API_EXTERN size_t wasm_func_param_arity (const wasm_func_t *)
 
WASM_API_EXTERN size_t wasm_func_result_arity (const wasm_func_t *)
 
WASM_API_EXTERN own wasm_trap_t * wasm_func_call (const wasm_func_t *, const wasm_val_vec_t *args, wasm_val_vec_t *results)
 
WASM_API_EXTERN own wasm_global_t * wasm_global_new (wasm_store_t *, const wasm_globaltype_t *, const wasm_val_t *)
 
WASM_API_EXTERN own wasm_globaltype_t * wasm_global_type (const wasm_global_t *)
 
WASM_API_EXTERN void wasm_global_get (const wasm_global_t *, own wasm_val_t *out)
 
WASM_API_EXTERN void wasm_global_set (wasm_global_t *, const wasm_val_t *)
 
WASM_API_EXTERN own wasm_table_t * wasm_table_new (wasm_store_t *, const wasm_tabletype_t *, wasm_ref_t *init)
 
WASM_API_EXTERN own wasm_tabletype_t * wasm_table_type (const wasm_table_t *)
 
WASM_API_EXTERN own wasm_ref_t * wasm_table_get (const wasm_table_t *, wasm_table_size_t index)
 
WASM_API_EXTERN bool wasm_table_set (wasm_table_t *, wasm_table_size_t index, wasm_ref_t *)
 
WASM_API_EXTERN wasm_table_size_t wasm_table_size (const wasm_table_t *)
 
WASM_API_EXTERN bool wasm_table_grow (wasm_table_t *, wasm_table_size_t delta, wasm_ref_t *init)
 
WASM_API_EXTERN own wasm_memory_t * wasm_memory_new (wasm_store_t *, const wasm_memorytype_t *)
 
WASM_API_EXTERN own wasm_memorytype_t * wasm_memory_type (const wasm_memory_t *)
 
WASM_API_EXTERN byte_t * wasm_memory_data (wasm_memory_t *)
 
WASM_API_EXTERN size_t wasm_memory_data_size (const wasm_memory_t *)
 
WASM_API_EXTERN wasm_memory_pages_t wasm_memory_size (const wasm_memory_t *)
 
WASM_API_EXTERN bool wasm_memory_grow (wasm_memory_t *, wasm_memory_pages_t delta)
 
WASM_API_EXTERN wasm_externkind_t wasm_extern_kind (const wasm_extern_t *)
 
WASM_API_EXTERN own wasm_externtype_t * wasm_extern_type (const wasm_extern_t *)
 
WASM_API_EXTERN wasm_extern_t * wasm_func_as_extern (wasm_func_t *)
 
WASM_API_EXTERN wasm_extern_t * wasm_global_as_extern (wasm_global_t *)
 
WASM_API_EXTERN wasm_extern_t * wasm_table_as_extern (wasm_table_t *)
 
WASM_API_EXTERN wasm_extern_t * wasm_memory_as_extern (wasm_memory_t *)
 
WASM_API_EXTERN wasm_func_t * wasm_extern_as_func (wasm_extern_t *)
 
WASM_API_EXTERN wasm_global_t * wasm_extern_as_global (wasm_extern_t *)
 
WASM_API_EXTERN wasm_table_t * wasm_extern_as_table (wasm_extern_t *)
 
WASM_API_EXTERN wasm_memory_t * wasm_extern_as_memory (wasm_extern_t *)
 
const WASM_API_EXTERN wasm_extern_t * wasm_func_as_extern_const (const wasm_func_t *)
 
const WASM_API_EXTERN wasm_extern_t * wasm_global_as_extern_const (const wasm_global_t *)
 
const WASM_API_EXTERN wasm_extern_t * wasm_table_as_extern_const (const wasm_table_t *)
 
const WASM_API_EXTERN wasm_extern_t * wasm_memory_as_extern_const (const wasm_memory_t *)
 
const WASM_API_EXTERN wasm_func_t * wasm_extern_as_func_const (const wasm_extern_t *)
 
const WASM_API_EXTERN wasm_global_t * wasm_extern_as_global_const (const wasm_extern_t *)
 
const WASM_API_EXTERN wasm_table_t * wasm_extern_as_table_const (const wasm_extern_t *)
 
const WASM_API_EXTERN wasm_memory_t * wasm_extern_as_memory_const (const wasm_extern_t *)
 
WASM_API_EXTERN own wasm_instance_t * wasm_instance_new (wasm_store_t *, const wasm_module_t *, const wasm_extern_vec_t *imports, own wasm_trap_t **trap)
 
WASM_API_EXTERN own wasm_instance_t * wasm_instance_new_with_args (wasm_store_t *, const wasm_module_t *, const wasm_extern_vec_t *imports, own wasm_trap_t **trap, const uint32_t stack_size, const uint32_t heap_size)
 
WASM_API_EXTERN own wasm_instance_t * wasm_instance_new_with_args_ex (wasm_store_t *, const wasm_module_t *, const wasm_extern_vec_t *imports, own wasm_trap_t **trap, const InstantiationArgs *inst_args)
 
WASM_API_EXTERN void wasm_instance_exports (const wasm_instance_t *, own wasm_extern_vec_t *out)
 
WASM_API_EXTERN wasm_extern_t * wasm_extern_new_empty (wasm_store_t *, wasm_externkind_t)
 

Detailed Description

This file defines the WebAssembly C APIs.

Date
Wed Mar 20 10:46:38 2024

Macro Definition Documentation

◆ WASM_DECLARE_OWN

#define WASM_DECLARE_OWN (   name)
Value:
typedef struct wasm_##name##_t wasm_##name##_t; \
\
WASM_API_EXTERN void wasm_##name##_delete(own wasm_##name##_t*);

◆ WASM_DECLARE_REF

#define WASM_DECLARE_REF (   name)
Value:
WASM_DECLARE_REF_BASE(name) \
\
WASM_API_EXTERN wasm_ref_t* wasm_##name##_as_ref(wasm_##name##_t*); \
WASM_API_EXTERN wasm_##name##_t* wasm_ref_as_##name(wasm_ref_t*); \
WASM_API_EXTERN const wasm_ref_t* wasm_##name##_as_ref_const(const wasm_##name##_t*); \
WASM_API_EXTERN const wasm_##name##_t* wasm_ref_as_##name##_const(const wasm_ref_t*);

◆ WASM_DECLARE_REF_BASE

#define WASM_DECLARE_REF_BASE (   name)
Value:
WASM_DECLARE_OWN(name) \
\
WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t*); \
WASM_API_EXTERN bool wasm_##name##_same(const wasm_##name##_t*, const wasm_##name##_t*); \
\
WASM_API_EXTERN void* wasm_##name##_get_host_info(const wasm_##name##_t*); \
WASM_API_EXTERN void wasm_##name##_set_host_info(wasm_##name##_t*, void*); \
WASM_API_EXTERN void wasm_##name##_set_host_info_with_finalizer( \
wasm_##name##_t*, void*, void (*)(void*));

◆ WASM_DECLARE_SHARABLE_REF

#define WASM_DECLARE_SHARABLE_REF (   name)
Value:
WASM_DECLARE_REF(name) \
WASM_DECLARE_OWN(shared_##name) \
\
WASM_API_EXTERN own wasm_shared_##name##_t* wasm_##name##_share(const wasm_##name##_t*); \
WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_obtain(wasm_store_t*, const wasm_shared_##name##_t*);

◆ WASM_DECLARE_TYPE

#define WASM_DECLARE_TYPE (   name)
Value:
WASM_DECLARE_OWN(name) \
WASM_DECLARE_VEC(name, *) \
\
WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t*);

◆ WASM_DECLARE_VEC

#define WASM_DECLARE_VEC (   name,
  ptr_or_none 
)
Value:
typedef struct wasm_##name##_vec_t { \
size_t size; \
wasm_##name##_t ptr_or_none* data; \
size_t num_elems; \
size_t size_of_elem; \
void *lock; \
} wasm_##name##_vec_t; \
\
WASM_API_EXTERN void wasm_##name##_vec_new_empty(own wasm_##name##_vec_t* out); \
WASM_API_EXTERN void wasm_##name##_vec_new_uninitialized( \
own wasm_##name##_vec_t* out, size_t); \
WASM_API_EXTERN void wasm_##name##_vec_new( \
own wasm_##name##_vec_t* out, \
size_t, own wasm_##name##_t ptr_or_none const[]); \
WASM_API_EXTERN void wasm_##name##_vec_copy( \
own wasm_##name##_vec_t* out, const wasm_##name##_vec_t*); \
WASM_API_EXTERN void wasm_##name##_vec_delete(own wasm_##name##_vec_t*);

Function Documentation

◆ wasm_config_set_segue_flags()

WASM_API_EXTERN wasm_config_t* wasm_config_set_segue_flags ( wasm_config_t config,
uint32_t  segue_flags 
)

Enable using GS register as the base address of linear memory in linux x86_64, which may speedup the linear memory access for LLVM AOT/JIT: bit0 to bit4 denotes i32.load, i64.load, f32.load, f64.load, v128.load bit8 to bit12 denotes i32.store, i64.store, f32.store, f64.store, v128.store For example, 0x01 enables i32.load, 0x0100 enables i32.store. To enable all load/store operations, use 0x1F1F

◆ wasm_engine_new()

WASM_API_EXTERN own wasm_engine_t* wasm_engine_new ( void  )

Create a new engine

Note: for the engine new/delete operations, including this, wasm_engine_new_with_config, wasm_engine_new_with_args, and wasm_engine_delete, if the platform has mutex initializer, then they are thread-safe: we use a global lock to lock the operations of the engine. Otherwise they are not thread-safe: when there are engine new/delete operations happening simultaneously in multiple threads, developer must create the lock by himself, and add the lock when calling these functions.