Skip to content

Commit

Permalink
chore: update noir_wasm build process to match acvm_js
Browse files Browse the repository at this point in the history
  • Loading branch information
TomAFrench committed Aug 10, 2023
1 parent 90c5d18 commit 6ad35b7
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 27 deletions.
36 changes: 31 additions & 5 deletions crates/wasm/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,43 @@ 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
require_command cargo
require_command wasm-bindgen
require_command wasm-opt

export pname=$(toml2json < Cargo.toml | jq -r .package.name)
self_path=$(dirname "$(readlink -f "$0")")
export pname=$(toml2json < ${self_path}/Cargo.toml | jq -r .package.name)
export CARGO_TARGET_DIR=$self_path/target

rm -rf $self_path/outputs >/dev/null 2>&1
rm -rf $self_path/result >/dev/null 2>&1

if [ -v out ]; then
echo "Will install package to $out (defined outside installPhase.sh script)"
else
out="$self_path/outputs/out"
echo "Will install package to $out"
fi

./preBuild.sh
cargo build --lib --release --package noir_wasm --target wasm32-unknown-unknown
./postBuild.sh
./installPhase.sh
run_or_fail ${self_path}/buildPhaseCargoCommand.sh
run_or_fail ${self_path}/installPhase.sh

ln -s $out $self_path/result
40 changes: 40 additions & 0 deletions crates/wasm/buildPhaseCargoCommand.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/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
}

export self_path=$(dirname "$(readlink -f "$0")")

# Clear out the existing build artifacts as these aren't automatically removed by wasm-pack.
if [ -d ${self_path}/pkg/ ]; then
rm -rf ${self_path}/pkg/
fi

# TODO: Handle the wasm target being built in release mode
TARGET=wasm32-unknown-unknown
WASM_BINARY=${self_path}/../../target/${TARGET}/release/${pname}.wasm

NODE_DIR=${self_path}/pkg/nodejs/
BROWSER_DIR=${self_path}/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
11 changes: 8 additions & 3 deletions crates/wasm/installPhase.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
#!/usr/bin/env bash
export self_path=$(dirname "$(readlink -f "$0")")

mkdir -p $out
cp ./crates/wasm/README.md $out/
cp ./crates/wasm/package.json $out/
cp -r ./pkg/* $out/

cp ${self_path}/README.md ${self_path}/pkg/
cp ${self_path}/package.json ${self_path}/pkg/
cp -r ${self_path}/pkg/* $out/

echo "## Tracking" >> $out/README.md
echo "Built from [noir-lang/noir@$GIT_COMMIT](https://github.com/noir-lang/noir/tree/$GIT_COMMIT)" >> $out/README.md

# Cleanup temporary pkg directory
rm -r $self_path/pkg
11 changes: 0 additions & 11 deletions crates/wasm/postBuild.sh

This file was deleted.

6 changes: 0 additions & 6 deletions crates/wasm/preBuild.sh

This file was deleted.

4 changes: 2 additions & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,8 @@
toml2json
];

postBuild = ''
bash crates/wasm/postBuild.sh
buildPhaseCargoCommand = ''
bash crates/wasm/buildPhaseCargoCommand.sh
'';

installPhase = ''
Expand Down

0 comments on commit 6ad35b7

Please sign in to comment.