![]() * 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. |
||
---|---|---|
.github/workflows | ||
basics | ||
dlmalloc | ||
expected/wasm32-wasi | ||
libc-bottom-half | ||
libc-top-half | ||
tools/wasi-headers | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
LICENSE-APACHE | ||
LICENSE-APACHE-LLVM | ||
LICENSE-MIT | ||
Makefile | ||
README.md |
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.