X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=README.md;h=0b9b99e8ea38f4414342c2a45dc0c925d7b720bb;hb=7a7073f2e1c9ab25b7c181dad811090eca7983a8;hp=21c92f5ab274b6cb8693e60f655b86c73af7e0a0;hpb=488c478b598471acbbb7997cb9f71728be07549e;p=wasi-libc.git diff --git a/README.md b/README.md index 21c92f5..0b9b99e 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,29 @@ -# 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. ## Usage -The easiest way to get started with this is to use one of the -[prepackaged releases](https://github.com/CraneStation/wasmtime/blob/master/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 8+, 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 +31,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/