Go to file
Dan Gohman 54102f06a9
Ignore rights in libpreopen. (#129)
Don't ignore paths which don't have the required rights. This means
that if the lookup finds a path that doesn't have the required
rights, it'll just proceed to the actual operation which will fail
with `ENOTCAPABLE`.

Intuitively, use cases which would depend on having multiple
overlapping matching paths for a given lookup and intelligently
picking the one with the required rights seems like they should
be uncommon.

This is simpler overall, and requires less code.
2019-11-21 15:49:51 -08:00
basics Optimize fmin, fmax, etc. (#120) 2019-11-20 11:13:45 -08:00
dlmalloc Temporarily disable the use of __heap_base. (#132) 2019-11-07 13:09:31 -08:00
expected/wasm32-wasi Don't link in libpreopen initialization code when it isn't needed. (#127) 2019-11-08 11:08:22 -08:00
libc-bottom-half Ignore rights in libpreopen. (#129) 2019-11-21 15:49:51 -08:00
libc-top-half Use consistent style for wasi-libc C source files. (#131) 2019-11-08 11:59:57 -08:00
.azure-pipelines.yml Workaround a bug causing Windows CI failures. (#119) 2019-10-22 08:00:48 -07:00
.gitignore gitignore build 2019-04-19 11:16:25 -07:00
CODE_OF_CONDUCT.md Add a CODE_OF_CONDUCT.md file. (#101) 2019-10-03 14:15:49 +02:00
LICENSE WASI libc prototype implementation. 2019-03-27 07:59:55 -07:00
Makefile Optimize fmin, fmax, etc. (#120) 2019-11-20 11:13:45 -08:00
README.md Update docs to say "libc" rather than "sysroot" where applicable. 2019-08-29 10:27:23 -07:00

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.