11# WASI Libc
22
3- This is a work in progress. It's usable for many purposes, though the APIs
4- aren't stable yet.
3+ WASI Libc is a libc for WebAssembly programs built on top of WASI system calls.
4+ It provides a wide array of POSIX-compatible C APIs, including support for
5+ standard I/O, file I/O, filesystem manipulation, memory management, time, string,
6+ environment variables, program startup, and many other APIs.
57
6- ## What is this?
7-
8- It's several things.
9-
10- First, it's a usable libc. It builds a "libc" which can be used by
11- compilers, such as Clang 8.0, using the wasm32-wasi target. It's a work in
12- progress, but it is already sufficient to run basic programs.
13-
14- Second, it's a "reference" implementation, which means the interfaces defined
15- here can be used by other tools and libraries, even if they don't use all the
16- actual implementations here. For example, we don't expect everyone will want
17- to use the exact ` malloc ` implementation provided here, but tools and
18- libraries using an ABI-compatible ` malloc ` interface will be able to
19- interoperate regardless of which actual implementation is used.
20-
21- Third, it's an example showing the use of the WASI API. The libc functionality
22- is implemented using calls to WASI functions.
8+ WASI Libc is sufficiently stable and usable for many purposes, as most of the
9+ POSIX-compatible APIs are stable, though it is continuing to evolve to better
10+ align with wasm and WASI.
2311
2412## Usage
2513
26- The easiest way to get started with this is to use one of the
27- [ prepackaged releases ] ( https://github.com/CraneStation/wasmtime/blob/master/docs/ WASI-intro.md#how-can-i-write-programs-that-use-wasi ) .
14+ The easiest way to get started with this is to use [ wasi-sdk ] , which includes a
15+ build of WASI Libc in its sysroot .
2816
2917## Building from source
3018
@@ -48,3 +36,10 @@ To use the sysroot, use the `--sysroot=` option:
4836```
4937
5038to run the compiler using the newly built sysroot.
39+
40+ Note that Clang packages typically don't include cross-compiled builds of
41+ compiler-rt, ` libclang_rt.builtins-wasm32.a ` , so they may not be usable without
42+ extra setup. This is one of the things [ wasi-sdk] simplifies, as it includes
43+ a cross-compiled compiler-rt.
44+
45+ [ wasi-sdk ] : https://github.com/WebAssembly/wasi-sdk
0 commit comments