#!/bin/bash # Rebuild occt-import-js 0.0.23 with a 4 GiB WebAssembly heap. # # The only change from upstream is one link flag, -sMAXIMUM_MEMORY=4GB (see # memory.patch). Upstream's toolchain is pinned: Emscripten 3.1.69 and the # OpenCASCADE commit the 0.0.23 tag records as its submodule. That submodule's # host, git.dev.opencascade.org, no longer resolves, so the same commit is # fetched from the official GitHub mirror. # # Usage: ./build.sh set -euo pipefail HERE=$(cd "$(dirname "$0")" && pwd) WORK=${1:?usage: build.sh } mkdir -p "$WORK" && cd "$WORK" [ -d venv ] || python3 -m venv venv ./venv/bin/pip -q install cmake==3.30.5 ninja==1.11.1.1 export PATH="$PWD/venv/bin:$PATH" [ -d emsdk ] || git clone -q https://github.com/emscripten-core/emsdk.git (cd emsdk && ./emsdk install 3.1.69 >/dev/null && ./emsdk activate 3.1.69 >/dev/null) source emsdk/emsdk_env.sh >/dev/null [ -d occt-import-js ] || git clone -q https://github.com/kovacsv/occt-import-js.git cd occt-import-js git checkout -q 0.0.23 PIN=$(git ls-tree HEAD occt | awk '{print $3}') if [ ! -f occt/CMakeLists.txt ]; then rm -rf occt && git init -q occt git -C occt fetch -q --depth 1 https://github.com/Open-Cascade-SAS/OCCT.git "$PIN" git -C occt checkout -q FETCH_HEAD fi test "$(git -C occt rev-parse HEAD)" = "$PIN" git apply --check "$HERE/memory.patch" 2>/dev/null && git apply "$HERE/memory.patch" grep -q 'MAXIMUM_MEMORY=4GB' CMakeLists.txt emcmake cmake -B build/wasm -G Ninja -DEMSCRIPTEN=1 -DCMAKE_BUILD_TYPE=Release . cmake --build build/wasm -j "$(getconf _NPROCESSORS_ONLN)" mkdir -p "$HERE/lib" cp build/wasm/Release/occt-import-js.js build/wasm/Release/occt-import-js.wasm "$HERE/lib/" cp occt/LICENSE_LGPL_21.txt "$HERE/lib/license.occt.txt" cp LICENSE.md "$HERE/lib/license.occt-import-js.txt" shasum -a 256 "$HERE/lib/occt-import-js.wasm"