X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=README.md;h=30682951f15e1f6e793c08988c812761eeb769ec;hb=HEAD;hp=ecd58b56644b10ca7c9f1152aa67e161c7181002;hpb=b91c4ea256ef30ad191a450b02496a6542bb42eb;p=wasi-libc.git diff --git a/README.md b/README.md index ecd58b5..ca5d154 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,63 @@ -# WebAssembly Reference Sysroot +# `wasi-libc` -Caution: This is currently quite experimental and not generally usable yet! +`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. -## What is this? +`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.` -This is a "reference sysroot", which is meant to be part of a common C ABI -that can be shared across C libraries and compilers. While it's intended to -(eventually) be usable in its own right, we fully expect other -implementations to be used in practice by many different systems, though -we do hope that in those cases, this library defines a useful ABI that can -be followed. +[wasi-threads]: https://github.com/WebAssembly/wasi-threads ## Usage -Obtain a WebAssembly-supporting C compiler, and then run: +The easiest way to get started with this is to use [wasi-sdk], which includes a +build of `wasi-libc` in its sysroot. -``` -make WASM_CC=/path/to/wasm/supporting/c/compiler +## 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 +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. -## Why doesn't this contain a full libc implementation? +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`. -In the short term, one of the main goals is just to provide a reference -point for people already maintaining their own libc codebases, to help -reduce interface incompatibilities between the several different -environments out there. +## Arch Linux AUR package -In the long term, there may some day be some form of standardized -syscall/import layer for wasm which would could support a full -"reference libc", at which point this repository might make sense as -a place to host such a thing. +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. -In between, if there are specific pieces of libc functionality which -people would find useful to have here, and which don't depend on any -syscalls, we could add them, using code from existing third-party -codebases as appropriate. +[wasi-sdk]: https://github.com/WebAssembly/wasi-sdk +[wasi-libc]: https://archlinux.org/packages/community/any/wasi-libc/ +[WASI related packages]: https://archlinux.org/packages/?q=wasi-