Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update noir_wasm build process to match acvm_js #2067

Merged
merged 2 commits into from
Aug 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
12 changes: 9 additions & 3 deletions crates/wasm/installPhase.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
#!/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 "" >> $out/README.md
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