diff --git a/examples/wasm-audio-worklet/build.py b/examples/wasm-audio-worklet/build.py new file mode 100644 index 00000000000..d1678b5d9e3 --- /dev/null +++ b/examples/wasm-audio-worklet/build.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +import os +import subprocess + +root_dir = os.path.dirname(__file__) + +# A couple of steps are necessary to get this build working which makes it slightly +# nonstandard compared to most other builds. +# +# * First, the Rust standard library needs to be recompiled with atomics +# enabled. to do that we use Cargo's unstable `-Zbuild-std` feature. +# +# * Next we need to compile everything with the `atomics` and `bulk-memory` +# features enabled, ensuring that LLVM will generate atomic instructions, +# shared memory, passive segments, etc. + +os.environ.update( + {"RUSTFLAGS": "-C target-feature=+atomics,+bulk-memory,+mutable-globals"} +) + +subprocess.run( + [ + "cargo", + "build", + "--target", + "wasm32-unknown-unknown", + "--release", + "-Zbuild-std=std,panic_abort", + ], + cwd=root_dir, +).check_returncode() + +# Note the usage of `--target no-modules` here which is required for passing +# the memory import to each wasm module. +subprocess.run( + [ + "cargo", + "run", + "-p", + "wasm-bindgen-cli", + "--", + os.path.join( + root_dir, + "..", + "..", + "target", + "wasm32-unknown-unknown", + "release", + "wasm_audio_worklet.wasm", + ), + "--out-dir", + root_dir, + "--target", + "web", + "--split-linked-modules", + ], + cwd=root_dir, +).check_returncode() diff --git a/examples/wasm-audio-worklet/build.sh b/examples/wasm-audio-worklet/build.sh index 576fec80605..09786f553ce 100755 --- a/examples/wasm-audio-worklet/build.sh +++ b/examples/wasm-audio-worklet/build.sh @@ -2,21 +2,4 @@ set -ex -# A couple of steps are necessary to get this build working which makes it slightly -# nonstandard compared to most other builds. -# -# * First, the Rust standard library needs to be recompiled with atomics -# enabled. to do that we use Cargo's unstable `-Zbuild-std` feature. -# -# * Next we need to compile everything with the `atomics` and `bulk-memory` -# features enabled, ensuring that LLVM will generate atomic instructions, -# shared memory, passive segments, etc. - -RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals' \ - cargo build --target wasm32-unknown-unknown --release -Z build-std=std,panic_abort - -cargo run -p wasm-bindgen-cli -- \ - ../../target/wasm32-unknown-unknown/release/wasm_audio_worklet.wasm \ - --out-dir . \ - --target web \ - --split-linked-modules +python3 build.py diff --git a/examples/wasm-audio-worklet/run.py b/examples/wasm-audio-worklet/run.py new file mode 100644 index 00000000000..411fb94d0e3 --- /dev/null +++ b/examples/wasm-audio-worklet/run.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +import os +import subprocess + +root_dir = os.path.dirname(__file__) + +subprocess.run(["python3", "build.py"], cwd=root_dir).check_returncode() + +subprocess.run(["python3", "server.py"], cwd=root_dir).check_returncode() diff --git a/examples/wasm-audio-worklet/run.sh b/examples/wasm-audio-worklet/run.sh index e32cfb456e9..1590260c287 100755 --- a/examples/wasm-audio-worklet/run.sh +++ b/examples/wasm-audio-worklet/run.sh @@ -2,6 +2,6 @@ set -ex -./build.sh +python3 build.py python3 server.py