2020-06-24 09:27:31 -04:00
|
|
|
# wasi
|
|
|
|
|
|
|
|
This module provides an implementation of the WebAssembly System Interface
|
|
|
|
|
|
|
|
## Supported Syscalls
|
|
|
|
|
2020-06-24 17:03:40 -04:00
|
|
|
### wasi_snapshot_preview1
|
|
|
|
|
|
|
|
- [x] args_get
|
|
|
|
- [x] args_sizes_get
|
|
|
|
- [x] environ_get
|
|
|
|
- [x] environ_sizes_get
|
|
|
|
- [x] clock_res_get
|
|
|
|
- [x] clock_time_get
|
|
|
|
- [ ] fd_advise
|
|
|
|
- [ ] fd_allocate
|
|
|
|
- [x] fd_close
|
2020-06-29 10:44:08 -04:00
|
|
|
- [x] fd_datasync
|
2020-06-24 17:03:40 -04:00
|
|
|
- [x] fd_fdstat_get
|
|
|
|
- [ ] fd_fdstat_set_flags
|
|
|
|
- [ ] fd_fdstat_set_rights
|
2020-06-29 09:34:18 -04:00
|
|
|
- [x] fd_filestat_get
|
2020-06-29 14:36:22 -04:00
|
|
|
- [x] fd_filestat_set_size
|
2020-06-24 17:03:40 -04:00
|
|
|
- [x] fd_filestat_set_times
|
|
|
|
- [x] fd_pread
|
|
|
|
- [x] fd_prestat_get
|
|
|
|
- [x] fd_prestat_dir_name
|
|
|
|
- [x] fd_pwrite
|
|
|
|
- [x] fd_read
|
|
|
|
- [ ] fd_readdir
|
|
|
|
- [x] fd_renumber
|
|
|
|
- [x] fd_seek
|
2020-06-29 17:45:39 -04:00
|
|
|
- [x] fd_sync
|
2020-06-24 17:03:40 -04:00
|
|
|
- [x] fd_tell
|
|
|
|
- [x] fd_write
|
|
|
|
- [x] path_create_directory
|
|
|
|
- [x] path_filestat_get
|
|
|
|
- [x] path_filestat_set_times
|
|
|
|
- [x] path_link
|
|
|
|
- [x] path_open
|
|
|
|
- [x] path_readlink
|
|
|
|
- [x] path_remove_directory
|
|
|
|
- [x] path_rename
|
|
|
|
- [x] path_symlink
|
|
|
|
- [x] path_unlink_file
|
|
|
|
- [x] poll_oneoff
|
|
|
|
- [x] proc_exit
|
|
|
|
- [ ] proc_raise
|
|
|
|
- [ ] sched_yield
|
|
|
|
- [x] random_get
|
|
|
|
- [ ] sock_recv
|
|
|
|
- [ ] sock_send
|
|
|
|
- [ ] sock_shutdown
|
|
|
|
|
2020-06-24 09:27:31 -04:00
|
|
|
## Usage
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
import WASI from "https://deno.land/std/wasi/snapshot_preview1.ts";
|
|
|
|
|
|
|
|
const wasi = new WASI({
|
|
|
|
args: Deno.args,
|
|
|
|
env: Deno.env,
|
|
|
|
});
|
|
|
|
|
2020-06-24 22:21:39 -04:00
|
|
|
const binary = await Deno.readFile("path/to/your/module.wasm");
|
2020-06-24 09:27:31 -04:00
|
|
|
const module = await WebAssembly.compile(binary);
|
|
|
|
const instance = await WebAssembly.instantiate(module, {
|
|
|
|
wasi_snapshot_preview1: wasi.exports,
|
|
|
|
});
|
|
|
|
|
|
|
|
wasi.memory = module.exports.memory;
|
|
|
|
|
|
|
|
if (module.exports._start) {
|
|
|
|
instance.exports._start();
|
|
|
|
} else if (module.exports._initialize) {
|
|
|
|
instance.exports._initialize();
|
|
|
|
} else {
|
|
|
|
throw new Error("No entry point found");
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Testing
|
|
|
|
|
|
|
|
The test suite for this module spawns rustc processes to compile various example
|
|
|
|
Rust programs. You must have wasm targets enabled:
|
|
|
|
|
|
|
|
```
|
|
|
|
rustup target add wasm32-wasi
|
|
|
|
rustup target add wasm32-unknown-unknown
|
|
|
|
```
|