Renamed wasmer_wasm.h to wasmer.h

This commit is contained in:
Syrus Akbary
2021-06-01 21:47:37 -07:00
parent 976d023bd1
commit b520a5f58a
48 changed files with 1140 additions and 1002 deletions

View File

@@ -209,11 +209,6 @@ jobs:
- name: Build C API - name: Build C API
run: | run: |
make build-capi make build-capi
if: matrix.target != 'aarch64-apple-darwin'
- name: Build C API (system libffi)
run: |
make build-capi-cranelift-system-libffi
if: matrix.target == 'aarch64-apple-darwin'
- name: Build Wasmer binary - name: Build Wasmer binary
run: | run: |
make build-wasmer make build-wasmer
@@ -266,8 +261,8 @@ jobs:
run: | run: |
ls target/release ls target/release
alias wasmer=target/release/wasmer alias wasmer=target/release/wasmer
./target/release/wasmer compile --target=x86_64-apple-darwin lib/c-api/tests/assets/qjs.wasm -o qjs_mac_from_linux.wjit ./target/release/wasmer compile --target=x86_64-apple-darwin lib/c-api/examples/assets/qjs.wasm -o qjs_mac_from_linux.wjit
#./target/release/wasmer compile --target=x86_64-pc-windows-msvc lib/c-api/tests/assets/qjs.wasm -o qjs_win_from_linux.wjit #./target/release/wasmer compile --target=x86_64-pc-windows-msvc lib/c-api/examples/assets/qjs.wasm -o qjs_win_from_linux.wjit
mkdir cross mkdir cross
cp qjs_mac_from_linux.wjit cross cp qjs_mac_from_linux.wjit cross
#cp qjs_win_from_linux.wjit cross #cp qjs_win_from_linux.wjit cross
@@ -278,8 +273,8 @@ jobs:
run: | run: |
ls target/release ls target/release
alias wasmer=target/release/wasmer alias wasmer=target/release/wasmer
./target/release/wasmer compile --target=x86_64-unknown-linux-gnu lib/c-api/tests/assets/qjs.wasm -o qjs_linux_from_mac.wjit ./target/release/wasmer compile --target=x86_64-unknown-linux-gnu lib/c-api/examples/assets/qjs.wasm -o qjs_linux_from_mac.wjit
#./target/release/wasmer compile --target=x86_64-pc-windows-msvc lib/c-api/tests/assets/qjs.wasm -o qjs_win_from_mac.wjit #./target/release/wasmer compile --target=x86_64-pc-windows-msvc lib/c-api/examples/assets/qjs.wasm -o qjs_win_from_mac.wjit
mkdir cross mkdir cross
cp qjs_linux_from_mac.wjit cross cp qjs_linux_from_mac.wjit cross
#cp qjs_win_from_mac.wjit cross #cp qjs_win_from_mac.wjit cross

View File

@@ -464,9 +464,6 @@ build-capi-headless-all: capi-setup
RUSTFLAGS="${RUSTFLAGS}" cargo build --manifest-path lib/c-api/Cargo.toml --release \ RUSTFLAGS="${RUSTFLAGS}" cargo build --manifest-path lib/c-api/Cargo.toml --release \
--no-default-features --features universal,dylib,staticlib,wasi --no-default-features --features universal,dylib,staticlib,wasi
# Compatibility
# TODO: Delete this method
build-capi-cranelift-system-libffi: build-capi
########### ###########
# Testing # # Testing #
@@ -582,6 +579,7 @@ endif
package-capi: package-capi:
mkdir -p "package/include" mkdir -p "package/include"
mkdir -p "package/lib" mkdir -p "package/lib"
cp lib/c-api/wasmer.h* package/include
cp lib/c-api/wasmer_wasm.h* package/include cp lib/c-api/wasmer_wasm.h* package/include
cp lib/c-api/wasm.h* package/include cp lib/c-api/wasm.h* package/include
cp lib/c-api/README.md package/include/README.md cp lib/c-api/README.md package/include/README.md

View File

