diff --git a/crates/wasm/build.sh b/crates/wasm/build.sh index 900c1868c08..92a12bd100c 100755 --- a/crates/wasm/build.sh +++ b/crates/wasm/build.sh @@ -6,6 +6,21 @@ function require_command { exit 1 fi } +function check_installed { + if ! command -v "$1" >/dev/null 2>&1; then + echo "$1 is not installed. Please install it." >&2 + return 1 + fi + return 0 +} +function run_or_fail { + "$@" + local status=$? + if [ $status -ne 0 ]; then + echo "Command '$*' failed with exit code $status" >&2 + exit $status + fi +} require_command toml2json require_command jq @@ -15,8 +30,6 @@ require_command wasm-opt export pname=$(toml2json < Cargo.toml | jq -r .package.name) -./preBuild.sh -cargo build --lib --release --package noir_wasm --target wasm32-unknown-unknown -./postBuild.sh -./installPhase.sh +run_or_fail ./buildPhaseCargoCommand.sh +run_or_fail ./installPhase.sh diff --git a/crates/wasm/buildPhaseCargoCommand.sh b/crates/wasm/buildPhaseCargoCommand.sh new file mode 100755 index 00000000000..1372c595a1f --- /dev/null +++ b/crates/wasm/buildPhaseCargoCommand.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +function run_or_fail { + "$@" + local status=$? + if [ $status -ne 0 ]; then + echo "Command '$*' failed with exit code $status" >&2 + exit $status + fi +} +function run_if_available { + if command -v "$1" >/dev/null 2>&1; then + "$@" + else + echo "$1 is not installed. Please install it to use this feature." >&2 + fi +} + +# Clear out the existing build artifacts as these aren't automatically removed by wasm-pack. +if [ -d ./pkg/ ]; then + rm -rf ./pkg/ +fi + +# TODO: Handle the wasm target being built in release mode +WASM_BINARY=../../target/wasm32-unknown-unknown/release/${pname}.wasm + +echo `pwd` +NODE_DIR=./pkg/nodejs/ +BROWSER_DIR=./pkg/web/ +NODE_WASM=${NODE_DIR}/${pname}_bg.wasm +BROWSER_WASM=${BROWSER_DIR}/${pname}_bg.wasm + +# Build the new wasm package +run_or_fail cargo build --lib --release --package noir_wasm --target wasm32-unknown-unknown +run_or_fail wasm-bindgen $WASM_BINARY --out-dir $NODE_DIR --typescript --target nodejs +run_or_fail wasm-bindgen $WASM_BINARY --out-dir $BROWSER_DIR --typescript --target web +run_if_available wasm-opt $NODE_WASM -o $NODE_WASM -O +run_if_available wasm-opt $BROWSER_WASM -o $BROWSER_WASM -O \ No newline at end of file diff --git a/crates/wasm/installPhase.sh b/crates/wasm/installPhase.sh index 4dd1473b941..1df30c5b35e 100755 --- a/crates/wasm/installPhase.sh +++ b/crates/wasm/installPhase.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash mkdir -p $out -cp ./crates/wasm/README.md $out/ -cp ./crates/wasm/package.json $out/ + +cp ./README.md ./pkg/ +cp ./package.json ./pkg/ cp -r ./pkg/* $out/ echo "## Tracking" >> $out/README.md diff --git a/crates/wasm/postBuild.sh b/crates/wasm/postBuild.sh deleted file mode 100755 index 1b01901adbe..00000000000 --- a/crates/wasm/postBuild.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -# TODO: Handle the wasm target being built in release mode -WASM_BINARY=./target/wasm32-unknown-unknown/release/${pname}.wasm -NODE_WASM=./pkg/nodejs/${pname}_bg.wasm -BROWSER_WASM=./pkg/web/${pname}_bg.wasm - -wasm-bindgen $WASM_BINARY --out-dir ./pkg/nodejs --typescript --target nodejs -wasm-bindgen $WASM_BINARY --out-dir ./pkg/web --typescript --target web -wasm-opt $NODE_WASM -o $NODE_WASM -O -wasm-opt $BROWSER_WASM -o $BROWSER_WASM -O diff --git a/crates/wasm/preBuild.sh b/crates/wasm/preBuild.sh deleted file mode 100644 index aa334e022c6..00000000000 --- a/crates/wasm/preBuild.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Clear out the existing build artifacts as these aren't automatically removed by wasm-pack. -if [ -d ./pkg/ ]; then - rm -rf ./pkg/ -fi \ No newline at end of file diff --git a/flake.nix b/flake.nix index a7bd0e39a7e..ea677501147 100644 --- a/flake.nix +++ b/flake.nix @@ -306,8 +306,8 @@ toml2json ]; - postBuild = '' - bash crates/wasm/postBuild.sh + buildPhaseCargoCommand = '' + bash crates/wasm/buildPhaseCargoCommand.sh ''; installPhase = ''