Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/WebAssembly/wasi-libc
WASI libc implementation for WebAssembly
https://github.com/WebAssembly/wasi-libc
Last synced: 12 days ago
JSON representation
WASI libc implementation for WebAssembly
- Host: GitHub
- URL: https://github.com/WebAssembly/wasi-libc
- Owner: WebAssembly
- License: other
- Created: 2019-01-17T15:02:57.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2024-10-16T16:02:17.000Z (26 days ago)
- Last Synced: 2024-10-30T06:13:50.337Z (13 days ago)
- Language: C
- Homepage: https://wasi.dev
- Size: 3 MB
- Stars: 852
- Watchers: 52
- Forks: 199
- Open Issues: 84
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# `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.[wasi-threads]: https://github.com/WebAssembly/wasi-threads
## 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:```sh
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:
```sh
/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.[wasi-sdk]: https://github.com/WebAssembly/wasi-sdk
[wasi-libc]: https://archlinux.org/packages/extra/any/wasi-libc/
[WASI related packages]: https://archlinux.org/packages/?q=wasi-