Go to file
Mike Hommey 04431e56b2
Remove hacks for clang 8 (#384)
__FLOAT128__ has been defined since clang 9
__FLT16_* were defined until clang 9
2023-01-11 18:09:45 -08:00
.github/workflows test: run a subset of tests using libc-test (#346) 2022-12-02 18:27:42 -08:00
dlmalloc Don't use sbrk(0) to determine the initial heap size (#377) 2023-01-09 08:33:05 -08:00
emmalloc Port emmalloc to wasi-libc. 2022-11-01 12:54:26 -07:00
expected Remove hacks for clang 8 (#384) 2023-01-11 18:09:45 -08:00
libc-bottom-half Use __BIGGEST_ALIGNMENT__ instead of max_align_t (#375) 2023-01-09 08:33:58 -08:00
libc-top-half __init_tp: Initialize TID to non-zero value (#360) 2023-01-06 11:35:27 -08:00
test test: run a subset of tests using libc-test (#346) 2022-12-02 18:27:42 -08:00
tools/wasi-headers build: update WASI and partially regenerate api.h 2022-04-20 13:39:57 -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 Beginning porting Emscripten's emmalloc to wasi-libc. 2022-11-01 12:54:26 -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 Remove hacks for clang 8 (#384) 2023-01-11 18:09:45 -08:00
README.md Fix make THREAD_MODEL=posix (#311) 2022-08-09 08:08:37 -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. For example, pthread support is still a work in progress.

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.

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.