diff --git a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/image/Dockerfile.mustache b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/image/Dockerfile.mustache index 7a4190891c..08e32490bf 100644 --- a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/image/Dockerfile.mustache +++ b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/image/Dockerfile.mustache @@ -1,4 +1,4 @@ -FROM rust:1.60.0 as base +FROM rust:1.65.0 as base # Install the wasm32 rust build target RUN rustup target add wasm32-unknown-unknown @@ -16,16 +16,19 @@ RUN curl -L https://github.com/WebAssembly/binaryen/releases/download/version_10 && rm -rf binary-version_101 # Install the toml-cli -RUN cargo install -f toml-cli +RUN cargo install toml-cli # Install wasm-snip -RUN cargo install -f wasm-snip +RUN cargo install wasm-snip # Install wasm-bindgen -RUN cargo install -f wasm-bindgen-cli +RUN cargo install wasm-bindgen-cli + +# Install wasm-tools +RUN cargo install wasm-tools # Install cargo-build-deps -RUN cargo install -f cargo-build-deps +RUN cargo install cargo-build-deps {{#polywrap_linked_packages.length}} WORKDIR /linked-packages @@ -107,9 +110,14 @@ ENV WASM_INTERFACE_TYPES=1 # Run wasm-bindgen over the module, replacing all placeholder __wbindgen_... imports RUN wasm-bindgen ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm --out-dir ./build --out-name bg_module.wasm -RUN wasm-snip ./build/bg_module.wasm -o ./build/snipped_module.wasm && \ +# Run wasm-tools strip to remove the wasm-interface-types custom section +RUN wasm-tools strip ./build/bg_module.wasm -d wasm-interface-types -o ./build/strip_module.wasm && \ rm -rf ./build/bg_module.wasm +# Run wasm-snip to trip down the size of the binary, removing any dead code +RUN wasm-snip ./build/strip_module.wasm -o ./build/snipped_module.wasm && \ + rm -rf ./build/strip_module.wasm + # Use wasm-opt to perform the "asyncify" post-processing step over all modules RUN wasm-opt --asyncify -Os ./build/snipped_module.wasm -o ./build/wrap.wasm && \ rm -rf ./build/snipped_module.wasm diff --git a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/local/local.sh b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/local/local.sh index ebc7f36f15..df851937e4 100644 --- a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/local/local.sh +++ b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/local/local.sh @@ -1,27 +1,59 @@ #!/bin/sh + +# Install the wasm32 rust build target rustup target add wasm32-unknown-unknown -export RUSTFLAGS="-C link-arg=-z -C link-arg=stack-size=65536 -C link-arg=--import-memory" + +# Install the toml-cli cargo install toml-cli + +# Install wasm-snip cargo install wasm-snip + +# Install wasm-bindgen cargo install wasm-bindgen-cli +# Install wasm-tools +cargo install wasm-tools + +# Ensure the module at {{dir}} has the crate-type = ["cdylib"] toml set "$1"/Cargo.toml lib.crate-type ["cdylib"] > "$1"/Cargo-local.toml && \ - rm -rf "$1"/Cargo.toml && \ + mv "$1"/Cargo.toml "$1"/Cargo-bak.toml && \ mv "$1"/Cargo-local.toml "$1"/Cargo.toml # Clean up artifacts left by the toml CLI program ("["cdylib"]" -> ["cdylib"]) -sed -i 's/"\[cdylib\]"/\["cdylib"\]/g' "$1"/Cargo.toml +sed -i .bak 's/"\[cdylib\]"/\["cdylib"\]/g' "$1"/Cargo.toml && \ + rm -rf "$1"/Cargo.toml.bak # Ensure the package name = "module" toml set "$1"/Cargo.toml package.name "module" > "$1"/Cargo-local.toml && \ rm -rf "$1"/Cargo.toml && \ mv "$1"/Cargo-local.toml "$1"/Cargo.toml +# Ensure the Wasm module is configured to use imported memory +export RUSTFLAGS="-C link-arg=-z -C link-arg=stack-size=65536 -C link-arg=--import-memory" + +# Build the module cargo build --manifest-path "$1"/Cargo.toml \ --target wasm32-unknown-unknown --release + +# Replace the modified Cargo.toml with the backup +rm -rf "$1"/Cargo.toml && mv "$1"/Cargo-bak.toml "$1"/Cargo.toml + +# Enable the "WASM_INTERFACE_TYPES" feature, which will remove the __wbindgen_throw import. +# See: https://github.com/rustwasm/wasm-bindgen/blob/7f4663b70bd492278bf0e7bba4eeddb3d840c868/crates/cli-support/src/lib.rs#L397-L403 export WASM_INTERFACE_TYPES=1 + +# Run wasm-bindgen over the module, replacing all placeholder __wbindgen_... imports wasm-bindgen "$1"/target/wasm32-unknown-unknown/release/module.wasm --out-dir "$2" --out-name bg_module.wasm -wasm-snip "$2"/bg_module.wasm -o "$2"/snipped_module.wasm && \ - rm -rf "$2"/bg_module.wasm + +# Run wasm-tools strip to remove the wasm-interface-types custom section +wasm-tools strip "$2"/bg_module.wasm -d wasm-interface-types -o "$2"/strip_module.wasm +rm -rf "$2"/bg_module.wasm + +# Run wasm-snip to trip down the size of the binary, removing any dead code +wasm-snip "$2"/strip_module.wasm -o "$2"/snipped_module.wasm +rm -rf "$2"/strip_module.wasm + +# Use wasm-opt to perform the "asyncify" post-processing step over all modules npx wasm-opt --asyncify -Os "$2"/snipped_module.wasm -o "$2"/wrap.wasm - rm -rf "$2"/snipped_module.wasm \ No newline at end of file +rm -rf "$2"/snipped_module.wasm diff --git a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/Dockerfile b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/Dockerfile index 35b5b569e6..dfb2ba79e1 100644 --- a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/Dockerfile +++ b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.60.0 as base +FROM rust:1.65.0 as base # Install the wasm32 rust build target RUN rustup target add wasm32-unknown-unknown @@ -16,18 +16,25 @@ RUN curl -L https://github.com/WebAssembly/binaryen/releases/download/version_10 && rm -rf binary-version_101 # Install the toml-cli -RUN cargo install -f toml-cli +RUN cargo install toml-cli # Install wasm-snip -RUN cargo install -f wasm-snip +RUN cargo install wasm-snip # Install wasm-bindgen -RUN cargo install -f wasm-bindgen-cli +RUN cargo install wasm-bindgen-cli + +# Install wasm-tools +RUN cargo install wasm-tools # Install cargo-build-deps -RUN cargo install -f cargo-build-deps +RUN cargo install cargo-build-deps +# Ensure the Wasm module is configured to use imported memory ENV RUSTFLAGS="-C link-arg=-z -C link-arg=stack-size=65536 -C link-arg=--import-memory" + +# Enable the "WASM_INTERFACE_TYPES" feature, which will remove the __wbindgen_throw import. +# See: https://github.com/rustwasm/wasm-bindgen/blob/7f4663b70bd492278bf0e7bba4eeddb3d840c868/crates/cli-support/src/lib.rs#L397-L403 ENV WASM_INTERFACE_TYPES=1 WORKDIR /project diff --git a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/vm-script.mustache b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/vm-script.mustache index ca0987fc89..3a1f73f9ce 100644 --- a/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/vm-script.mustache +++ b/packages/cli/src/lib/defaults/build-strategies/wasm/rust/vm/vm-script.mustache @@ -1,6 +1,7 @@ set -e {{#polywrap_linked_packages.length}} +# Link any local packages {{#polywrap_linked_packages}} toml set ./{{#polywrap_module}}{{dir}}{{/polywrap_module}}/Cargo.toml dependencies.{{name}}.path /linked-packages/{{name}} > ./{{#polywrap_module}}{{dir}}{{/polywrap_module}}/Cargo-local.toml rm -rf ./{{#polywrap_module}}{{dir}}{{/polywrap_module}}/Cargo.toml @@ -9,26 +10,39 @@ toml set ./{{#polywrap_module}}{{dir}}{{/polywrap_module}}/Cargo.toml dependenci {{/polywrap_linked_packages.length}} {{#polywrap_module}} +# Ensure the module at {{dir}} has the crate-type = ["cdylib"] toml set ./{{dir}}/Cargo.toml lib.crate-type ["cdylib"] > ./{{dir}}/Cargo-local.toml rm -rf ./{{dir}}/Cargo.toml mv ./{{dir}}/Cargo-local.toml ./{{dir}}/Cargo.toml + +# Clean up artifacts left by the toml CLI program ("["cdylib"]" -> ["cdylib"]) sed -i 's/\"\[cdylib\]\"/\[\"cdylib\"\]/g' ./{{dir}}/Cargo.toml +# Ensure the package name = "module" toml set ./{{dir}}/Cargo.toml package.name "module" > ./{{dir}}/Cargo-local.toml rm -rf ./{{dir}}/Cargo.toml mv ./{{dir}}/Cargo-local.toml ./{{dir}}/Cargo.toml +# Build the module cargo build --manifest-path ./{{dir}}/Cargo.toml \ --target wasm32-unknown-unknown --release +# Make the build directory rm -rf ./build mkdir ./build +# Run wasm-bindgen over the module, replacing all placeholder __wbindgen_... imports wasm-bindgen ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm --out-dir ./build --out-name bg_module.wasm -wasm-snip ./build/bg_module.wasm -o ./build/snipped_module.wasm +# Run wasm-tools strip to remove the wasm-interface-types custom section +wasm-tools strip ./build/bg_module.wasm -d wasm-interface-types -o ./build/strip_module.wasm rm -rf ./build/bg_module.wasm +# Run wasm-snip to trip down the size of the binary, removing any dead code +wasm-snip ./build/strip_module.wasm -o ./build/snipped_module.wasm +rm -rf ./build/strip_module.wasm + +# Use wasm-opt to perform the "asyncify" post-processing step over all modules wasm-opt --asyncify -Os ./build/snipped_module.wasm -o ./build/wrap.wasm rm -rf ./build/snipped_module.wasm -{{/polywrap_module}} \ No newline at end of file +{{/polywrap_module}} diff --git a/packages/test-cases/cases/cli/wasm/build-benchmarks/001-rust/current/Dockerfile b/packages/test-cases/cases/cli/wasm/build-benchmarks/001-rust/current/Dockerfile index b8bee99161..d84cae7365 100644 --- a/packages/test-cases/cases/cli/wasm/build-benchmarks/001-rust/current/Dockerfile +++ b/packages/test-cases/cases/cli/wasm/build-benchmarks/001-rust/current/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.60.0 as base +FROM rust:1.65.0 as base # Install the wasm32 rust build target RUN rustup target add wasm32-unknown-unknown diff --git a/packages/test-cases/cases/wrappers/wasm-rs/benchmarks/Dockerfile b/packages/test-cases/cases/wrappers/wasm-rs/benchmarks/Dockerfile index c668f044f0..ffe9653d85 100644 --- a/packages/test-cases/cases/wrappers/wasm-rs/benchmarks/Dockerfile +++ b/packages/test-cases/cases/wrappers/wasm-rs/benchmarks/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.60.0 as base +FROM rust:1.65.0 as base # Install the wasm32 rust build target RUN rustup target add wasm32-unknown-unknown