Dan Gohman
a78cd329ae
|
3 years ago | |
---|---|---|
.github/workflows | 4 years ago | |
dlmalloc | 4 years ago | |
expected/wasm32-wasi | 4 years ago | |
libc-bottom-half | 4 years ago | |
libc-top-half | 4 years ago | |
tools/wasi-headers | 4 years ago | |
.gitattributes | 5 years ago | |
.gitignore | 6 years ago | |
.gitmodules | 5 years ago | |
CODE_OF_CONDUCT.md | 5 years ago | |
LICENSE | 4 years ago | |
LICENSE-APACHE | 5 years ago | |
LICENSE-APACHE-LLVM | 5 years ago | |
LICENSE-MIT | 5 years ago | |
Makefile | 3 years ago | |
README.md | 4 years ago |
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.
Arch Linux AUR package
For Arch Linux users, there's an unofficial AUR package tracking this git repo that can be installed under the name wasi-libc-git.