Files
penpot/graph-wasm/_build_env
Alejandro Alonso 222481fa0d 🎉 Basic graph wasm support
2025-12-22 06:51:56 +01:00

106 lines
2.6 KiB
Bash

#!/usr/bin/env bash
# --------------------
# Build configuration
# --------------------
_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export CURRENT_VERSION="${CURRENT_VERSION:-develop}"
export BUILD_NAME="${BUILD_NAME:-graph-wasm}"
export CARGO_BUILD_TARGET="${CARGO_BUILD_TARGET:-wasm32-unknown-emscripten}"
# Keep the emscripten cache in-repo so system cache cleaners do not wipe it.
export EM_CACHE="${EM_CACHE:-${_SCRIPT_DIR}/.emsdk_cache}"
export CARGO_TARGET_DIR="${CARGO_TARGET_DIR:-${_SCRIPT_DIR}/target}"
if [[ -z "${CARGO_INCREMENTAL:-}" && "${NODE_ENV:-}" != "production" ]]; then
export CARGO_INCREMENTAL=1
fi
if [[ -z "${RUSTC_WRAPPER:-}" ]] && command -v sccache >/dev/null 2>&1; then
export RUSTC_WRAPPER=sccache
fi
export CRATE_CC_NO_DEFAULTS=1
# BUILD_MODE
if [[ "${NODE_ENV:-}" == "production" ]]; then
BUILD_MODE=release
else
BUILD_MODE="${1:-debug}"
fi
export BUILD_MODE
# --------------------
# Emscripten memory
# --------------------
export EM_INITIAL_HEAP=$((256 * 1024 * 1024))
export EM_MAXIMUM_MEMORY=$((4 * 1024 * 1024 * 1024))
export EM_MEMORY_GROWTH_GEOMETRIC_STEP=0.8
export EM_MALLOC=dlmalloc
# --------------------
# Flags
# --------------------
EMCC_COMMON_FLAGS=(
--no-entry
-sASSERTIONS=1
-sALLOW_TABLE_GROWTH=1
-sALLOW_MEMORY_GROWTH=1
-sINITIAL_HEAP=$EM_INITIAL_HEAP
-sMEMORY_GROWTH_GEOMETRIC_STEP=$EM_MEMORY_GROWTH_GEOMETRIC_STEP
-sMAXIMUM_MEMORY=$EM_MAXIMUM_MEMORY
-sERROR_ON_UNDEFINED_SYMBOLS=0
-sDISABLE_EXCEPTION_CATCHING=0
-sEXPORT_NAME=createGraphModule
-sEXPORTED_RUNTIME_METHODS=stringToUTF8,HEAPU8
-sENVIRONMENT=web
-sMODULARIZE=1
-sEXPORT_ES6=1
)
export RUSTFLAGS="-C link-arg=-sEXPORTED_FUNCTIONS=@${_SCRIPT_DIR}/exports.txt -C link-arg=-sEXPORT_ALL=0"
# Mode-specific flags
if [[ "$BUILD_MODE" == "release" ]]; then
export EMCC_CFLAGS="-Os ${EMCC_COMMON_FLAGS[*]}"
CARGO_PARAMS=(--release "${@:2}")
else
export EMCC_CFLAGS="-g -sVERBOSE=1 -sMALLOC=$EM_MALLOC ${EMCC_COMMON_FLAGS[*]}"
CARGO_PARAMS=("${@:2}")
fi
export CARGO_PARAMS
# --------------------
# Tasks
# --------------------
clean() {
cargo clean
}
setup() {
:
}
build() {
cargo build "${CARGO_PARAMS[@]}"
}
copy_artifacts() {
local dest=$1
local base="target/$CARGO_BUILD_TARGET/$BUILD_MODE"
mkdir -p "$dest"
cp "$base/graph_wasm.js" "$dest/$BUILD_NAME.js"
cp "$base/graph_wasm.wasm" "$dest/$BUILD_NAME.wasm"
sed -i "s/graph_wasm.wasm/$BUILD_NAME.wasm?version=$CURRENT_VERSION/g" \
"$dest/$BUILD_NAME.js"
}
copy_shared_artifact() {
:
}