]> git.proxmox.com Git - wasi-libc.git/blobdiff - README.md
bump version to 0.0~git20230113.4362b18-1~bpo12+pve1
[wasi-libc.git] / README.md
index d32f522902d29e182d58d8278cf3f0636fba6596..30682951f15e1f6e793c08988c812761eeb769ec 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,39 +1,30 @@
-# WASI Sysroot
+# WASI Libc
 
-This is a work in progress. It's usable for many purposes, though the APIs
-aren't stable 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?
-
-It's several things.
-
-First, it's a usable libc. It builds a "sysroot" which can be pointed to by
-compilers, such as Clang 8.0, using the wasm32-unknown-wasi target triple.
-It's a work in progress, but it is already sufficient to run basic programs.
-
-Second, it's a "reference" implementation, which means the interfaces defined
-here can be used by other tools and libraries, even if they don't use all the
-actual implementations here. For example, we don't expect everyone will want
-to use the exact `malloc` implementation provided here, but tools and
-libraries using an ABI-compatible `malloc` interface will be able to
-interoperate regardless of which actual implementation is used.
-
-Third, it's an example showing the use of the WASI API. The libc functionality
-is implemented using calls to WASI functions.
+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 one of the
-[prepackaged releases](https://github.com/CraneStation/wasmtime-wasi/blob/wasi/docs/WASI-intro.md#how-can-i-write-programs-that-use-wasi).
+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, though we'd like to support other compilers as well),
+(currently this is only clang 10+, though we'd like to support other compilers as well),
 and then run:
 
-```
-make WASM_CC=/path/to/wasm/supporting/c/compiler
+```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
@@ -41,8 +32,20 @@ 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.
+
+## 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].
+
+[wasi-sdk]: https://github.com/WebAssembly/wasi-sdk
+[wasi-libc-git]: https://aur.archlinux.org/packages/wasi-libc-git/