Go to file
Fabian Grünbichler e83dfabd6a
Some checks failed
CI / Build libc (10.0.0, windows-latest) (push) Has been cancelled
CI / Build libc (10.0.0, x86_64-apple-darwin, macos-latest) (push) Has been cancelled
CI / Build libc (10.0.0, x86_64-linux-gnu-ubuntu-18.04, ubuntu-latest) (push) Has been cancelled
CI / Build libc (15.0.7, x86_64-apple-darwin21.0, macos-latest) (push) Has been cancelled
CI / Build libc (16.0.0, true, windows-latest) (push) Has been cancelled
CI / Build libc (16.0.0, true, x86_64-linux-gnu-ubuntu-18.04, ubuntu-latest) (push) Has been cancelled
CI / wasi-headers test (macos-latest) (push) Has been cancelled
CI / wasi-headers test (ubuntu-latest) (push) Has been cancelled
CI / wasi-headers test (windows-latest) (push) Has been cancelled
CI / Rustfmt (push) Has been cancelled
bump version to 0.0~git20241209.574b88d-2~bpo12+pve1
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2025-02-21 08:12:00 +01:00
.github/workflows test: improve test infrastructure (#554) 2024-12-09 13:45:31 -08:00
debian bump version to 0.0~git20241209.574b88d-2~bpo12+pve1 2025-02-21 08:12:00 +01:00
dlmalloc dlmalloc: account the footprint of the initial heap (#496) 2024-05-17 10:53:56 -07:00
emmalloc emmalloc: use __heap_end instead of sbrk(0) (#462) 2024-01-10 13:31:37 -08:00
expected Implement a stub pthreads library for THREAD_MODEL=single (#518) 2024-10-10 09:27:48 -07:00
fts Initial FTS support (#522) 2024-09-25 16:16:34 -07:00
libc-bottom-half getaddrinfo: improve the service/port resolution (#524) 2024-08-27 17:39:34 -07:00
libc-top-half Implement a stub pthreads library for THREAD_MODEL=single (#518) 2024-10-10 09:27:48 -07:00
scripts Move installation of include headers into a separate script (NFC) (#552) 2024-12-03 17:28:05 -08:00
stub-pthreads Implement a stub pthreads library for THREAD_MODEL=single (#518) 2024-10-10 09:27:48 -07:00
test test: improve test infrastructure (#554) 2024-12-09 13:45:31 -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 Initial FTS support (#522) 2024-09-25 16:16:34 -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
linker-provided-symbols.txt fix shared library build with llvm-19 (#526) 2024-08-27 17:01:21 -07:00
Makefile Adjust Makefile for LLVM trunk (20) as of 2024-12-02 (#556) 2024-12-09 15:51:08 -08:00
README.md Remove trailing backtick in README.md (#455) 2023-12-17 18:06:16 -08: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 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.