@@ -118,7 +118,7 @@ languages**, so you can use WebAssembly _anywhere_.
| | Language | Package | Documentation | | | Language | Package | Documentation |
|-|-|-|-| |-|-|-|-|
| ![Rust logo] | [**Rust**][Rust integration] | [`wasmer` Rust crate] | [Learn][rust docs] | ![Rust logo] | [**Rust**][Rust integration] | [`wasmer` Rust crate] | [Learn][rust docs]
| ![C logo] | [**C/C++**][C integration] | [`wasmer_wasm.h` header] | [Learn][c docs] | | ![C logo] | [**C/C++**][C integration] | [`wasmer.h` header] | [Learn][c docs] |
| ![C# logo] | [**C#**][C# integration] | [`WasmerSharp` NuGet package] | [Learn][c# docs] | | ![C# logo] | [**C#**][C# integration] | [`WasmerSharp` NuGet package] | [Learn][c# docs] |
| ![D logo] | [**D**][D integration] | [`wasmer` Dub package] | [Learn][d docs] | | ![D logo] | [**D**][D integration] | [`wasmer` Dub package] | [Learn][d docs] |
| ![Python logo] | [**Python**][Python integration] | [`wasmer` PyPI package] | [Learn][python docs] | | ![Python logo] | [**Python**][Python integration] | [`wasmer` PyPI package] | [Learn][python docs] |
@@ -142,7 +142,7 @@ languages**, so you can use WebAssembly _anywhere_.
[c logo]: https://raw.githubusercontent.com/wasmerio/wasmer/master/assets/languages/c.svg [c logo]: https://raw.githubusercontent.com/wasmerio/wasmer/master/assets/languages/c.svg
[c integration]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api [c integration]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api
[`wasmer_wasm.h` header]: https://github.com/wasmerio/wasmer/blob/master/lib/c-api/wasmer_wasm.h [`wasmer.h` header]: https://github.com/wasmerio/wasmer/blob/master/lib/c-api/wasmer.h
[c docs]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api [c docs]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api
[c# logo]: https://raw.githubusercontent.com/wasmerio/wasmer/master/assets/languages/csharp.svg [c# logo]: https://raw.githubusercontent.com/wasmerio/wasmer/master/assets/languages/csharp.svg

View File

@@ -14,7 +14,7 @@ $WASMER_DIR/
wasm.h wasm.h
wasmer.h wasmer.h
wasmer.hh wasmer.hh
wasmer_wasm.h wasmer.h
``` ```
Wasmer binary also ships with [`wasmer-config`](#wasmer-config) Wasmer binary also ships with [`wasmer-config`](#wasmer-config)
@@ -27,7 +27,7 @@ Here is a simple example to use the C API:
```c ```c
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -88,10 +88,10 @@ fn running_self() -> bool {
/// Build the header files for the `wasm_c_api` API. /// Build the header files for the `wasm_c_api` API.
fn build_wasm_c_api_headers(crate_dir: &str, out_dir: &str) { fn build_wasm_c_api_headers(crate_dir: &str, out_dir: &str) {
let mut crate_header_file = PathBuf::from(crate_dir); let mut crate_header_file = PathBuf::from(crate_dir);
crate_header_file.push("wasmer_wasm"); crate_header_file.push("wasmer");
let mut out_header_file = PathBuf::from(out_dir); let mut out_header_file = PathBuf::from(out_dir);
out_header_file.push("wasmer_wasm"); out_header_file.push("wasmer");
let mut pre_header = format!( let mut pre_header = format!(
r#"// The Wasmer C/C++ header file compatible with the [`wasm-c-api`] r#"// The Wasmer C/C++ header file compatible with the [`wasm-c-api`]
@@ -130,9 +130,9 @@ fn build_wasm_c_api_headers(crate_dir: &str, out_dir: &str) {
// [`wasmer-c-api`]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api // [`wasmer-c-api`]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api
// [documentation]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api/ // [documentation]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api/
#if !defined(WASMER_WASM_H_PRELUDE) #if !defined(WASMER_H_PRELUDE)
#define WASMER_WASM_H_PRELUDE #define WASMER_H_PRELUDE
{pre_header}"#, {pre_header}"#,
pre_header = PRE_HEADER pre_header = PRE_HEADER
); );
@@ -148,7 +148,7 @@ fn build_wasm_c_api_headers(crate_dir: &str, out_dir: &str) {
// Close pre header. // Close pre header.
pre_header.push_str( pre_header.push_str(
r#" r#"
#endif // WASMER_WASM_H_PRELUDE #endif // WASMER_H_PRELUDE
// //
@@ -157,7 +157,7 @@ fn build_wasm_c_api_headers(crate_dir: &str, out_dir: &str) {
"#, "#,
); );
let guard = "WASMER_WASM_H"; let guard = "WASMER_H";
// C bindings. // C bindings.
{ {

View File

@@ -2,8 +2,9 @@
* *
*.o *.o
# Unignore files ending with `.c` (i.e. `wasm-c-api-wasi.c`) # Unignore files ending with `.c` (i.e. `wasm-c-api-wasi.c`)
!*.c !*.c
# Unignore Makefile # Unignore Makefile
!Makefile !Makefile
!assets
!assets/*

View File

@@ -18,7 +18,13 @@ $(info * CFLAGS: $(CFLAGS))
$(info * LDFLAGS: $(LDFLAGS)) $(info * LDFLAGS: $(LDFLAGS))
$(info * LDLIBS: $(LDLIBS)) $(info * LDLIBS: $(LDLIBS))
ALL = instance imports-exports exports-function exports-global memory features ALL = deprecated-header early-exit instance imports-exports exports-function exports-global memory memory2 features wasi
.SILENT: deprecated-header deprecated-header.o
deprecated-header: deprecated-header.o
.SILENT: early-exit early-exit.o
early-exit: early-exit.o
.SILENT: instance instance.o .SILENT: instance instance.o
instance: instance.o instance: instance.o
@@ -35,9 +41,15 @@ exports-global: exports-global.o
.SILENT: memory memory.o .SILENT: memory memory.o
memory: memory.o memory: memory.o
.SILENT: memory2 memory2.o
memory2: memory2.o
.SILENT: features features.o .SILENT: features features.o
features: features.o features: features.o
.SILENT: wasi wasi.o
wasi: wasi.o
.PHONY: all .PHONY: all
all: $(ALL) all: $(ALL)

View File

@@ -0,0 +1,132 @@
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// This is now deprecated, but it should work regardless
#include "wasmer_wasm.h"
#define own
// Use the last_error API to retrieve error messages
own char* get_wasmer_error() {
int error_len = wasmer_last_error_length();
printf("Error len: `%d`\n", error_len);
char *error_str = malloc(error_len);
wasmer_last_error_message(error_str, error_len);
return error_str;
}
int main(int argc, const char *argv[]) {
printf("Initializing...\n");
own wasm_engine_t* engine = wasm_engine_new();
own wasm_store_t* store = wasm_store_new(engine);
// =====================
wasm_limits_t limits1 = {
.min = 0,
.max = 0x7FFFFFFF,
};
own wasm_memorytype_t* memtype1 = wasm_memorytype_new(&limits1);
own wasm_memory_t* memory1 = wasm_memory_new(store, memtype1);
assert(memory1 == NULL);
char* error = get_wasmer_error();
printf("Found error string: %s\n", error);
assert(0 == strcmp("The maximum requested memory (2147483647 pages) is greater than the maximum allowed memory (65536 pages)", error));
free(error);
wasm_memorytype_delete(memtype1);
// =====================
wasm_limits_t limits2 = {
.min = 15,
.max = 25,
};
own wasm_memorytype_t* memtype2 = wasm_memorytype_new(&limits2);
own wasm_memory_t* memory2 = wasm_memory_new(store, memtype2);
assert(memory2 != NULL);
wasm_memorytype_delete(memtype2);
wasm_memory_delete(memory2);
// =====================
wasm_limits_t limits3 = {
.min = 15,
.max = wasm_limits_max_default,
};
own wasm_memorytype_t* memtype3 = wasm_memorytype_new(&limits3);
own wasm_memory_t* memory3 = wasm_memory_new(store, memtype3);
assert(memory3 != NULL);
int size = wasm_memory_size(memory3);
printf("memory size: %d\n", size);
wasm_memorytype_delete(memtype3);
wasm_memory_delete(memory3);
// =====================
wasm_limits_t limits4 = {
.min = 0x7FFFFFFF,
.max = 0x7FFFFFFF,
};
own wasm_memorytype_t* memtype4 = wasm_memorytype_new(&limits4);
own wasm_memory_t* memory4 = wasm_memory_new(store, memtype4);
assert(memory4 == NULL);
error = get_wasmer_error();
printf("Found error string: %s\n", error);
assert(0 == strcmp("The minimum requested (2147483647 pages) memory is greater than the maximum allowed memory (65536 pages)", error));
free(error);
wasm_memorytype_delete(memtype4);
// =====================
wasm_limits_t limits5 = {
.min = 0x7FFFFFFF,
.max = 0x0FFFFFFF,
};
own wasm_memorytype_t* memtype5 = wasm_memorytype_new(&limits5);
own wasm_memory_t* memory5 = wasm_memory_new(store, memtype5);
assert(memory5 == NULL);
error = get_wasmer_error();
printf("Found error string: %s\n", error);
assert(0 == strcmp("The minimum requested (2147483647 pages) memory is greater than the maximum allowed memory (65536 pages)", error));
free(error);
wasm_memorytype_delete(memtype5);
// =====================
wasm_limits_t limits6 = {
.min = 15,
.max = 10,
};
own wasm_memorytype_t* memtype6 = wasm_memorytype_new(&limits6);
own wasm_memory_t* memory6 = wasm_memory_new(store, memtype6);
assert(memory6 == NULL);
error = get_wasmer_error();
printf("Found error string: %s\n", error);
assert(0 == strcmp("The memory is invalid because the maximum (10 pages) is less than the minimum (15 pages)", error));
free(error);
wasm_memorytype_delete(memtype6);
// =====================
wasm_limits_t limits7 = {
.min = 0x7FFFFFFF,
.max = 10,
};
own wasm_memorytype_t* memtype7 = wasm_memorytype_new(&limits7);
own wasm_memory_t* memory7 = wasm_memory_new(store, memtype7);
assert(memory7 == NULL);
error = get_wasmer_error();
printf("Found error string: %s\n", error);
assert(0 == strcmp("The minimum requested (2147483647 pages) memory is greater than the maximum allowed memory (65536 pages)", error));
free(error);
wasm_memorytype_delete(memtype7);
printf("Shutting down...\n");
wasm_store_delete(store);
wasm_engine_delete(engine);
printf("Done.\n");
return 0;
}

View File

@@ -3,7 +3,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "wasmer_wasm.h" #include "wasmer.h"
#define own #define own

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
wasm_trap_t* host_func_callback(const wasm_val_vec_t* args, wasm_val_vec_t* results) { wasm_trap_t* host_func_callback(const wasm_val_vec_t* args, wasm_val_vec_t* results) {
printf("Calling back...\n> "); printf("Calling back...\n> ");

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -1,5 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include "wasmer_wasm.h" #include "wasmer.h"
int main(int argc, const char* argv[]) { int main(int argc, const char* argv[]) {
const char *wat_string = const char *wat_string =

View File

@@ -3,7 +3,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "wasmer_wasm.h" #include "wasmer.h"
#define own #define own

View File

@@ -3,7 +3,7 @@
#include <string.h> #include <string.h>
#include <inttypes.h> #include <inttypes.h>
#include "wasmer_wasm.h" #include "wasmer.h"
#define BUF_SIZE 128 #define BUF_SIZE 128
#define own #define own

View File

@@ -13,7 +13,7 @@
//! # use inline_c::assert_c; //! # use inline_c::assert_c;
//! # fn main() { //! # fn main() {
//! # (assert_c! { //! # (assert_c! {
//! # #include "tests/wasmer_wasm.h" //! # #include "tests/wasmer.h"
//! # //! #
//! int main() { //! int main() {
//! // Create an invalid WebAssembly module from a WAT definition, //! // Create an invalid WebAssembly module from a WAT definition,

View File

@@ -11,7 +11,7 @@
//! by the `wasm.h` C header file. However, this crate API provides //! by the `wasm.h` C header file. However, this crate API provides
//! some extensions, like the `wasi_*` or `wasmer_*` types and //! some extensions, like the `wasi_*` or `wasmer_*` types and
//! functions, which aren't yet defined by the standard. The //! functions, which aren't yet defined by the standard. The
//! `wasmer_wasm.h` header file already depends on the `wasm.h` //! `wasmer.h` header file already depends on the `wasm.h`
//! file. A copy lands in this repository for the sake of simplicity. //! file. A copy lands in this repository for the sake of simplicity.
#![doc(html_favicon_url = "https://wasmer.io/images/icons/favicon-32x32.png")] #![doc(html_favicon_url = "https://wasmer.io/images/icons/favicon-32x32.png")]

View File

@@ -118,7 +118,7 @@ pub struct wasm_config_t {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -157,7 +157,7 @@ pub extern "C" fn wasm_config_new() -> Box<wasm_config_t> {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -186,7 +186,7 @@ pub extern "C" fn wasm_config_delete(_config: Option<Box<wasm_config_t>>) {}
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -240,7 +240,7 @@ pub extern "C" fn wasm_config_set_compiler(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -397,7 +397,7 @@ cfg_if! {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create a default engine. /// // Create a default engine.
@@ -621,7 +621,7 @@ mod tests {
#[test] #[test]
fn test_engine_new() { fn test_engine_new() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();

View File

@@ -96,7 +96,7 @@ mod tests {
#[test] #[test]
fn test_set_host_global_immutable() { fn test_set_host_global_immutable() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -128,7 +128,7 @@ mod tests {
#[test] #[test]
fn test_set_guest_global_immutable() { fn test_set_guest_global_immutable() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();

View File

@@ -256,7 +256,7 @@ mod tests {
#[test] #[test]
fn test_extern_copy() { fn test_extern_copy() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();

View File

@@ -99,7 +99,7 @@ pub unsafe extern "C" fn wasm_instance_delete(_instance: Option<Box<wasm_instanc
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -201,7 +201,7 @@ mod tests {
#[test] #[test]
fn test_instance_new() { fn test_instance_new() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
// The `sum` host function implementation. // The `sum` host function implementation.
wasm_trap_t* sum_callback( wasm_trap_t* sum_callback(

View File

@@ -15,7 +15,7 @@ macro_rules! wasm_declare_vec_inner {
# use inline_c::assert_c; # use inline_c::assert_c;
# fn main() { # fn main() {
# (assert_c! { # (assert_c! {
# #include \"tests/wasmer_wasm.h\" # #include \"tests/wasmer.h\"
# #
int main() { int main() {
// Creates an empty vector of `" $prefix "_" $name "_t`. // Creates an empty vector of `" $prefix "_" $name "_t`.
@@ -60,7 +60,7 @@ Read the documentation of [`" $prefix "_" $name "_t`] to see more concrete examp
# use inline_c::assert_c; # use inline_c::assert_c;
# fn main() { # fn main() {
# (assert_c! { # (assert_c! {
# #include \"tests/wasmer_wasm.h\" # #include \"tests/wasmer.h\"
# #
int main() { int main() {
// Create a vector of 2 `" $prefix "_" $name "_t`. // Create a vector of 2 `" $prefix "_" $name "_t`.
@@ -202,7 +202,7 @@ See the [`" $prefix "_" $name "_vec_t`] type to get an example."]
# use inline_c::assert_c; # use inline_c::assert_c;
# fn main() { # fn main() {
# (assert_c! { # (assert_c! {
# #include \"tests/wasmer_wasm.h\" # #include \"tests/wasmer.h\"
# #
int main() { int main() {
// Creates an empty vector of `" $prefix "_" $name "_t`. // Creates an empty vector of `" $prefix "_" $name "_t`.
@@ -383,7 +383,7 @@ Read the documentation of [`" $prefix "_" $name "_t`] to see more concrete examp
# use inline_c::assert_c; # use inline_c::assert_c;
# fn main() { # fn main() {
# (assert_c! { # (assert_c! {
# #include \"tests/wasmer_wasm.h\" # #include \"tests/wasmer.h\"
# #
int main() { int main() {
// Creates an empty vector of `" $prefix "_" $name "_t`. // Creates an empty vector of `" $prefix "_" $name "_t`.

View File

@@ -5,7 +5,7 @@
//! be characterized as a _living standard_. As such, the API is not //! be characterized as a _living standard_. As such, the API is not
//! yet stable, even though it shows maturity over time. The API is //! yet stable, even though it shows maturity over time. The API is
//! described by the `wasm.h` C header, which is included by //! described by the `wasm.h` C header, which is included by
//! `wasmer_wasm.h` C header file (which contains extension of the //! `wasmer.h` C header file (which contains extension of the
//! standard API, for example to provide WASI or vendor-specific //! standard API, for example to provide WASI or vendor-specific
//! features). //! features).
//! //!
@@ -39,7 +39,7 @@ pub mod macros;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine. /// // Create the engine.
@@ -83,7 +83,7 @@ pub mod externals;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -141,7 +141,7 @@ pub mod instance;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -198,7 +198,7 @@ pub mod module;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine. /// // Create the engine.
@@ -244,7 +244,7 @@ pub mod value;
/// Wasmer-specific API to get or query the version of this Wasm C API. /// Wasmer-specific API to get or query the version of this Wasm C API.
/// ///
/// The `wasmer_wasm.h` file provides the `WASMER_VERSION`, /// The `wasmer.h` file provides the `WASMER_VERSION`,
/// `WASMER_VERSION_MAJOR`, `WASMER_VERSION_MINOR`, /// `WASMER_VERSION_MAJOR`, `WASMER_VERSION_MINOR`,
/// `WASMER_VERSION_PATCH` and `WASMER_VERSION_PRE` /// `WASMER_VERSION_PATCH` and `WASMER_VERSION_PRE`
/// constants. However, in absence of this header file, it is possible /// constants. However, in absence of this header file, it is possible
@@ -261,7 +261,7 @@ pub mod value;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Get and print the version. /// // Get and print the version.
@@ -293,7 +293,7 @@ pub mod wasi;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Our WAT module. /// // Our WAT module.

View File

@@ -65,7 +65,7 @@ pub unsafe extern "C" fn wasm_module_delete(_module: Option<Box<wasm_module_t>>)
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -132,7 +132,7 @@ pub unsafe extern "C" fn wasm_module_validate(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -256,7 +256,7 @@ pub unsafe extern "C" fn wasm_module_exports(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -408,7 +408,7 @@ pub unsafe extern "C" fn wasm_module_imports(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -524,7 +524,7 @@ mod tests {
#[test] #[test]
fn test_module_validate() { fn test_module_validate() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -551,7 +551,7 @@ mod tests {
#[test] #[test]
fn test_module_new() { fn test_module_new() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -580,7 +580,7 @@ mod tests {
#[test] #[test]
fn test_module_exports() { fn test_module_exports() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -688,7 +688,7 @@ mod tests {
#[test] #[test]
fn test_module_imports() { fn test_module_imports() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -806,7 +806,7 @@ mod tests {
#[test] #[test]
fn test_module_serialize() { fn test_module_serialize() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -840,7 +840,7 @@ mod tests {
#[test] #[test]
fn test_module_serialize_and_deserialize() { fn test_module_serialize_and_deserialize() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();

View File

@@ -14,7 +14,7 @@ use super::target_lexicon::wasmer_target_t;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -58,7 +58,7 @@ pub extern "C" fn wasm_config_set_target(config: &mut wasm_config_t, target: Box
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -105,7 +105,7 @@ pub extern "C" fn wasm_config_set_features(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the configuration. /// // Create the configuration.
@@ -178,7 +178,7 @@ mod tests {
); );
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
#include <stdlib.h> #include <stdlib.h>
int main() { int main() {
@@ -213,7 +213,7 @@ mod tests {
); );
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
#include <stdlib.h> #include <stdlib.h>
int main() { int main() {
@@ -252,7 +252,7 @@ mod tests {
); );
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
#include <stdlib.h> #include <stdlib.h>
int main() { int main() {

View File

@@ -8,7 +8,7 @@
//! # use inline_c::assert_c; //! # use inline_c::assert_c;
//! # fn main() { //! # fn main() {
//! # (assert_c! { //! # (assert_c! {
//! # #include "tests/wasmer_wasm.h" //! # #include "tests/wasmer.h"
//! # //! #
//! int main() { //! int main() {
//! // Declare features. //! // Declare features.

View File

@@ -11,7 +11,7 @@
//! # use inline_c::assert_c; //! # use inline_c::assert_c;
//! # fn main() { //! # fn main() {
//! # (assert_c! { //! # (assert_c! {
//! # #include "tests/wasmer_wasm.h" //! # #include "tests/wasmer.h"
//! # //! #
//! // Define our “cost function”. //! // Define our “cost function”.
//! uint64_t cost_function(wasmer_parser_operator_t wasm_operator) { //! uint64_t cost_function(wasmer_parser_operator_t wasm_operator) {
@@ -233,7 +233,7 @@ pub extern "C" fn wasmer_metering_points_are_exhausted(instance: &wasm_instance_
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// // Define a dummy “cost function”. /// // Define a dummy “cost function”.
/// uint64_t cost_function(wasmer_parser_operator_t wasm_operator) { /// uint64_t cost_function(wasmer_parser_operator_t wasm_operator) {

View File

@@ -16,7 +16,7 @@ use std::sync::Arc;
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.
@@ -83,7 +83,7 @@ pub unsafe extern "C" fn wasmer_module_name(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create the engine and the store. /// // Create the engine and the store.

View File

@@ -9,7 +9,7 @@
//! # use inline_c::assert_c; //! # use inline_c::assert_c;
//! # fn main() { //! # fn main() {
//! # (assert_c! { //! # (assert_c! {
//! # #include "tests/wasmer_wasm.h" //! # #include "tests/wasmer.h"
//! # //! #
//! int main() { //! int main() {
//! // Declare the target triple. //! // Declare the target triple.
@@ -112,7 +112,7 @@ pub extern "C" fn wasmer_target_delete(_target: Option<Box<wasmer_target_t>>) {}
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// wasm_name_t triple_name; /// wasm_name_t triple_name;
@@ -165,7 +165,7 @@ pub unsafe extern "C" fn wasmer_triple_new(
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// wasmer_triple_t* triple = wasmer_triple_new_from_host(); /// wasmer_triple_t* triple = wasmer_triple_new_from_host();
@@ -229,7 +229,7 @@ pub extern "C" fn wasmer_triple_delete(_triple: Option<Box<wasmer_triple_t>>) {}
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create a new CPU feature set. /// // Create a new CPU feature set.

View File

@@ -46,7 +46,7 @@ pub union wasm_val_inner {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Create a 32-bit integer Wasm value. /// // Create a 32-bit integer Wasm value.

View File

@@ -43,7 +43,7 @@ pub unsafe extern "C" fn wasmer_version() -> *const c_char {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Get and print the version components. /// // Get and print the version components.
@@ -101,7 +101,7 @@ pub unsafe extern "C" fn wasmer_version_patch() -> u8 {
/// # use inline_c::assert_c; /// # use inline_c::assert_c;
/// # fn main() { /// # fn main() {
/// # (assert_c! { /// # (assert_c! {
/// # #include "tests/wasmer_wasm.h" /// # #include "tests/wasmer.h"
/// # /// #
/// int main() { /// int main() {
/// // Get and print the pre version. /// // Get and print the pre version.

View File

@@ -395,7 +395,7 @@ mod tests {
#[test] #[test]
fn test_wasi_get_wasi_version_snapshot0() { fn test_wasi_get_wasi_version_snapshot0() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -426,7 +426,7 @@ mod tests {
#[test] #[test]
fn test_wasi_get_wasi_version_snapshot1() { fn test_wasi_get_wasi_version_snapshot1() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();
@@ -457,7 +457,7 @@ mod tests {
#[test] #[test]
fn test_wasi_get_wasi_version_invalid() { fn test_wasi_get_wasi_version_invalid() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_engine_t* engine = wasm_engine_new(); wasm_engine_t* engine = wasm_engine_new();

View File

@@ -39,7 +39,7 @@ mod tests {
#[test] #[test]
fn test_wat2wasm() { fn test_wat2wasm() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_byte_vec_t wat; wasm_byte_vec_t wat;
@@ -72,7 +72,7 @@ mod tests {
#[test] #[test]
fn test_wat2wasm_failed() { fn test_wat2wasm_failed() {
(assert_c! { (assert_c! {
#include "tests/wasmer_wasm.h" #include "tests/wasmer.h"
int main() { int main() {
wasm_byte_vec_t wat; wasm_byte_vec_t wat;

View File

@@ -18,9 +18,6 @@ $(info * CFLAGS: $(CFLAGS))
$(info * LDFLAGS: $(LDFLAGS)) $(info * LDFLAGS: $(LDFLAGS))
$(info * LDLIBS: $(LDLIBS)) $(info * LDLIBS: $(LDLIBS))
CAPI_WASMER_TESTS = \
test-early-exit test-memory test-wasi \
CAPI_BASE_TESTS = \ CAPI_BASE_TESTS = \
wasm-c-api/example/callback wasm-c-api/example/global wasm-c-api/example/hello \ wasm-c-api/example/callback wasm-c-api/example/global wasm-c-api/example/hello \
wasm-c-api/example/memory wasm-c-api/example/reflect wasm-c-api/example/serialize \ wasm-c-api/example/memory wasm-c-api/example/reflect wasm-c-api/example/serialize \

View File

@@ -5,7 +5,7 @@
#define TEST_WASM #define TEST_WASM
#include "../wasm.h" #include "../wasm.h"
#include "../wasmer_wasm.h" #include "../wasmer.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>

View File

@@ -1,10 +1,10 @@
// This header file is used only for test purposes! It is used by unit // This header file is used only for test purposes! It is used by unit
// test inside the `src/` directory for the moment. // test inside the `src/` directory for the moment.
#ifndef TEST_WASMER_WASM #ifndef TEST_WASMER
#define TEST_WASMER_WASM #define TEST_WASMER
#include "../wasmer_wasm.h" #include "../wasmer.h"
#include "wasm.h" #include "wasm.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -22,4 +22,4 @@ static inline void wasmer_byte_vec_new_from_string(wasm_byte_vec_t *out,
wasm_byte_vec_new(out, strlen(s), s); wasm_byte_vec_new(out, strlen(s), s);
} }
#endif /* TEST_WASMER_WASM */ #endif /* TEST_WASMER */

896
lib/c-api/wasmer.h Normal file
View File

@@ -0,0 +1,896 @@
// The Wasmer C/C++ header file compatible with the [`wasm-c-api`]
// standard API, as `wasm.h` (included here).
//
// This file is automatically generated by `lib/c-api/build.rs` of the
// [`wasmer-c-api`] Rust crate.
//
// # Stability
//
// The [`wasm-c-api`] standard API is a _living_ standard. There is no
// commitment for stability yet. We (Wasmer) will try our best to keep
// backward compatibility as much as possible. Nonetheless, some
// necessary API aren't yet standardized, and as such, we provide a
// custom API, e.g. `wasi_*` types and functions.
//
// The documentation makes it clear whether a function is unstable.
//
// When a type or a function will be deprecated, it will be marked as
// such with the appropriated compiler warning, and will be removed at
// the next release round.
//
// # Documentation
//
// At the time of writing, the [`wasm-c-api`] standard has no
// documentation. This file also does not include inline
// documentation. However, we have made (and we continue to make) an
// important effort to document everything. [See the documentation
// online][documentation]. Please refer to this page for the real
// canonical documentation. It also contains numerous examples.
//
// To generate the documentation locally, run `cargo doc --open` from
// within the [`wasmer-c-api`] Rust crate.
//
// [`wasm-c-api`]: https://github.com/WebAssembly/wasm-c-api
// [`wasmer-c-api`]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api
// [documentation]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api/
#if !defined(WASMER_H_PRELUDE)
#define WASMER_H_PRELUDE
// Define the `ARCH_X86_X64` constant.
#if defined(MSVC) && defined(_M_AMD64)
# define ARCH_X86_64
#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
# define ARCH_X86_64
#endif
// Compatibility with non-Clang compilers.
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
// Compatibility with non-Clang compilers.
#if !defined(__has_declspec_attribute)
# define __has_declspec_attribute(x) 0
#endif
// Define the `DEPRECATED` macro.
#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
# define DEPRECATED(message) __attribute__((deprecated(message)))
#elif defined(MSVC) || __has_declspec_attribute(deprecated)
# define DEPRECATED(message) __declspec(deprecated(message))
#endif
// The `universal` feature has been enabled for this build.
#define WASMER_UNIVERSAL_ENABLED
// The `compiler` feature has been enabled for this build.
#define WASMER_COMPILER_ENABLED
// The `wasi` feature has been enabled for this build.
#define WASMER_WASI_ENABLED
// The `middlewares` feature has been enabled for this build.
#define WASMER_MIDDLEWARES_ENABLED
// This file corresponds to the following Wasmer version.
#define WASMER_VERSION "1.0.2"
#define WASMER_VERSION_MAJOR 1
#define WASMER_VERSION_MINOR 0
#define WASMER_VERSION_PATCH 2
#define WASMER_VERSION_PRE ""
#endif // WASMER_H_PRELUDE
//
// OK, here we go. The code below is automatically generated.
//
#ifndef WASMER_H
#define WASMER_H
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include "wasm.h"
#if defined(WASMER_WASI_ENABLED)
typedef enum wasi_version_t {
#if defined(WASMER_WASI_ENABLED)
INVALID_VERSION = -1,
#endif
#if defined(WASMER_WASI_ENABLED)
LATEST = 0,
#endif
#if defined(WASMER_WASI_ENABLED)
SNAPSHOT0 = 1,
#endif
#if defined(WASMER_WASI_ENABLED)
SNAPSHOT1 = 2,
#endif
} wasi_version_t;
#endif
#if defined(WASMER_COMPILER_ENABLED)
typedef enum wasmer_compiler_t {
CRANELIFT = 0,
LLVM = 1,
SINGLEPASS = 2,
} wasmer_compiler_t;
#endif
typedef enum wasmer_engine_t {
UNIVERSAL = 0,
DYLIB = 1,
STATICLIB = 2,
} wasmer_engine_t;
typedef enum wasmer_parser_operator_t {
Unreachable,
Nop,
Block,
Loop,
If,
Else,
Try,
Catch,
CatchAll,
Delegate,
Throw,
Rethrow,
Unwind,
End,
Br,
BrIf,
BrTable,
Return,
Call,
CallIndirect,
ReturnCall,
ReturnCallIndirect,
Drop,
Select,
TypedSelect,
LocalGet,
LocalSet,
LocalTee,
GlobalGet,
GlobalSet,
I32Load,
I64Load,
F32Load,
F64Load,
I32Load8S,
I32Load8U,
I32Load16S,
I32Load16U,
I64Load8S,
I64Load8U,
I64Load16S,
I64Load16U,
I64Load32S,
I64Load32U,
I32Store,
I64Store,
F32Store,
F64Store,
I32Store8,
I32Store16,
I64Store8,
I64Store16,
I64Store32,
MemorySize,
MemoryGrow,
I32Const,
I64Const,
F32Const,
F64Const,
RefNull,
RefIsNull,
RefFunc,
I32Eqz,
I32Eq,
I32Ne,
I32LtS,
I32LtU,
I32GtS,
I32GtU,
I32LeS,
I32LeU,
I32GeS,
I32GeU,
I64Eqz,
I64Eq,
I64Ne,
I64LtS,
I64LtU,
I64GtS,
I64GtU,
I64LeS,
I64LeU,
I64GeS,
I64GeU,
F32Eq,
F32Ne,
F32Lt,
F32Gt,
F32Le,
F32Ge,
F64Eq,
F64Ne,
F64Lt,
F64Gt,
F64Le,
F64Ge,
I32Clz,
I32Ctz,
I32Popcnt,
I32Add,
I32Sub,
I32Mul,
I32DivS,
I32DivU,
I32RemS,
I32RemU,
I32And,
I32Or,
I32Xor,
I32Shl,
I32ShrS,
I32ShrU,
I32Rotl,
I32Rotr,
I64Clz,
I64Ctz,
I64Popcnt,
I64Add,
I64Sub,
I64Mul,
I64DivS,
I64DivU,
I64RemS,
I64RemU,
I64And,
I64Or,
I64Xor,
I64Shl,
I64ShrS,
I64ShrU,
I64Rotl,
I64Rotr,
F32Abs,
F32Neg,
F32Ceil,
F32Floor,
F32Trunc,
F32Nearest,
F32Sqrt,
F32Add,
F32Sub,
F32Mul,
F32Div,
F32Min,
F32Max,
F32Copysign,
F64Abs,
F64Neg,
F64Ceil,
F64Floor,
F64Trunc,
F64Nearest,
F64Sqrt,
F64Add,
F64Sub,
F64Mul,
F64Div,
F64Min,
F64Max,
F64Copysign,
I32WrapI64,
I32TruncF32S,
I32TruncF32U,
I32TruncF64S,
I32TruncF64U,
I64ExtendI32S,
I64ExtendI32U,
I64TruncF32S,
I64TruncF32U,
I64TruncF64S,
I64TruncF64U,
F32ConvertI32S,
F32ConvertI32U,
F32ConvertI64S,
F32ConvertI64U,
F32DemoteF64,
F64ConvertI32S,
F64ConvertI32U,
F64ConvertI64S,
F64ConvertI64U,
F64PromoteF32,
I32ReinterpretF32,
I64ReinterpretF64,
F32ReinterpretI32,
F64ReinterpretI64,
I32Extend8S,
I32Extend16S,
I64Extend8S,
I64Extend16S,
I64Extend32S,
I32TruncSatF32S,
I32TruncSatF32U,
I32TruncSatF64S,
I32TruncSatF64U,
I64TruncSatF32S,
I64TruncSatF32U,
I64TruncSatF64S,
I64TruncSatF64U,
MemoryInit,
DataDrop,
MemoryCopy,
MemoryFill,
TableInit,
ElemDrop,
TableCopy,
TableFill,
TableGet,
TableSet,
TableGrow,
TableSize,
MemoryAtomicNotify,
MemoryAtomicWait32,
MemoryAtomicWait64,
AtomicFence,
I32AtomicLoad,
I64AtomicLoad,
I32AtomicLoad8U,
I32AtomicLoad16U,
I64AtomicLoad8U,
I64AtomicLoad16U,
I64AtomicLoad32U,
I32AtomicStore,
I64AtomicStore,
I32AtomicStore8,
I32AtomicStore16,
I64AtomicStore8,
I64AtomicStore16,
I64AtomicStore32,
I32AtomicRmwAdd,
I64AtomicRmwAdd,
I32AtomicRmw8AddU,
I32AtomicRmw16AddU,
I64AtomicRmw8AddU,
I64AtomicRmw16AddU,
I64AtomicRmw32AddU,
I32AtomicRmwSub,
I64AtomicRmwSub,
I32AtomicRmw8SubU,
I32AtomicRmw16SubU,
I64AtomicRmw8SubU,
I64AtomicRmw16SubU,
I64AtomicRmw32SubU,
I32AtomicRmwAnd,
I64AtomicRmwAnd,
I32AtomicRmw8AndU,
I32AtomicRmw16AndU,
I64AtomicRmw8AndU,
I64AtomicRmw16AndU,
I64AtomicRmw32AndU,
I32AtomicRmwOr,
I64AtomicRmwOr,
I32AtomicRmw8OrU,
I32AtomicRmw16OrU,
I64AtomicRmw8OrU,
I64AtomicRmw16OrU,
I64AtomicRmw32OrU,
I32AtomicRmwXor,
I64AtomicRmwXor,
I32AtomicRmw8XorU,
I32AtomicRmw16XorU,
I64AtomicRmw8XorU,
I64AtomicRmw16XorU,
I64AtomicRmw32XorU,
I32AtomicRmwXchg,
I64AtomicRmwXchg,
I32AtomicRmw8XchgU,
I32AtomicRmw16XchgU,
I64AtomicRmw8XchgU,
I64AtomicRmw16XchgU,
I64AtomicRmw32XchgU,
I32AtomicRmwCmpxchg,
I64AtomicRmwCmpxchg,
I32AtomicRmw8CmpxchgU,
I32AtomicRmw16CmpxchgU,
I64AtomicRmw8CmpxchgU,
I64AtomicRmw16CmpxchgU,
I64AtomicRmw32CmpxchgU,
V128Load,
V128Store,
V128Const,
I8x16Splat,
I8x16ExtractLaneS,
I8x16ExtractLaneU,
I8x16ReplaceLane,
I16x8Splat,
I16x8ExtractLaneS,
I16x8ExtractLaneU,
I16x8ReplaceLane,
I32x4Splat,
I32x4ExtractLane,
I32x4ReplaceLane,
I64x2Splat,
I64x2ExtractLane,
I64x2ReplaceLane,
F32x4Splat,
F32x4ExtractLane,
F32x4ReplaceLane,
F64x2Splat,
F64x2ExtractLane,
F64x2ReplaceLane,
I8x16Eq,
I8x16Ne,
I8x16LtS,
I8x16LtU,
I8x16GtS,
I8x16GtU,
I8x16LeS,
I8x16LeU,
I8x16GeS,
I8x16GeU,
I16x8Eq,
I16x8Ne,
I16x8LtS,
I16x8LtU,
I16x8GtS,
I16x8GtU,
I16x8LeS,
I16x8LeU,
I16x8GeS,
I16x8GeU,
I32x4Eq,
I32x4Ne,
I32x4LtS,
I32x4LtU,
I32x4GtS,
I32x4GtU,
I32x4LeS,
I32x4LeU,
I32x4GeS,
I32x4GeU,
I64x2Eq,
I64x2Ne,
I64x2LtS,
I64x2GtS,
I64x2LeS,
I64x2GeS,
F32x4Eq,
F32x4Ne,
F32x4Lt,
F32x4Gt,
F32x4Le,
F32x4Ge,
F64x2Eq,
F64x2Ne,
F64x2Lt,
F64x2Gt,
F64x2Le,
F64x2Ge,
V128Not,
V128And,
V128AndNot,
V128Or,
V128Xor,
V128Bitselect,
V128AnyTrue,
I8x16Abs,
I8x16Neg,
I8x16AllTrue,
I8x16Bitmask,
I8x16Shl,
I8x16ShrS,
I8x16ShrU,
I8x16Add,
I8x16AddSatS,
I8x16AddSatU,
I8x16Sub,
I8x16SubSatS,
I8x16SubSatU,
I8x16MinS,
I8x16MinU,
I8x16MaxS,
I8x16MaxU,
I8x16Popcnt,
I16x8Abs,
I16x8Neg,
I16x8AllTrue,
I16x8Bitmask,
I16x8Shl,
I16x8ShrS,
I16x8ShrU,
I16x8Add,
I16x8AddSatS,
I16x8AddSatU,
I16x8Sub,
I16x8SubSatS,
I16x8SubSatU,
I16x8Mul,
I16x8MinS,
I16x8MinU,
I16x8MaxS,
I16x8MaxU,
I16x8ExtAddPairwiseI8x16S,
I16x8ExtAddPairwiseI8x16U,
I32x4Abs,
I32x4Neg,
I32x4AllTrue,
I32x4Bitmask,
I32x4Shl,
I32x4ShrS,
I32x4ShrU,
I32x4Add,
I32x4Sub,
I32x4Mul,
I32x4MinS,
I32x4MinU,
I32x4MaxS,
I32x4MaxU,
I32x4DotI16x8S,
I32x4ExtAddPairwiseI16x8S,
I32x4ExtAddPairwiseI16x8U,
I64x2Abs,
I64x2Neg,
I64x2AllTrue,
I64x2Bitmask,
I64x2Shl,
I64x2ShrS,
I64x2ShrU,
I64x2Add,
I64x2Sub,
I64x2Mul,
F32x4Ceil,
F32x4Floor,
F32x4Trunc,
F32x4Nearest,
F64x2Ceil,
F64x2Floor,
F64x2Trunc,
F64x2Nearest,
F32x4Abs,
F32x4Neg,
F32x4Sqrt,
F32x4Add,
F32x4Sub,
F32x4Mul,
F32x4Div,
F32x4Min,
F32x4Max,
F32x4PMin,
F32x4PMax,
F64x2Abs,
F64x2Neg,
F64x2Sqrt,
F64x2Add,
F64x2Sub,
F64x2Mul,
F64x2Div,
F64x2Min,
F64x2Max,
F64x2PMin,
F64x2PMax,
I32x4TruncSatF32x4S,
I32x4TruncSatF32x4U,
F32x4ConvertI32x4S,
F32x4ConvertI32x4U,
I8x16Swizzle,
I8x16Shuffle,
V128Load8Splat,
V128Load16Splat,
V128Load32Splat,
V128Load32Zero,
V128Load64Splat,
V128Load64Zero,
I8x16NarrowI16x8S,
I8x16NarrowI16x8U,
I16x8NarrowI32x4S,
I16x8NarrowI32x4U,
I16x8ExtendLowI8x16S,
I16x8ExtendHighI8x16S,
I16x8ExtendLowI8x16U,
I16x8ExtendHighI8x16U,
I32x4ExtendLowI16x8S,
I32x4ExtendHighI16x8S,
I32x4ExtendLowI16x8U,
I32x4ExtendHighI16x8U,
I64x2ExtendLowI32x4S,
I64x2ExtendHighI32x4S,
I64x2ExtendLowI32x4U,
I64x2ExtendHighI32x4U,
I16x8ExtMulLowI8x16S,
I16x8ExtMulHighI8x16S,
I16x8ExtMulLowI8x16U,
I16x8ExtMulHighI8x16U,
I32x4ExtMulLowI16x8S,
I32x4ExtMulHighI16x8S,
I32x4ExtMulLowI16x8U,
I32x4ExtMulHighI16x8U,
I64x2ExtMulLowI32x4S,
I64x2ExtMulHighI32x4S,
I64x2ExtMulLowI32x4U,
I64x2ExtMulHighI32x4U,
V128Load8x8S,
V128Load8x8U,
V128Load16x4S,
V128Load16x4U,
V128Load32x2S,
V128Load32x2U,
V128Load8Lane,
V128Load16Lane,
V128Load32Lane,
V128Load64Lane,
V128Store8Lane,
V128Store16Lane,
V128Store32Lane,
V128Store64Lane,
I8x16RoundingAverageU,
I16x8RoundingAverageU,
I16x8Q15MulrSatS,
F32x4DemoteF64x2Zero,
F64x2PromoteLowF32x4,
F64x2ConvertLowI32x4S,
F64x2ConvertLowI32x4U,
I32x4TruncSatF64x2SZero,
I32x4TruncSatF64x2UZero,
} wasmer_parser_operator_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasi_config_t wasi_config_t;
#endif
#if defined(WASMER_WASI_ENABLED)
typedef struct wasi_env_t wasi_env_t;
#endif
typedef struct wasmer_cpu_features_t wasmer_cpu_features_t;
typedef struct wasmer_features_t wasmer_features_t;
typedef struct wasmer_metering_t wasmer_metering_t;
typedef struct wasmer_middleware_t wasmer_middleware_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasmer_named_extern_t wasmer_named_extern_t;
#endif
typedef struct wasmer_target_t wasmer_target_t;
typedef struct wasmer_triple_t wasmer_triple_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasmer_named_extern_vec_t {
uintptr_t size;
struct wasmer_named_extern_t **data;
} wasmer_named_extern_vec_t;
#endif
typedef uint64_t (*wasmer_metering_cost_function_t)(enum wasmer_parser_operator_t wasm_operator);
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#if defined(WASMER_WASI_ENABLED)
void wasi_config_arg(struct wasi_config_t *config, const char *arg);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_capture_stderr(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_capture_stdout(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_env(struct wasi_config_t *config, const char *key, const char *value);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stderr(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stdin(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stdout(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_config_mapdir(struct wasi_config_t *config, const char *alias, const char *dir);
#endif
#if defined(WASMER_WASI_ENABLED)
struct wasi_config_t *wasi_config_new(const char *program_name);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_config_preopen_dir(struct wasi_config_t *config, const char *dir);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_env_delete(struct wasi_env_t *_state);
#endif
#if defined(WASMER_WASI_ENABLED)
struct wasi_env_t *wasi_env_new(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
intptr_t wasi_env_read_stderr(struct wasi_env_t *env, char *buffer, uintptr_t buffer_len);
#endif
#if defined(WASMER_WASI_ENABLED)
intptr_t wasi_env_read_stdout(struct wasi_env_t *env, char *buffer, uintptr_t buffer_len);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_get_imports(const wasm_store_t *store,
const wasm_module_t *module,
const struct wasi_env_t *wasi_env,
wasm_extern_vec_t *imports);
#endif
#if defined(WASMER_WASI_ENABLED)
wasm_func_t *wasi_get_start_function(wasm_instance_t *instance);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_get_unordered_imports(const wasm_store_t *store,
const wasm_module_t *module,
const struct wasi_env_t *wasi_env,
struct wasmer_named_extern_vec_t *imports);
#endif
#if defined(WASMER_WASI_ENABLED)
enum wasi_version_t wasi_get_wasi_version(const wasm_module_t *module);
#endif
void wasm_config_canonicalize_nans(wasm_config_t *config, bool enable);
void wasm_config_push_middleware(wasm_config_t *config, struct wasmer_middleware_t *middleware);
#if defined(WASMER_COMPILER_ENABLED)
void wasm_config_set_compiler(wasm_config_t *config, enum wasmer_compiler_t compiler);
#endif
void wasm_config_set_engine(wasm_config_t *config, enum wasmer_engine_t engine);
void wasm_config_set_features(wasm_config_t *config, struct wasmer_features_t *features);
void wasm_config_set_target(wasm_config_t *config, struct wasmer_target_t *target);
bool wasmer_cpu_features_add(struct wasmer_cpu_features_t *cpu_features,
const wasm_name_t *feature);
void wasmer_cpu_features_delete(struct wasmer_cpu_features_t *_cpu_features);
struct wasmer_cpu_features_t *wasmer_cpu_features_new(void);
bool wasmer_features_bulk_memory(struct wasmer_features_t *features, bool enable);
void wasmer_features_delete(struct wasmer_features_t *_features);
bool wasmer_features_memory64(struct wasmer_features_t *features, bool enable);
bool wasmer_features_module_linking(struct wasmer_features_t *features, bool enable);
bool wasmer_features_multi_memory(struct wasmer_features_t *features, bool enable);
bool wasmer_features_multi_value(struct wasmer_features_t *features, bool enable);
struct wasmer_features_t *wasmer_features_new(void);
bool wasmer_features_reference_types(struct wasmer_features_t *features, bool enable);
bool wasmer_features_simd(struct wasmer_features_t *features, bool enable);
bool wasmer_features_tail_call(struct wasmer_features_t *features, bool enable);
bool wasmer_features_threads(struct wasmer_features_t *features, bool enable);
bool wasmer_is_compiler_available(enum wasmer_compiler_t compiler);
bool wasmer_is_engine_available(enum wasmer_engine_t engine);
bool wasmer_is_headless(void);
int wasmer_last_error_length(void);
int wasmer_last_error_message(char *buffer, int length);
struct wasmer_middleware_t *wasmer_metering_as_middleware(struct wasmer_metering_t *metering);
void wasmer_metering_delete(struct wasmer_metering_t *_metering);
uint64_t wasmer_metering_get_remaining_points(const wasm_instance_t *instance);
struct wasmer_metering_t *wasmer_metering_new(uint64_t initial_limit,
wasmer_metering_cost_function_t cost_function);
bool wasmer_metering_points_are_exhausted(const wasm_instance_t *instance);
void wasmer_metering_set_remaining_points(const wasm_instance_t *instance, uint64_t new_limit);
void wasmer_module_name(const wasm_module_t *module, wasm_name_t *out);
bool wasmer_module_set_name(wasm_module_t *module, const wasm_name_t *name);
#if defined(WASMER_WASI_ENABLED)
const wasm_name_t *wasmer_named_extern_module(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
const wasm_name_t *wasmer_named_extern_name(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
const wasm_extern_t *wasmer_named_extern_unwrap(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_copy(struct wasmer_named_extern_vec_t *out_ptr,
const struct wasmer_named_extern_vec_t *in_ptr);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_delete(struct wasmer_named_extern_vec_t *ptr);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new(struct wasmer_named_extern_vec_t *out,
uintptr_t length,
struct wasmer_named_extern_t *const *init);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new_empty(struct wasmer_named_extern_vec_t *out);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new_uninitialized(struct wasmer_named_extern_vec_t *out,
uintptr_t length);
#endif
void wasmer_target_delete(struct wasmer_target_t *_target);
struct wasmer_target_t *wasmer_target_new(struct wasmer_triple_t *triple,
struct wasmer_cpu_features_t *cpu_features);
void wasmer_triple_delete(struct wasmer_triple_t *_triple);
struct wasmer_triple_t *wasmer_triple_new(const wasm_name_t *triple);
struct wasmer_triple_t *wasmer_triple_new_from_host(void);
const char *wasmer_version(void);
uint8_t wasmer_version_major(void);
uint8_t wasmer_version_minor(void);
uint8_t wasmer_version_patch(void);
const char *wasmer_version_pre(void);
void wat2wasm(const wasm_byte_vec_t *wat, wasm_byte_vec_t *out);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* WASMER_H */

View File

@@ -1,896 +1,3 @@
// The Wasmer C/C++ header file compatible with the [`wasm-c-api`] #include "wasmer.h"
// standard API, as `wasm.h` (included here).
//
// This file is automatically generated by `lib/c-api/build.rs` of the
// [`wasmer-c-api`] Rust crate.
//
// # Stability
//
// The [`wasm-c-api`] standard API is a _living_ standard. There is no
// commitment for stability yet. We (Wasmer) will try our best to keep
// backward compatibility as much as possible. Nonetheless, some
// necessary API aren't yet standardized, and as such, we provide a
// custom API, e.g. `wasi_*` types and functions.
//
// The documentation makes it clear whether a function is unstable.
//
// When a type or a function will be deprecated, it will be marked as
// such with the appropriated compiler warning, and will be removed at
// the next release round.
//
// # Documentation
//
// At the time of writing, the [`wasm-c-api`] standard has no
// documentation. This file also does not include inline
// documentation. However, we have made (and we continue to make) an
// important effort to document everything. [See the documentation
// online][documentation]. Please refer to this page for the real
// canonical documentation. It also contains numerous examples.
//
// To generate the documentation locally, run `cargo doc --open` from
// within the [`wasmer-c-api`] Rust crate.
//
// [`wasm-c-api`]: https://github.com/WebAssembly/wasm-c-api
// [`wasmer-c-api`]: https://github.com/wasmerio/wasmer/tree/master/lib/c-api
// [documentation]: https://wasmerio.github.io/wasmer/crates/wasmer_c_api/
#if !defined(WASMER_WASM_H_PRELUDE) #pragma message "The wasmer_wasm.h header file is being deprecated, please use wasmer.h instead."
#define WASMER_WASM_H_PRELUDE
// Define the `ARCH_X86_X64` constant.
#if defined(MSVC) && defined(_M_AMD64)
# define ARCH_X86_64
#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
# define ARCH_X86_64
#endif
// Compatibility with non-Clang compilers.
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
// Compatibility with non-Clang compilers.
#if !defined(__has_declspec_attribute)
# define __has_declspec_attribute(x) 0
#endif
// Define the `DEPRECATED` macro.
#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
# define DEPRECATED(message) __attribute__((deprecated(message)))
#elif defined(MSVC) || __has_declspec_attribute(deprecated)
# define DEPRECATED(message) __declspec(deprecated(message))
#endif
// The `universal` feature has been enabled for this build.
#define WASMER_UNIVERSAL_ENABLED
// The `compiler` feature has been enabled for this build.
#define WASMER_COMPILER_ENABLED
// The `wasi` feature has been enabled for this build.
#define WASMER_WASI_ENABLED
// The `middlewares` feature has been enabled for this build.
#define WASMER_MIDDLEWARES_ENABLED
// This file corresponds to the following Wasmer version.
#define WASMER_VERSION "1.0.2"
#define WASMER_VERSION_MAJOR 1
#define WASMER_VERSION_MINOR 0
#define WASMER_VERSION_PATCH 2
#define WASMER_VERSION_PRE ""
#endif // WASMER_WASM_H_PRELUDE
//
// OK, here we go. The code below is automatically generated.
//
#ifndef WASMER_WASM_H
#define WASMER_WASM_H
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include "wasm.h"
#if defined(WASMER_WASI_ENABLED)
typedef enum wasi_version_t {
#if defined(WASMER_WASI_ENABLED)
INVALID_VERSION = -1,
#endif
#if defined(WASMER_WASI_ENABLED)
LATEST = 0,
#endif
#if defined(WASMER_WASI_ENABLED)
SNAPSHOT0 = 1,
#endif
#if defined(WASMER_WASI_ENABLED)
SNAPSHOT1 = 2,
#endif
} wasi_version_t;
#endif
#if defined(WASMER_COMPILER_ENABLED)
typedef enum wasmer_compiler_t {
CRANELIFT = 0,
LLVM = 1,
SINGLEPASS = 2,
} wasmer_compiler_t;
#endif
typedef enum wasmer_engine_t {
UNIVERSAL = 0,
DYLIB = 1,
STATICLIB = 2,
} wasmer_engine_t;
typedef enum wasmer_parser_operator_t {
Unreachable,
Nop,
Block,
Loop,
If,
Else,
Try,
Catch,
CatchAll,
Delegate,
Throw,
Rethrow,
Unwind,
End,
Br,
BrIf,
BrTable,
Return,
Call,
CallIndirect,
ReturnCall,
ReturnCallIndirect,
Drop,
Select,
TypedSelect,
LocalGet,
LocalSet,
LocalTee,
GlobalGet,
GlobalSet,
I32Load,
I64Load,
F32Load,
F64Load,
I32Load8S,
I32Load8U,
I32Load16S,
I32Load16U,
I64Load8S,
I64Load8U,
I64Load16S,
I64Load16U,
I64Load32S,
I64Load32U,
I32Store,
I64Store,
F32Store,
F64Store,
I32Store8,
I32Store16,
I64Store8,
I64Store16,
I64Store32,
MemorySize,
MemoryGrow,
I32Const,
I64Const,
F32Const,
F64Const,
RefNull,
RefIsNull,
RefFunc,
I32Eqz,
I32Eq,
I32Ne,
I32LtS,
I32LtU,
I32GtS,
I32GtU,
I32LeS,
I32LeU,
I32GeS,
I32GeU,
I64Eqz,
I64Eq,
I64Ne,
I64LtS,
I64LtU,
I64GtS,
I64GtU,
I64LeS,
I64LeU,
I64GeS,
I64GeU,
F32Eq,
F32Ne,
F32Lt,
F32Gt,
F32Le,
F32Ge,
F64Eq,
F64Ne,
F64Lt,
F64Gt,
F64Le,
F64Ge,
I32Clz,
I32Ctz,
I32Popcnt,
I32Add,
I32Sub,
I32Mul,
I32DivS,
I32DivU,
I32RemS,
I32RemU,
I32And,
I32Or,
I32Xor,
I32Shl,
I32ShrS,
I32ShrU,
I32Rotl,
I32Rotr,
I64Clz,
I64Ctz,
I64Popcnt,
I64Add,
I64Sub,
I64Mul,
I64DivS,
I64DivU,
I64RemS,
I64RemU,
I64And,
I64Or,
I64Xor,
I64Shl,
I64ShrS,
I64ShrU,
I64Rotl,
I64Rotr,
F32Abs,
F32Neg,
F32Ceil,
F32Floor,
F32Trunc,
F32Nearest,
F32Sqrt,
F32Add,
F32Sub,
F32Mul,
F32Div,
F32Min,
F32Max,
F32Copysign,
F64Abs,
F64Neg,
F64Ceil,
F64Floor,
F64Trunc,
F64Nearest,
F64Sqrt,
F64Add,
F64Sub,
F64Mul,
F64Div,
F64Min,
F64Max,
F64Copysign,
I32WrapI64,
I32TruncF32S,
I32TruncF32U,
I32TruncF64S,
I32TruncF64U,
I64ExtendI32S,
I64ExtendI32U,
I64TruncF32S,
I64TruncF32U,
I64TruncF64S,
I64TruncF64U,
F32ConvertI32S,
F32ConvertI32U,
F32ConvertI64S,
F32ConvertI64U,
F32DemoteF64,
F64ConvertI32S,
F64ConvertI32U,
F64ConvertI64S,
F64ConvertI64U,
F64PromoteF32,
I32ReinterpretF32,
I64ReinterpretF64,
F32ReinterpretI32,
F64ReinterpretI64,
I32Extend8S,
I32Extend16S,
I64Extend8S,
I64Extend16S,
I64Extend32S,
I32TruncSatF32S,
I32TruncSatF32U,
I32TruncSatF64S,
I32TruncSatF64U,
I64TruncSatF32S,
I64TruncSatF32U,
I64TruncSatF64S,
I64TruncSatF64U,
MemoryInit,
DataDrop,
MemoryCopy,
MemoryFill,
TableInit,
ElemDrop,
TableCopy,
TableFill,
TableGet,
TableSet,
TableGrow,
TableSize,
MemoryAtomicNotify,
MemoryAtomicWait32,
MemoryAtomicWait64,
AtomicFence,
I32AtomicLoad,
I64AtomicLoad,
I32AtomicLoad8U,
I32AtomicLoad16U,
I64AtomicLoad8U,
I64AtomicLoad16U,
I64AtomicLoad32U,
I32AtomicStore,
I64AtomicStore,
I32AtomicStore8,
I32AtomicStore16,
I64AtomicStore8,
I64AtomicStore16,
I64AtomicStore32,
I32AtomicRmwAdd,
I64AtomicRmwAdd,
I32AtomicRmw8AddU,
I32AtomicRmw16AddU,
I64AtomicRmw8AddU,
I64AtomicRmw16AddU,
I64AtomicRmw32AddU,
I32AtomicRmwSub,
I64AtomicRmwSub,
I32AtomicRmw8SubU,
I32AtomicRmw16SubU,
I64AtomicRmw8SubU,
I64AtomicRmw16SubU,
I64AtomicRmw32SubU,
I32AtomicRmwAnd,
I64AtomicRmwAnd,
I32AtomicRmw8AndU,
I32AtomicRmw16AndU,
I64AtomicRmw8AndU,
I64AtomicRmw16AndU,
I64AtomicRmw32AndU,
I32AtomicRmwOr,
I64AtomicRmwOr,
I32AtomicRmw8OrU,
I32AtomicRmw16OrU,
I64AtomicRmw8OrU,
I64AtomicRmw16OrU,
I64AtomicRmw32OrU,
I32AtomicRmwXor,
I64AtomicRmwXor,
I32AtomicRmw8XorU,
I32AtomicRmw16XorU,
I64AtomicRmw8XorU,
I64AtomicRmw16XorU,
I64AtomicRmw32XorU,
I32AtomicRmwXchg,
I64AtomicRmwXchg,
I32AtomicRmw8XchgU,
I32AtomicRmw16XchgU,
I64AtomicRmw8XchgU,
I64AtomicRmw16XchgU,
I64AtomicRmw32XchgU,
I32AtomicRmwCmpxchg,
I64AtomicRmwCmpxchg,
I32AtomicRmw8CmpxchgU,
I32AtomicRmw16CmpxchgU,
I64AtomicRmw8CmpxchgU,
I64AtomicRmw16CmpxchgU,
I64AtomicRmw32CmpxchgU,
V128Load,
V128Store,
V128Const,
I8x16Splat,
I8x16ExtractLaneS,
I8x16ExtractLaneU,
I8x16ReplaceLane,
I16x8Splat,
I16x8ExtractLaneS,
I16x8ExtractLaneU,
I16x8ReplaceLane,
I32x4Splat,
I32x4ExtractLane,
I32x4ReplaceLane,
I64x2Splat,
I64x2ExtractLane,
I64x2ReplaceLane,
F32x4Splat,
F32x4ExtractLane,
F32x4ReplaceLane,
F64x2Splat,
F64x2ExtractLane,
F64x2ReplaceLane,
I8x16Eq,
I8x16Ne,
I8x16LtS,
I8x16LtU,
I8x16GtS,
I8x16GtU,
I8x16LeS,
I8x16LeU,
I8x16GeS,
I8x16GeU,
I16x8Eq,
I16x8Ne,
I16x8LtS,
I16x8LtU,
I16x8GtS,
I16x8GtU,
I16x8LeS,
I16x8LeU,
I16x8GeS,
I16x8GeU,
I32x4Eq,
I32x4Ne,
I32x4LtS,
I32x4LtU,
I32x4GtS,
I32x4GtU,
I32x4LeS,
I32x4LeU,
I32x4GeS,
I32x4GeU,
I64x2Eq,
I64x2Ne,
I64x2LtS,
I64x2GtS,
I64x2LeS,
I64x2GeS,
F32x4Eq,
F32x4Ne,
F32x4Lt,
F32x4Gt,
F32x4Le,
F32x4Ge,
F64x2Eq,
F64x2Ne,
F64x2Lt,
F64x2Gt,
F64x2Le,
F64x2Ge,
V128Not,
V128And,
V128AndNot,
V128Or,
V128Xor,
V128Bitselect,
V128AnyTrue,
I8x16Abs,
I8x16Neg,
I8x16AllTrue,
I8x16Bitmask,
I8x16Shl,
I8x16ShrS,
I8x16ShrU,
I8x16Add,
I8x16AddSatS,
I8x16AddSatU,
I8x16Sub,
I8x16SubSatS,
I8x16SubSatU,
I8x16MinS,
I8x16MinU,
I8x16MaxS,
I8x16MaxU,
I8x16Popcnt,
I16x8Abs,
I16x8Neg,
I16x8AllTrue,
I16x8Bitmask,
I16x8Shl,
I16x8ShrS,
I16x8ShrU,
I16x8Add,
I16x8AddSatS,
I16x8AddSatU,
I16x8Sub,
I16x8SubSatS,
I16x8SubSatU,
I16x8Mul,
I16x8MinS,
I16x8MinU,
I16x8MaxS,
I16x8MaxU,
I16x8ExtAddPairwiseI8x16S,
I16x8ExtAddPairwiseI8x16U,
I32x4Abs,
I32x4Neg,
I32x4AllTrue,
I32x4Bitmask,
I32x4Shl,
I32x4ShrS,
I32x4ShrU,
I32x4Add,
I32x4Sub,
I32x4Mul,
I32x4MinS,
I32x4MinU,
I32x4MaxS,
I32x4MaxU,
I32x4DotI16x8S,
I32x4ExtAddPairwiseI16x8S,
I32x4ExtAddPairwiseI16x8U,
I64x2Abs,
I64x2Neg,
I64x2AllTrue,
I64x2Bitmask,
I64x2Shl,
I64x2ShrS,
I64x2ShrU,
I64x2Add,
I64x2Sub,
I64x2Mul,
F32x4Ceil,
F32x4Floor,
F32x4Trunc,
F32x4Nearest,
F64x2Ceil,
F64x2Floor,
F64x2Trunc,
F64x2Nearest,
F32x4Abs,
F32x4Neg,
F32x4Sqrt,
F32x4Add,
F32x4Sub,
F32x4Mul,
F32x4Div,
F32x4Min,
F32x4Max,
F32x4PMin,
F32x4PMax,
F64x2Abs,
F64x2Neg,
F64x2Sqrt,
F64x2Add,
F64x2Sub,
F64x2Mul,
F64x2Div,
F64x2Min,
F64x2Max,
F64x2PMin,
F64x2PMax,
I32x4TruncSatF32x4S,
I32x4TruncSatF32x4U,
F32x4ConvertI32x4S,
F32x4ConvertI32x4U,
I8x16Swizzle,
I8x16Shuffle,
V128Load8Splat,
V128Load16Splat,
V128Load32Splat,
V128Load32Zero,
V128Load64Splat,
V128Load64Zero,
I8x16NarrowI16x8S,
I8x16NarrowI16x8U,
I16x8NarrowI32x4S,
I16x8NarrowI32x4U,
I16x8ExtendLowI8x16S,
I16x8ExtendHighI8x16S,
I16x8ExtendLowI8x16U,
I16x8ExtendHighI8x16U,
I32x4ExtendLowI16x8S,
I32x4ExtendHighI16x8S,
I32x4ExtendLowI16x8U,
I32x4ExtendHighI16x8U,
I64x2ExtendLowI32x4S,
I64x2ExtendHighI32x4S,
I64x2ExtendLowI32x4U,
I64x2ExtendHighI32x4U,
I16x8ExtMulLowI8x16S,
I16x8ExtMulHighI8x16S,
I16x8ExtMulLowI8x16U,
I16x8ExtMulHighI8x16U,
I32x4ExtMulLowI16x8S,
I32x4ExtMulHighI16x8S,
I32x4ExtMulLowI16x8U,
I32x4ExtMulHighI16x8U,
I64x2ExtMulLowI32x4S,
I64x2ExtMulHighI32x4S,
I64x2ExtMulLowI32x4U,
I64x2ExtMulHighI32x4U,
V128Load8x8S,
V128Load8x8U,
V128Load16x4S,
V128Load16x4U,
V128Load32x2S,
V128Load32x2U,
V128Load8Lane,
V128Load16Lane,
V128Load32Lane,
V128Load64Lane,
V128Store8Lane,
V128Store16Lane,
V128Store32Lane,
V128Store64Lane,
I8x16RoundingAverageU,
I16x8RoundingAverageU,
I16x8Q15MulrSatS,
F32x4DemoteF64x2Zero,
F64x2PromoteLowF32x4,
F64x2ConvertLowI32x4S,
F64x2ConvertLowI32x4U,
I32x4TruncSatF64x2SZero,
I32x4TruncSatF64x2UZero,
} wasmer_parser_operator_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasi_config_t wasi_config_t;
#endif
#if defined(WASMER_WASI_ENABLED)
typedef struct wasi_env_t wasi_env_t;
#endif
typedef struct wasmer_cpu_features_t wasmer_cpu_features_t;
typedef struct wasmer_features_t wasmer_features_t;
typedef struct wasmer_metering_t wasmer_metering_t;
typedef struct wasmer_middleware_t wasmer_middleware_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasmer_named_extern_t wasmer_named_extern_t;
#endif
typedef struct wasmer_target_t wasmer_target_t;
typedef struct wasmer_triple_t wasmer_triple_t;
#if defined(WASMER_WASI_ENABLED)
typedef struct wasmer_named_extern_vec_t {
uintptr_t size;
struct wasmer_named_extern_t **data;
} wasmer_named_extern_vec_t;
#endif
typedef uint64_t (*wasmer_metering_cost_function_t)(enum wasmer_parser_operator_t wasm_operator);
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#if defined(WASMER_WASI_ENABLED)
void wasi_config_arg(struct wasi_config_t *config, const char *arg);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_capture_stderr(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_capture_stdout(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_env(struct wasi_config_t *config, const char *key, const char *value);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stderr(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stdin(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_config_inherit_stdout(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_config_mapdir(struct wasi_config_t *config, const char *alias, const char *dir);
#endif
#if defined(WASMER_WASI_ENABLED)
struct wasi_config_t *wasi_config_new(const char *program_name);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_config_preopen_dir(struct wasi_config_t *config, const char *dir);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasi_env_delete(struct wasi_env_t *_state);
#endif
#if defined(WASMER_WASI_ENABLED)
struct wasi_env_t *wasi_env_new(struct wasi_config_t *config);
#endif
#if defined(WASMER_WASI_ENABLED)
intptr_t wasi_env_read_stderr(struct wasi_env_t *env, char *buffer, uintptr_t buffer_len);
#endif
#if defined(WASMER_WASI_ENABLED)
intptr_t wasi_env_read_stdout(struct wasi_env_t *env, char *buffer, uintptr_t buffer_len);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_get_imports(const wasm_store_t *store,
const wasm_module_t *module,
const struct wasi_env_t *wasi_env,
wasm_extern_vec_t *imports);
#endif
#if defined(WASMER_WASI_ENABLED)
wasm_func_t *wasi_get_start_function(wasm_instance_t *instance);
#endif
#if defined(WASMER_WASI_ENABLED)
bool wasi_get_unordered_imports(const wasm_store_t *store,
const wasm_module_t *module,
const struct wasi_env_t *wasi_env,
struct wasmer_named_extern_vec_t *imports);
#endif
#if defined(WASMER_WASI_ENABLED)
enum wasi_version_t wasi_get_wasi_version(const wasm_module_t *module);
#endif
void wasm_config_canonicalize_nans(wasm_config_t *config, bool enable);
void wasm_config_push_middleware(wasm_config_t *config, struct wasmer_middleware_t *middleware);
#if defined(WASMER_COMPILER_ENABLED)
void wasm_config_set_compiler(wasm_config_t *config, enum wasmer_compiler_t compiler);
#endif
void wasm_config_set_engine(wasm_config_t *config, enum wasmer_engine_t engine);
void wasm_config_set_features(wasm_config_t *config, struct wasmer_features_t *features);
void wasm_config_set_target(wasm_config_t *config, struct wasmer_target_t *target);
bool wasmer_cpu_features_add(struct wasmer_cpu_features_t *cpu_features,
const wasm_name_t *feature);
void wasmer_cpu_features_delete(struct wasmer_cpu_features_t *_cpu_features);
struct wasmer_cpu_features_t *wasmer_cpu_features_new(void);
bool wasmer_features_bulk_memory(struct wasmer_features_t *features, bool enable);
void wasmer_features_delete(struct wasmer_features_t *_features);
bool wasmer_features_memory64(struct wasmer_features_t *features, bool enable);
bool wasmer_features_module_linking(struct wasmer_features_t *features, bool enable);
bool wasmer_features_multi_memory(struct wasmer_features_t *features, bool enable);
bool wasmer_features_multi_value(struct wasmer_features_t *features, bool enable);
struct wasmer_features_t *wasmer_features_new(void);
bool wasmer_features_reference_types(struct wasmer_features_t *features, bool enable);
bool wasmer_features_simd(struct wasmer_features_t *features, bool enable);
bool wasmer_features_tail_call(struct wasmer_features_t *features, bool enable);
bool wasmer_features_threads(struct wasmer_features_t *features, bool enable);
bool wasmer_is_compiler_available(enum wasmer_compiler_t compiler);
bool wasmer_is_engine_available(enum wasmer_engine_t engine);
bool wasmer_is_headless(void);
int wasmer_last_error_length(void);
int wasmer_last_error_message(char *buffer, int length);
struct wasmer_middleware_t *wasmer_metering_as_middleware(struct wasmer_metering_t *metering);
void wasmer_metering_delete(struct wasmer_metering_t *_metering);
uint64_t wasmer_metering_get_remaining_points(const wasm_instance_t *instance);
struct wasmer_metering_t *wasmer_metering_new(uint64_t initial_limit,
wasmer_metering_cost_function_t cost_function);
bool wasmer_metering_points_are_exhausted(const wasm_instance_t *instance);
void wasmer_metering_set_remaining_points(const wasm_instance_t *instance, uint64_t new_limit);
void wasmer_module_name(const wasm_module_t *module, wasm_name_t *out);
bool wasmer_module_set_name(wasm_module_t *module, const wasm_name_t *name);
#if defined(WASMER_WASI_ENABLED)
const wasm_name_t *wasmer_named_extern_module(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
const wasm_name_t *wasmer_named_extern_name(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
const wasm_extern_t *wasmer_named_extern_unwrap(const struct wasmer_named_extern_t *named_extern);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_copy(struct wasmer_named_extern_vec_t *out_ptr,
const struct wasmer_named_extern_vec_t *in_ptr);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_delete(struct wasmer_named_extern_vec_t *ptr);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new(struct wasmer_named_extern_vec_t *out,
uintptr_t length,
struct wasmer_named_extern_t *const *init);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new_empty(struct wasmer_named_extern_vec_t *out);
#endif
#if defined(WASMER_WASI_ENABLED)
void wasmer_named_extern_vec_new_uninitialized(struct wasmer_named_extern_vec_t *out,
uintptr_t length);
#endif
void wasmer_target_delete(struct wasmer_target_t *_target);
struct wasmer_target_t *wasmer_target_new(struct wasmer_triple_t *triple,
struct wasmer_cpu_features_t *cpu_features);
void wasmer_triple_delete(struct wasmer_triple_t *_triple);
struct wasmer_triple_t *wasmer_triple_new(const wasm_name_t *triple);
struct wasmer_triple_t *wasmer_triple_new_from_host(void);
const char *wasmer_version(void);
uint8_t wasmer_version_major(void);
uint8_t wasmer_version_minor(void);
uint8_t wasmer_version_patch(void);
const char *wasmer_version_pre(void);
void wat2wasm(const wasm_byte_vec_t *wat, wasm_byte_vec_t *out);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* WASMER_WASM_H */

View File

@@ -20,7 +20,7 @@ pub fn store_cache_universal(c: &mut Criterion) {
let store = Store::new(&Universal::new(compiler).engine()); let store = Store::new(&Universal::new(compiler).engine());
let module = Module::new( let module = Module::new(
&store, &store,
std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap(), std::fs::read("../../lib/c-api/examples/assets/qjs.wasm").unwrap(),
) )
.unwrap(); .unwrap();
@@ -39,7 +39,7 @@ pub fn load_cache_universal(c: &mut Criterion) {
let store = Store::new(&Universal::new(compiler).engine()); let store = Store::new(&Universal::new(compiler).engine());
let module = Module::new( let module = Module::new(
&store, &store,
std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap(), std::fs::read("../../lib/c-api/examples/assets/qjs.wasm").unwrap(),
) )
.unwrap(); .unwrap();
let key = Hash::new([0u8; 32]); let key = Hash::new([0u8; 32]);
@@ -57,7 +57,7 @@ pub fn store_cache_native(c: &mut Criterion) {
let store = Store::new(&Native::new(compiler).engine()); let store = Store::new(&Native::new(compiler).engine());
let module = Module::new( let module = Module::new(
&store, &store,
std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap(), std::fs::read("../../lib/c-api/examples/assets/qjs.wasm").unwrap(),
) )
.unwrap(); .unwrap();
@@ -76,7 +76,7 @@ pub fn load_cache_native(c: &mut Criterion) {
let store = Store::new(&Native::new(compiler).engine()); let store = Store::new(&Native::new(compiler).engine());
let module = Module::new( let module = Module::new(
&store, &store,
std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap(), std::fs::read("../../lib/c-api/examples/assets/qjs.wasm").unwrap(),
) )
.unwrap(); .unwrap();
let key = Hash::new([0u8; 32]); let key = Hash::new([0u8; 32]);

View File

@@ -1,4 +1,4 @@
#include "wasmer_wasm.h" #include "wasmer.h"
#include "my_wasm.h" #include "my_wasm.h"
#include <stdio.h> #include <stdio.h>

View File

@@ -29,7 +29,7 @@ Target: x86_64-apple-darwin
Now let's create a program to link with this static object file. Now let's create a program to link with this static object file.
```c ```c
#include "wasmer_wasm.h" #include "wasmer.h"
#include "my_wasm.h" #include "my_wasm.h"
#include <stdio.h> #include <stdio.h>

View File

@@ -3,7 +3,7 @@ use std::path::PathBuf;
pub const C_ASSET_PATH: &str = concat!( pub const C_ASSET_PATH: &str = concat!(
env!("CARGO_MANIFEST_DIR"), env!("CARGO_MANIFEST_DIR"),
"/../../../lib/c-api/tests/assets" "/../../../lib/c-api/examples/assets"
); );
pub const ASSET_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../../../tests/examples"); pub const ASSET_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../../../tests/examples");

View File

@@ -1,4 +1,4 @@
#include "wasmer_wasm.h" #include "wasmer.h"
#include "my_wasm.h" #include "my_wasm.h"
#include <stdio.h> #include <stdio.h>