summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wasi/README.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/wasi/README.md
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/wasi/README.md')
-rw-r--r--third_party/rust/wasi/README.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/third_party/rust/wasi/README.md b/third_party/rust/wasi/README.md
new file mode 100644
index 0000000000..801f56a4e0
--- /dev/null
+++ b/third_party/rust/wasi/README.md
@@ -0,0 +1,94 @@
+<div align="center">
+ <h1><code>wasi</code></h1>
+
+<strong>A <a href="https://bytecodealliance.org/">Bytecode Alliance</a> project</strong>
+
+ <p>
+ <strong>WASI API Bindings for Rust</strong>
+ </p>
+
+ <p>
+ <a href="https://crates.io/crates/wasi"><img src="https://img.shields.io/crates/v/wasi.svg?style=flat-square" alt="Crates.io version" /></a>
+ <a href="https://crates.io/crates/wasi"><img src="https://img.shields.io/crates/d/wasi.svg?style=flat-square" alt="Download" /></a>
+ <a href="https://docs.rs/wasi/"><img src="https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square" alt="docs.rs docs" /></a>
+ </p>
+</div>
+
+This crate contains API bindings for [WASI](https://github.com/WebAssembly/WASI)
+system calls in Rust, and currently reflects the `wasi_snapshot_preview1`
+module. This crate is quite low-level and provides conceptually a "system call"
+interface. In most settings, it's better to use the Rust standard library, which
+has WASI support.
+
+The `wasi` crate is also entirely procedurally generated from the `*.witx` files
+describing the WASI apis. While some conveniences are provided the bindings here
+are intentionally low-level!
+
+# Usage
+
+First you can depend on this crate via `Cargo.toml`:
+
+```toml
+[dependencies]
+wasi = "0.8.0"
+```
+
+Next you can use the APIs in the root of the module like so:
+
+```rust
+fn main() {
+ let stdout = 1;
+ let message = "Hello, World!\n";
+ let data = [wasi::Ciovec {
+ buf: message.as_ptr(),
+ buf_len: message.len(),
+ }];
+ wasi::fd_write(stdout, &data).unwrap();
+}
+```
+
+Next you can use a tool like [`cargo
+wasi`](https://github.com/bytecodealliance/cargo-wasi) to compile and run your
+project:
+
+To compile Rust projects to wasm using WASI, use the `wasm32-wasi` target,
+like this:
+
+```
+$ cargo wasi run
+ Compiling wasi v0.8.0+wasi-snapshot-preview1
+ Compiling wut v0.1.0 (/code)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.34s
+ Running `/.cargo/bin/cargo-wasi target/wasm32-wasi/debug/wut.wasm`
+ Running `target/wasm32-wasi/debug/wut.wasm`
+Hello, World!
+```
+
+# Development
+
+The bulk of the `wasi` crate is generated by the `witx-bindgen` tool, which lives at
+`crates/witx-bindgen` and is part of the cargo workspace.
+
+The `src/lib_generated.rs` file can be re-generated with the following
+command:
+
+```
+cargo run -p witx-bindgen -- crates/witx-bindgen/WASI/phases/snapshot/witx/wasi_snapshot_preview1.witx > src/lib_generated.rs
+```
+
+Note that this uses the WASI standard repository as a submodule. If you do not
+have this submodule present in your source tree, run:
+```
+git submodule update --init
+```
+
+# License
+
+This project is licensed under the Apache 2.0 license with the LLVM exception.
+See [LICENSE](LICENSE) for more details.
+
+### Contribution
+
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in this project by you, as defined in the Apache-2.0 license,
+shall be licensed as above, without any additional terms or conditions.