Files
Web_FreeCAD_Bitbybit/scripts/build-freecad-naming-bridge-candidate.sh
wangdequan f97eae4153
Some checks failed
real-verification / chrome (push) Has been cancelled
real-verification / freecad-oracle (push) Has been cancelled
real-verification / wasm (push) Has been cancelled
feat: add candidate FreeCAD naming SDK and attachment oracles
Build and verify the candidate-only FreeCAD naming bridge and OCCT worker path, including three-stage StringHasher restoration. Add Datum, ShapeBinder, attachment-mode, and PartDesign structure oracles plus offline SDK build plans and CI boundary checks.
2026-08-13 17:16:07 -04:00

89 lines
4.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SDK_ROOT="${ROOT_DIR}/.cache/toolchains/freecad-naming-sdk"
SOURCE_ROOT="${ROOT_DIR}/.cache/toolchains/freecad-naming-sdk/source-occt8"
BUILD_ROOT="${ROOT_DIR}/.cache/toolchains/freecad-naming-sdk/build-wasm"
OCCT_BUILD="${ROOT_DIR}/.cache/bitbybit/occt-history-build-offline"
EM_CACHE_DIR="${ROOT_DIR}/.cache/toolchains/emscripten-freecad-cache"
DIST_DIR="${ROOT_DIR}/native/freecad-naming-bridge/dist"
BRIDGE_SOURCE="${ROOT_DIR}/native/freecad-naming-bridge/freecad_naming_bridge.cpp"
QT="${ROOT_DIR}/.cache/toolchains/qt6/install-wasm-freecad"
PYTHON="${ROOT_DIR}/.cache/toolchains/python/install-wasm"
ICU="${ROOT_DIR}/.cache/toolchains/icu/install-wasm"
XERCES="${ROOT_DIR}/.cache/toolchains/xerces-c/install-wasm"
BOOST="${ROOT_DIR}/.cache/toolchains/boost/install-wasm"
YAML="${ROOT_DIR}/.cache/toolchains/yaml-cpp/install-wasm"
cd "${ROOT_DIR}"
node scripts/check-freecad-naming-sdk-readiness.mjs >/dev/null
for path in \
"${SDK_ROOT}/lib/libFreeCADBase.a" \
"${SDK_ROOT}/lib/libFreeCADApp.a" \
"${SDK_ROOT}/lib/libPart.a" \
"${PYTHON}/lib/python-deps/libmpdec.a" \
"${PYTHON}/lib/python-deps/libexpat.a" \
"${PYTHON}/lib/python-deps/libHacl_Hash_SHA2.a" \
"${PYTHON}/lib/python-deps/libz.a" \
"${PYTHON}/lib/python-deps/libbz2.a" \
"${PYTHON}/lib/python-deps/libsqlite3-mt.a" \
"${PYTHON}/share/python-wasm-stdlib/lib/python313.zip" \
"${BRIDGE_SOURCE}"; do
[[ -s "${path}" ]] || { echo "Missing isolated bridge input: ${path}" >&2; exit 1; }
done
mkdir -p "${DIST_DIR}"
mapfile -t OCCT_LIBRARIES < <(find "${OCCT_BUILD}/lin32/clang/lib" -maxdepth 1 -type f -name '*.a' | sort)
EM_FROZEN_CACHE=0 EM_CACHE="${EM_CACHE_DIR}" em++ "${BRIDGE_SOURCE}" \
-I"${SOURCE_ROOT}/src" \
-I"${BUILD_ROOT}/src" \
-I"${SOURCE_ROOT}/src/3rdParty/PyCXX" \
-I"${OCCT_BUILD}/include/opencascade" \
-I"${ROOT_DIR}/.cache/occt/occt/src/Deprecated/NCollectionAliases" \
-I"${QT}/include" -I"${QT}/include/QtCore" \
-I"${PYTHON}/include/python3.13" \
-I"${XERCES}/include" -I"${ICU}/include" -I"${YAML}/include" \
-I"${ROOT_DIR}/.cache/offline-sysroot/include" \
-include "${ROOT_DIR}/config/freecad-wasm-sdk-compat.h" \
-D__linux__=1 -DQT_NO_KEYWORDS -DHAVE_CONFIG_H -DPYCXX_6_2_COMPATIBILITY \
-std=c++20 -O1 -fexceptions -pthread --bind \
-Wl,--start-group \
"${SDK_ROOT}/lib/libPart.a" \
"${SDK_ROOT}/lib/libFreeCADApp.a" \
"${SDK_ROOT}/lib/libFreeCADBase.a" \
"${OCCT_LIBRARIES[@]}" \
"${PYTHON}/lib/libpython3.13.a" \
"${PYTHON}/lib/python-deps/libmpdec.a" \
"${PYTHON}/lib/python-deps/libexpat.a" \
"${PYTHON}/lib/python-deps/libHacl_Hash_SHA2.a" \
"${PYTHON}/lib/python-deps/libz.a" \
"${PYTHON}/lib/python-deps/libbz2.a" \
"${PYTHON}/lib/python-deps/libsqlite3-mt.a" \
"${XERCES}/lib/libxerces-c.a" \
"${YAML}/lib/libyaml-cpp.a" \
"${BOOST}/lib/libboost_program_options.a" \
"${BOOST}/lib/libboost_regex.a" \
"${BOOST}/lib/libboost_thread.a" \
"${BOOST}/lib/libboost_date_time.a" \
"${BOOST}/lib/libboost_atomic.a" \
"${ICU}/lib/libicui18n.a" "${ICU}/lib/libicuuc.a" "${ICU}/lib/libicudata.a" \
"${QT}/lib/libQt6Concurrent.a" "${QT}/lib/libQt6Network.a" "${QT}/lib/libQt6Xml.a" \
"${QT}/lib/libQt6Core.a" "${QT}/lib/libQt6BundledPcre2.a" "${QT}/lib/libQt6BundledZLIB.a" \
-Wl,--end-group \
-sMODULARIZE=1 -sEXPORT_ES6=1 -sENVIRONMENT=node \
-sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=268435456 -sMAXIMUM_MEMORY=2147483648 \
-sNO_EXIT_RUNTIME=1 -sPTHREAD_POOL_SIZE=2 \
--preload-file "${PYTHON}/share/python-wasm-stdlib@/usr/local" \
--pre-js "${ROOT_DIR}/native/freecad-naming-bridge/pre.js" \
-o "${DIST_DIR}/freecad-private-naming-bridge.js"
FREECAD_NAMING_BRIDGE_REPORT="${SDK_ROOT}/isolated-bridge-report.json" \
npx tsx native/freecad-naming-bridge/smoke-test.ts
sha256sum \
"${DIST_DIR}/freecad-private-naming-bridge.js" \
"${DIST_DIR}/freecad-private-naming-bridge.wasm" \
"${DIST_DIR}/freecad-private-naming-bridge.data"
[[ ! -e "${ROOT_DIR}/public/native/freecad-naming-bridge" ]] || { echo "Isolated bridge must not be published under public/." >&2; exit 1; }
echo "Isolated bridge evidence: ${SDK_ROOT}/isolated-bridge-report.json"