Go to file
Dan Gohman 84c0778bff
Rewrite the preopen functionality. (#173)
* Rewrite the preopen functionality.

Rewrite the preopen functionality to be simpler, better organized,
and better integrated into WASI libc. Preopen support has diverged so
much from libpreopen that it no longer makes sense to track libpreopen
as an explicit upstream. And add more documentation.

* Fix missing #include.

* Fix a compilation error.
2020-06-01 14:32:24 -07:00
.github/workflows CI: use llvm 10.0.0 release (#194) 2020-04-06 16:53:56 -07:00
basics Replace old <signal.h> support with emulated <signal.h> support. (#183) 2020-05-29 13:07:52 -07:00
dlmalloc Multi-license wasi-libc under Apache and MIT licenses. (#174) 2020-02-29 10:52:28 +01:00
expected/wasm32-wasi Replace old <signal.h> support with emulated <signal.h> support. (#183) 2020-05-29 13:07:52 -07:00
libc-bottom-half Rewrite the preopen functionality. (#173) 2020-06-01 14:32:24 -07:00
libc-top-half Rewrite the preopen functionality. (#173) 2020-06-01 14:32:24 -07:00
tools/wasi-headers gen-headers: make handle output consistient with prior 2020-04-02 15:54:40 -07:00
.gitattributes Correct the version of #136 on master (#141) 2019-11-21 20:55:26 -08:00
.gitignore gitignore build 2019-04-19 11:16:25 -07:00
.gitmodules Correct the version of #136 on master (#141) 2019-11-21 20:55:26 -08:00
CODE_OF_CONDUCT.md Add a CODE_OF_CONDUCT.md file. (#101) 2019-10-03 14:15:49 +02:00
LICENSE Rewrite the preopen functionality. (#173) 2020-06-01 14:32:24 -07:00
LICENSE-APACHE Multi-license wasi-libc under Apache and MIT licenses. (#174) 2020-02-29 10:52:28 +01:00
LICENSE-APACHE-LLVM Multi-license wasi-libc under Apache and MIT licenses. (#174) 2020-02-29 10:52:28 +01:00
LICENSE-MIT Multi-license wasi-libc under Apache and MIT licenses. (#174) 2020-02-29 10:52:28 +01:00
Makefile Rewrite the preopen functionality. (#173) 2020-06-01 14:32:24 -07:00
README.md Mention libcxx and libcxxabi too. 2020-03-17 17:44:08 -07:00

WASI Libc

WASI Libc is a libc for WebAssembly programs built on top of WASI system calls. It provides a wide array of POSIX-compatible C APIs, including support for standard I/O, file I/O, filesystem manipulation, memory management, time, string, environment variables, program startup, and many other APIs.

WASI Libc is sufficiently stable and usable for many purposes, as most of the POSIX-compatible APIs are stable, though it is continuing to evolve to better align with wasm and WASI.

Usage

The easiest way to get started with this is to use wasi-sdk, which includes a build of WASI Libc in its sysroot.

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.

Note that Clang packages typically don't include cross-compiled builds of compiler-rt, libcxx, or libcxxabi, for libclang_rt.builtins-wasm32.a, libc++.a, or libc++abi.a, respectively, so they may not be usable without extra setup. This is one of the things wasi-sdk simplifies, as it includes cross-compiled builds of compiler-rt, libc++.a, and libc++abi.a.