build-wasm.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. function _print_usage {
  4. echo "Usage: $0 --target=web|nodejs [--no-container] -- [parameters for .devcontainer/env.sh]"
  5. echo
  6. echo "Use target 'web' to build for Threema Desktop and the examples."
  7. echo "Use target 'nodejs' to build for the bindings tests."
  8. echo "Use --no-container to not source a devcontainer environment."
  9. }
  10. while [[ "$#" -gt 0 ]]; do
  11. case "$1" in
  12. -h | --help)
  13. _print_usage
  14. exit 0
  15. ;;
  16. --target=web)
  17. _target='web'
  18. _build_dir='web'
  19. ;;
  20. --target=nodejs)
  21. _target='experimental-nodejs-module'
  22. _build_dir='nodejs'
  23. ;;
  24. --no-container)
  25. _no_container=1
  26. ;;
  27. --)
  28. shift;
  29. break
  30. ;;
  31. *)
  32. echo "Unknown parameter passed: $1"
  33. _print_usage
  34. exit 1
  35. ;;
  36. esac
  37. shift
  38. done
  39. if [[ -z ${_target+x} ]] || [[ -z ${_build_dir+x} ]] ; then
  40. _print_usage
  41. exit 1
  42. fi
  43. # Clean and load dev container
  44. cd "$(dirname "$0")/.."
  45. [[ -d ./build/wasm/$_build_dir ]] && rm -r ./build/wasm/$_build_dir
  46. if [[ -z ${_no_container+x} ]] ; then
  47. source ./.devcontainer/env.sh
  48. fi
  49. # Ensure consistent target dir, even if `build.target-dir` config option is set for Cargo
  50. export CARGO_TARGET_DIR=target
  51. # Build library as WASM
  52. cargo build \
  53. --locked \
  54. -F wasm \
  55. -p libthreema \
  56. --target wasm32-unknown-unknown \
  57. --release
  58. # Create WASM bindings for Rust code
  59. wasm-bindgen \
  60. --split-linked-modules \
  61. --encode-into always \
  62. --reference-types \
  63. --out-dir ./build/wasm/$_build_dir \
  64. --target $_target \
  65. ./target/wasm32-unknown-unknown/release/libthreema.wasm
  66. # Optimise WASM
  67. wasm-opt \
  68. ./build/wasm/$_build_dir/libthreema_bg.wasm \
  69. -o ./build/wasm/$_build_dir/libthreema_bg.wasm \
  70. -O \
  71. --enable-reference-types
  72. # Unload dev container if it was started
  73. if [[ -z ${_no_container+x} ]] ; then
  74. deactivate --only-if-started
  75. fi