Skip to content
WASI libc implementation for WebAssembly
Branch: master
Clone or download
sunfishcode Implement FD_SET, FD_CLR, etc.
Previously, FD_SET and friends were missing their actual definitions.
This provides definitions, entirely within the system headers in a
way that doesn't need instantiated out-of-line definitions.
Latest commit 1cbedc6 Apr 20, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
basics Implement reallocarray. Apr 23, 2019
dlmalloc Make calloc set ENOMEM when failing due to overflow. Apr 23, 2019
expected/wasm32-wasi Implement FD_SET, FD_CLR, etc. Apr 23, 2019
libc-bottom-half Implement FD_SET, FD_CLR, etc. Apr 23, 2019
.gitignore gitignore build Apr 19, 2019
LICENSE WASI libc prototype implementation. Mar 27, 2019
Makefile Implement reallocarray. Apr 23, 2019 Update Apr 23, 2019

WASI Sysroot

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 "sysroot" which can be pointed to by compilers, such as Clang 8.0, using the wasm32-unknown-wasi target triple. 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.


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, though we'd like to support other compilers as well), and then run:

make WASM_CC=/path/to/wasm/supporting/c/compiler

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.

You can’t perform that action at this time.