-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
3,922 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
[package] | ||
name = "wasi-preview1-component-adapter" | ||
version.workspace = true | ||
authors.workspace = true | ||
edition.workspace = true | ||
publish = false | ||
|
||
[lints] | ||
workspace = true | ||
|
||
[dependencies] | ||
wasi = { version = "0.11.0", default-features = false } | ||
wit-bindgen = { workspace = true, default-features = false, features = ["macros"] } | ||
byte-array-literals = { workspace = true } | ||
|
||
[build-dependencies] | ||
wasm-encoder = { workspace = true } | ||
object = { workspace = true, default-features = false, features = ["archive"] } | ||
|
||
[lib] | ||
test = false | ||
crate-type = ["cdylib"] | ||
name = "wasi_snapshot_preview1" | ||
|
||
[features] | ||
default = ["reactor"] | ||
reactor = [] | ||
command = [] | ||
proxy = [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Set up our target toolchains, and copy our files. | ||
builder: | ||
FROM github.com/input-output-hk/catalyst-ci/earthly/rust:v2.0.3+rust-base |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# `wasi_snapshot_preview1.wasm` | ||
|
||
> **Note**: This repository is a work in progress. This is intended to be an | ||
> internal tool which not everyone has to look at but many might rely on. You | ||
> may need to reach out via issues or | ||
> [Zulip](https://bytecodealliance.zulipchat.com/) to learn more about this | ||
> repository. | ||
This repository currently contains an implementation of a WebAssembly module: | ||
`wasi_snapshot_preview1.wasm`. This module bridges the `wasi_snapshot_preview1` | ||
ABI to the preview2 ABI of the component model. At this time the preview2 APIs | ||
themselves are not done being specified so a local copy of `wit/*.wit` is used | ||
instead. | ||
|
||
## Building | ||
|
||
This adapter can be built with: | ||
|
||
```sh | ||
$ cargo build -p wasi-preview1-component-adapter --target wasm32-unknown-unknown --release | ||
``` | ||
|
||
And the artifact will be located at | ||
`target/wasm32-unknown-unknown/release/wasi_snapshot_preview1.wasm`. | ||
|
||
This by default builds a "reactor" adapter which means that it only provides | ||
adaptation from preview1 to preview2. Alternatively you can also build a | ||
"command" adapter by passing `--features command --no-default-features` which | ||
will additionally export a `run` function entrypoint. This is suitable for use | ||
with preview1 binaries that export a `_start` function. | ||
|
||
Alternatively the latest copy of the command and reactor adapters can be | ||
[downloaded from the `dev` tag assets][dev-tag] | ||
|
||
[dev-tag]: https://github.com/bytecodealliance/wasmtime/releases/tag/dev | ||
|
||
## Using | ||
|
||
With a `wasi_snapshot_preview1.wasm` file on-hand you can create a component | ||
from a module that imports WASI functions using the [`wasm-tools` | ||
CLI](https://github.com/bytecodealliance/wasm-tools) | ||
|
||
```sh | ||
$ cat foo.rs | ||
fn main() { | ||
println!("Hello, world!"); | ||
} | ||
$ rustc foo.rs --target wasm32-wasi | ||
$ wasm-tools print foo.wasm | grep '(import' | ||
(import "wasi_snapshot_preview1" "fd_write" (func ... | ||
(import "wasi_snapshot_preview1" "environ_get" (func ... | ||
(import "wasi_snapshot_preview1" "environ_sizes_get" ... | ||
(import "wasi_snapshot_preview1" "proc_exit" (func ... | ||
$ wasm-tools component new foo.wasm --adapt wasi_snapshot_preview1.wasm -o component.wasm | ||
|
||
# Inspect the generated `component.wasm` | ||
$ wasm-tools validate component.wasm --features component-model | ||
$ wasm-tools component wit component.wasm | ||
``` | ||
Here the `component.wasm` that's generated is a ready-to-run component which | ||
imports wasi preview2 functions and is compatible with the wasi-preview1-using | ||
module internally. |
Oops, something went wrong.