![]() * Add the WASI repo as a submodule. Also, add the witx filenames to the generated output, and just have `cargo run` auto-generate the api.h header, rather than using clap. * Switch witx to a path dependency. * Add a test. * Add a test that the generated file is in sync with the generator. * Enable CI testing with Github Actions. * Fix the name of the wasi-headers directory. * Enable submodules. * Add a diff mechanism to help explain failures. * Sort the inputs for display. * More debugging. * More debugging. * Add a .gitattributes file forcing text files to be eol=lf. Most editors these days can deal with eof=lf files, even on Windows, and this avoids trouble with headers and other generated files differing in line endings. |
||
---|---|---|
.github/workflows | ||
basics | ||
dlmalloc | ||
expected/wasm32-wasi | ||
libc-bottom-half | ||
libc-top-half | ||
tools/wasi-headers | ||
.azure-pipelines.yml | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
Makefile | ||
README.md |
WASI Libc
This is a work in progress. It's usable for many purposes, though the APIs aren't stable yet.
What is this?
It's several things.
First, it's a usable libc. It builds a "libc" which can be used by compilers, such as Clang 8.0, using the wasm32-wasi target. It's a work in progress, but it is already sufficient to run basic programs.
Second, it's a "reference" implementation, which means the interfaces defined
here can be used by other tools and libraries, even if they don't use all the
actual implementations here. For example, we don't expect everyone will want
to use the exact malloc
implementation provided here, but tools and
libraries using an ABI-compatible malloc
interface will be able to
interoperate regardless of which actual implementation is used.
Third, it's an example showing the use of the WASI API. The libc functionality is implemented using calls to WASI functions.
Usage
The easiest way to get started with this is to use one of the prepackaged releases.
Building from source
To build a WASI sysroot from source, obtain a WebAssembly-supporting C compiler (currently this is only clang 8+, though we'd like to support other compilers as well), and then run:
make WASM_CC=/path/to/clang/with/wasm/support \
WASM_AR=/path/to/llvm-ar \
WASM_NM=/path/to/llvm-nm
This makes a directory called "sysroot", by default. See the top of the Makefile for customization options.
To use the sysroot, use the --sysroot=
option:
/path/to/wasm/supporting/c/compiler --sysroot=/path/to/the/newly/built/sysroot ...
to run the compiler using the newly built sysroot.