wabic

0.0.1 • Public • Published

WABI

WebAssembly Binary Interface

Usage

npm install -g wabic
wabic /path/to/header.h

Mission

WABI is a tool to generate a stable WebAssembly binary interface for libuv. As a side effect, it can also generate the same binary interface for anything that has an exposed C header file.

Artifacts of WABI tool is a single .h file and a single .cc file, containing all the abstractions needed for a WebAssembly binary to talk to native binaries.

Support

WABI uses CastXML under the hood to parse the C header file. From the parser's side, anything that is supported by CastXML, should also be supported by WABI.

WABI has a generator that abstracts 64 bit types, strings, and pointers from the WebAssembly module. The generator only supports as much needed for libuv, but extending it should not be difficult.

Example

input header file:

// input.h
void* example_function();

output header file:

// input-wabi.h
typedef int Quark;
Quark wabi_example_function();

output header implementation:

// input-wabi.cc
extern "C" {
Quark wabi_example_function() {
  // ...
} // !wabi_example_function
} // !extern "C"

You may notice that void* is no longer exposed in the final interface. This is an intentional behavior. WABI borrows the idea of Quarks from GTK and wraps your return types and arguments in Quarks. Quarks allow data to safely pass through a WebAssembly runtime and back into native land.

WABI currently tries to wrap everything that is not an integer, into a Quark.

Dependencies

WABI currently relies on C++17's std::any. Alternatives exists for older C++.

Readme

Keywords

none

Package Sidebar

Install

npm i wabic

Weekly Downloads

1

Version

0.0.1

License

MIT

Unpacked Size

3.22 kB

Total Files

4

Last publish

Collaborators

  • sepehr-laal