You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Dan Gohman 15c27078b5 Detect `main(void)` vs `main(int argc, char *argv[])` in crt1-command.o. 1 year ago
.github/workflows dlmalloc: require __heap_end (#394) 1 year ago
dlmalloc Acquire the global lock before initializing malloc (#410) 1 year ago
emmalloc Port emmalloc to wasi-libc. 2 years ago
expected Detect `main(void)` vs `main(int argc, char *argv[])` in crt1-command.o. 1 year ago
libc-bottom-half Detect `main(void)` vs `main(int argc, char *argv[])` in crt1-command.o. 1 year ago
libc-top-half Fix a use-after-free bug for detached threads (#420) 1 year ago
test test: run a subset of tests using `libc-test` (#346) 2 years ago
tools/wasi-headers build: update WASI and partially regenerate `api.h` 3 years ago
.gitattributes Correct the version of #136 on master (#141) 5 years ago
.gitignore gitignore build 6 years ago
.gitmodules Correct the version of #136 on master (#141) 5 years ago
CODE_OF_CONDUCT.md Add a CODE_OF_CONDUCT.md file. (#101) 5 years ago
LICENSE Beginning porting Emscripten's emmalloc to wasi-libc. 2 years ago
LICENSE-APACHE Multi-license wasi-libc under Apache and MIT licenses. (#174) 5 years ago
LICENSE-APACHE-LLVM Multi-license wasi-libc under Apache and MIT licenses. (#174) 5 years ago
LICENSE-MIT Multi-license wasi-libc under Apache and MIT licenses. (#174) 5 years ago
Makefile Use -fno-strict-aliasing for emmalloc (#424) 1 year ago
README.md Improve `README.md` (#425) 1 year 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. For example, pthread support is experimentally provided via the wasi-threads proposal.`

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 10+, though we'd like to support other compilers as well), and then run:

make CC=/path/to/clang/with/wasm/support \
     AR=/path/to/llvm-ar \
     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.

Building in pthread support

To enable pthreads support via the wasi-threads proposal, follow the above build directions with one addition: make ... THREAD_MODEL=posix. This creates additional artifacts in sysroot/lib/wasm32-wasi-threads to support --target wasm32-wasi-threads.

Arch Linux AUR package

For Arch Linux users, there's an official wasi-libc package tracking this Git repository. You might want to install other WASI related packages as well.