149 lines
6.6 KiB
Bash
Executable File
149 lines
6.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -ex
|
|
|
|
suffix() {
|
|
name="$1"
|
|
extra="$2"
|
|
cargo metadata | jq -r \
|
|
".packages.[] | select(.name==\"${name}\") | (\"rust-\" + .name + \"-\" + .version + \"-from-crates-io${extra}\")"
|
|
}
|
|
|
|
generate() {
|
|
file="$1"
|
|
shift
|
|
wit-bindgen rust "$@" --format
|
|
}
|
|
|
|
# ==============================================================================
|
|
# WASIp2 bindings
|
|
|
|
generate_p2() {
|
|
file="$1"
|
|
|
|
generate "$@" --std-feature ./crates/wasip2/wit --out-dir crates/wasip2/src
|
|
|
|
sed -z -i 's/#\[unsafe(\n link_section = "\(.*\)"\n)\]/\
|
|
#[cfg_attr(feature = "rustc-dep-of-std", unsafe(link_section = "\1-in-libstd"))]\
|
|
#[cfg_attr(not(feature = "rustc-dep-of-std"), unsafe(link_section = "\1"))]\
|
|
/' $file
|
|
}
|
|
|
|
# Generate the main body of the bindings which includes all imports from the two
|
|
# worlds below.
|
|
generate_p2 crates/wasip2/src/imports.rs \
|
|
--type-section-suffix $(suffix "wasip2") \
|
|
--generate-all \
|
|
--world wasi:cli/imports
|
|
|
|
# Generate bindings for the `wasi:cli/command` world specifically, namely the
|
|
# macro `export_command`.
|
|
#
|
|
# Note that `--with` is used to point at the previously generated bindings.
|
|
with="wasi:cli/environment@0.2.4=crate::cli::environment"
|
|
with="$with,wasi:cli/exit@0.2.4=crate::cli::exit"
|
|
with="$with,wasi:cli/stdin@0.2.4=crate::cli::stdin"
|
|
with="$with,wasi:cli/stdout@0.2.4=crate::cli::stdout"
|
|
with="$with,wasi:cli/stderr@0.2.4=crate::cli::stderr"
|
|
with="$with,wasi:cli/terminal-input@0.2.4=crate::cli::terminal_input"
|
|
with="$with,wasi:cli/terminal-output@0.2.4=crate::cli::terminal_output"
|
|
with="$with,wasi:cli/terminal-stdin@0.2.4=crate::cli::terminal_stdin"
|
|
with="$with,wasi:cli/terminal-stdout@0.2.4=crate::cli::terminal_stdout"
|
|
with="$with,wasi:cli/terminal-stderr@0.2.4=crate::cli::terminal_stderr"
|
|
with="$with,wasi:clocks/monotonic-clock@0.2.4=crate::clocks::monotonic_clock"
|
|
with="$with,wasi:clocks/wall-clock@0.2.4=crate::clocks::wall_clock"
|
|
with="$with,wasi:filesystem/types@0.2.4=crate::filesystem::types"
|
|
with="$with,wasi:filesystem/preopens@0.2.4=crate::filesystem::preopens"
|
|
with="$with,wasi:io/error@0.2.4=crate::io::error"
|
|
with="$with,wasi:io/poll@0.2.4=crate::io::poll"
|
|
with="$with,wasi:io/streams@0.2.4=crate::io::streams"
|
|
with="$with,wasi:random/random@0.2.4=crate::random::random"
|
|
with="$with,wasi:random/insecure@0.2.4=crate::random::insecure"
|
|
with="$with,wasi:random/insecure-seed@0.2.4=crate::random::insecure_seed"
|
|
with="$with,wasi:sockets/network@0.2.4=crate::sockets::network"
|
|
with="$with,wasi:sockets/instance-network@0.2.4=crate::sockets::instance_network"
|
|
with="$with,wasi:sockets/tcp@0.2.4=crate::sockets::tcp"
|
|
with="$with,wasi:sockets/tcp-create-socket@0.2.4=crate::sockets::tcp_create_socket"
|
|
with="$with,wasi:sockets/udp@0.2.4=crate::sockets::udp"
|
|
with="$with,wasi:sockets/udp-create-socket@0.2.4=crate::sockets::udp_create_socket"
|
|
with="$with,wasi:sockets/ip-name-lookup@0.2.4=crate::sockets::ip_name_lookup"
|
|
generate_p2 crates/wasip2/src/command.rs \
|
|
--world wasi:cli/command \
|
|
--with "$with" \
|
|
--type-section-suffix $(suffix "wasip2" "-command-world") \
|
|
--default-bindings-module '$crate' \
|
|
--pub-export-macro \
|
|
--export-macro-name _export_command
|
|
|
|
# Same as the `command` world, but for the proxy world.
|
|
with="wasi:cli/stdin@0.2.4=crate::cli::stdin"
|
|
with="$with,wasi:cli/stdout@0.2.4=crate::cli::stdout"
|
|
with="$with,wasi:cli/stderr@0.2.4=crate::cli::stderr"
|
|
with="$with,wasi:clocks/monotonic-clock@0.2.4=crate::clocks::monotonic_clock"
|
|
with="$with,wasi:clocks/wall-clock@0.2.4=crate::clocks::wall_clock"
|
|
with="$with,wasi:io/error@0.2.4=crate::io::error"
|
|
with="$with,wasi:io/poll@0.2.4=crate::io::poll"
|
|
with="$with,wasi:io/streams@0.2.4=crate::io::streams"
|
|
with="$with,wasi:random/random@0.2.4=crate::random::random"
|
|
generate_p2 crates/wasip2/src/proxy.rs \
|
|
--world wasi:http/proxy \
|
|
--with "$with" \
|
|
--type-section-suffix $(suffix "wasip2" "-proxy-world") \
|
|
--default-bindings-module '$crate' \
|
|
--pub-export-macro \
|
|
--export-macro-name _export_proxy
|
|
|
|
# ==============================================================================
|
|
# WASIp3 bindings
|
|
|
|
generate_p3() {
|
|
generate "$@" ./crates/wasip3/wit --out-dir crates/wasip3/src
|
|
}
|
|
|
|
generate_p3 crates/wasip3/src/imports.rs \
|
|
--type-section-suffix $(suffix "wasip3") \
|
|
--generate-all \
|
|
--world wasi:cli/imports
|
|
|
|
with="wasi:cli/environment@0.3.0-rc-2025-08-15=crate::cli::environment"
|
|
with="$with,wasi:cli/exit@0.3.0-rc-2025-08-15=crate::cli::exit"
|
|
with="$with,wasi:cli/stdin@0.3.0-rc-2025-08-15=crate::cli::stdin"
|
|
with="$with,wasi:cli/stdout@0.3.0-rc-2025-08-15=crate::cli::stdout"
|
|
with="$with,wasi:cli/stderr@0.3.0-rc-2025-08-15=crate::cli::stderr"
|
|
with="$with,wasi:cli/terminal-input@0.3.0-rc-2025-08-15=crate::cli::terminal_input"
|
|
with="$with,wasi:cli/terminal-output@0.3.0-rc-2025-08-15=crate::cli::terminal_output"
|
|
with="$with,wasi:cli/terminal-stdin@0.3.0-rc-2025-08-15=crate::cli::terminal_stdin"
|
|
with="$with,wasi:cli/terminal-stdout@0.3.0-rc-2025-08-15=crate::cli::terminal_stdout"
|
|
with="$with,wasi:cli/terminal-stderr@0.3.0-rc-2025-08-15=crate::cli::terminal_stderr"
|
|
with="$with,wasi:clocks/monotonic-clock@0.3.0-rc-2025-08-15=crate::clocks::monotonic_clock"
|
|
with="$with,wasi:clocks/wall-clock@0.3.0-rc-2025-08-15=crate::clocks::wall_clock"
|
|
with="$with,wasi:filesystem/types@0.3.0-rc-2025-08-15=crate::filesystem::types"
|
|
with="$with,wasi:filesystem/preopens@0.3.0-rc-2025-08-15=crate::filesystem::preopens"
|
|
with="$with,wasi:random/random@0.3.0-rc-2025-08-15=crate::random::random"
|
|
with="$with,wasi:random/insecure@0.3.0-rc-2025-08-15=crate::random::insecure"
|
|
with="$with,wasi:random/insecure-seed@0.3.0-rc-2025-08-15=crate::random::insecure_seed"
|
|
with="$with,wasi:sockets/types@0.3.0-rc-2025-08-15=crate::sockets::types"
|
|
with="$with,wasi:sockets/ip-name-lookup@0.3.0-rc-2025-08-15=crate::sockets::ip_name_lookup"
|
|
generate_p3 crates/wasip3/src/command.rs \
|
|
--world wasi:cli/command \
|
|
--with "$with" \
|
|
--type-section-suffix $(suffix "wasip3" "-command-world") \
|
|
--default-bindings-module '$crate' \
|
|
--pub-export-macro \
|
|
--async 'wasi:cli/run@0.3.0-rc-2025-08-15#run' \
|
|
--export-macro-name _export_command
|
|
|
|
with="wasi:cli/stdin@0.3.0-rc-2025-08-15=crate::cli::stdin"
|
|
with="$with,wasi:cli/stdout@0.3.0-rc-2025-08-15=crate::cli::stdout"
|
|
with="$with,wasi:cli/stderr@0.3.0-rc-2025-08-15=crate::cli::stderr"
|
|
with="$with,wasi:clocks/monotonic-clock@0.3.0-rc-2025-08-15=crate::clocks::monotonic_clock"
|
|
with="$with,wasi:clocks/wall-clock@0.3.0-rc-2025-08-15=crate::clocks::wall_clock"
|
|
with="$with,wasi:random/random@0.3.0-rc-2025-08-15=crate::random::random"
|
|
generate_p3 crates/wasip3/src/proxy.rs \
|
|
--world wasi:http/proxy \
|
|
--with "$with" \
|
|
--type-section-suffix $(suffix "wasip3" "-proxy-world") \
|
|
--default-bindings-module '$crate' \
|
|
--pub-export-macro \
|
|
--export-macro-name _export_proxy
|