From 94d9c43abe520c7af51f27dfac0b902721b903f2 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Sun, 6 Nov 2022 18:30:51 +0530 Subject: [PATCH 1/2] feat: remove wasm-bindgen from the rust wrapper build step --- .../wasm/rust/image/Dockerfile.mustache | 13 +------------ .../build-strategies/wasm/rust/local/local.sh | 6 +----- .../build-strategies/wasm/rust/vm/Dockerfile | 4 ---- .../wasm/rust/vm/vm-script.mustache | 5 +---- 4 files changed, 3 insertions(+), 25 deletions(-) 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..b65a3a0ef4 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 @@ -21,9 +21,6 @@ RUN cargo install -f toml-cli # Install wasm-snip RUN cargo install -f wasm-snip -# Install wasm-bindgen -RUN cargo install -f wasm-bindgen-cli - # Install cargo-build-deps RUN cargo install -f cargo-build-deps @@ -100,15 +97,7 @@ RUN cargo build --manifest-path ./{{dir}}/Cargo.toml \ RUN rm -rf ./build RUN mkdir ./build -# 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 - -# 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 && \ - rm -rf ./build/bg_module.wasm +RUN wasm-snip ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm -o ./build/snipped_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 && \ 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..9452895c76 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 @@ -3,7 +3,6 @@ rustup target add wasm32-unknown-unknown export RUSTFLAGS="-C link-arg=-z -C link-arg=stack-size=65536 -C link-arg=--import-memory" cargo install toml-cli cargo install wasm-snip -cargo install wasm-bindgen-cli toml set "$1"/Cargo.toml lib.crate-type ["cdylib"] > "$1"/Cargo-local.toml && \ rm -rf "$1"/Cargo.toml && \ @@ -19,9 +18,6 @@ toml set "$1"/Cargo.toml package.name "module" > "$1"/Cargo-local.toml && \ cargo build --manifest-path "$1"/Cargo.toml \ --target wasm32-unknown-unknown --release -export WASM_INTERFACE_TYPES=1 -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 +wasm-snip "$1"/target/wasm32-unknown-unknown/release/module.wasm -o "$2"/snipped_module.wasm 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 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..6163b86ad0 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 @@ -21,13 +21,9 @@ RUN cargo install -f toml-cli # Install wasm-snip RUN cargo install -f wasm-snip -# Install wasm-bindgen -RUN cargo install -f wasm-bindgen-cli - # Install cargo-build-deps RUN cargo install -f cargo-build-deps ENV RUSTFLAGS="-C link-arg=-z -C link-arg=stack-size=65536 -C link-arg=--import-memory" -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..2e677991d9 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 @@ -24,10 +24,7 @@ cargo build --manifest-path ./{{dir}}/Cargo.toml \ rm -rf ./build mkdir ./build -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 -rm -rf ./build/bg_module.wasm +wasm-snip ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm -o ./build/snipped_module.wasm wasm-opt --asyncify -Os ./build/snipped_module.wasm -o ./build/wrap.wasm rm -rf ./build/snipped_module.wasm From 1123b9738863ee28dce43f60ef9ba3e4559338b7 Mon Sep 17 00:00:00 2001 From: dOrgJelli Date: Mon, 14 Nov 2022 21:31:43 -0600 Subject: [PATCH 2/2] feat: remove wasm-interface-types custom section --- .../wasm/rust/image/Dockerfile.mustache | 29 ++++++++++-- .../build-strategies/wasm/rust/local/local.sh | 46 +++++++++++++++++-- .../build-strategies/wasm/rust/vm/Dockerfile | 19 ++++++-- .../wasm/rust/vm/vm-script.mustache | 21 ++++++++- .../001-rust/current/Dockerfile | 2 +- .../wrappers/wasm-rs/benchmarks/Dockerfile | 2 +- 6 files changed, 101 insertions(+), 18 deletions(-) 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 b65a3a0ef4..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,13 +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 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 @@ -97,7 +103,20 @@ RUN cargo build --manifest-path ./{{dir}}/Cargo.toml \ RUN rm -rf ./build RUN mkdir ./build -RUN wasm-snip ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm -o ./build/snipped_module.wasm +# 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 + +# 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-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 && \ 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 9452895c76..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,23 +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 -wasm-snip "$1"/target/wasm32-unknown-unknown/release/module.wasm -o "$2"/snipped_module.wasm + +# 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 + +# 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 6163b86ad0..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,14 +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 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 2e677991d9..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,23 +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 -wasm-snip ./{{dir}}/target/wasm32-unknown-unknown/release/module.wasm -o ./build/snipped_module.wasm +# 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 + +# 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