62 lines
2.6 KiB
Bash
Executable File
62 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
FREECAD_SOURCE_DIR="${FREECAD_SOURCE_DIR:-${ROOT_DIR}/.cache/freecad/FreeCAD}"
|
|
QT6_WASM_DIR="${QT6_WASM_DIR:-${ROOT_DIR}/.cache/toolchains/qt6/install-wasm}"
|
|
OFFLINE_INCLUDE_DIR="${OFFLINE_INCLUDE_DIR:-${ROOT_DIR}/.cache/offline-sysroot/include}"
|
|
DIST_DIR="${ROOT_DIR}/native/freecad-naming-probe/dist"
|
|
SHIM_DIR="${ROOT_DIR}/native/freecad-naming-probe/shims"
|
|
FREECAD_COMMIT="0108fd4b4850cc46e625b60e53cea7a7bbe69f8d"
|
|
INDEXED_NAME_SHA256="73e0e60a9d6ee06851252e2071ebdd58698f8f99733903232529b3a194164435"
|
|
MAPPED_NAME_SHA256="90173aba5f331ac9453589833f7e5fc63c5c80a35f1600dbc71211606b1c9dbc"
|
|
|
|
if [[ ! -d "${FREECAD_SOURCE_DIR}/.git" ]] || [[ "$(git -C "${FREECAD_SOURCE_DIR}" rev-parse HEAD)" != "${FREECAD_COMMIT}" ]]; then
|
|
echo "FreeCAD private naming probe requires locked commit ${FREECAD_COMMIT}." >&2
|
|
exit 1
|
|
fi
|
|
printf '%s %s\n' \
|
|
"${INDEXED_NAME_SHA256}" "${FREECAD_SOURCE_DIR}/src/App/IndexedName.cpp" \
|
|
"${MAPPED_NAME_SHA256}" "${FREECAD_SOURCE_DIR}/src/App/MappedName.cpp" | sha256sum -c -
|
|
if [[ "$(emcc --version | sed -n '1s/.* \([0-9][0-9.]*\) .*/\1/p')" != "3.1.69" ]]; then
|
|
echo "FreeCAD private naming probe requires Emscripten 3.1.69." >&2
|
|
exit 1
|
|
fi
|
|
for path in \
|
|
"${QT6_WASM_DIR}/include/QtCore/QByteArray" \
|
|
"${QT6_WASM_DIR}/lib/libQt6Core.a" \
|
|
"${QT6_WASM_DIR}/lib/libQt6BundledPcre2.a" \
|
|
"${QT6_WASM_DIR}/lib/libQt6BundledZLIB.a"; do
|
|
if [[ ! -s "${path}" ]]; then
|
|
echo "Missing Qt6 wasm Core prerequisite: ${path}" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
if [[ ! -s "${OFFLINE_INCLUDE_DIR}/boost/signals2/signal.hpp" ]]; then
|
|
echo "Missing offline Boost headers: ${OFFLINE_INCLUDE_DIR}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "${DIST_DIR}"
|
|
em++ \
|
|
"${ROOT_DIR}/native/freecad-naming-probe/probe.cpp" \
|
|
"${FREECAD_SOURCE_DIR}/src/App/IndexedName.cpp" \
|
|
"${FREECAD_SOURCE_DIR}/src/App/MappedName.cpp" \
|
|
-I"${SHIM_DIR}" \
|
|
-include "${SHIM_DIR}/App/StringHasher.h" \
|
|
-I"${FREECAD_SOURCE_DIR}/src" \
|
|
-I"${QT6_WASM_DIR}/include" \
|
|
-I"${QT6_WASM_DIR}/include/QtCore" \
|
|
-I"${OFFLINE_INCLUDE_DIR}" \
|
|
-std=c++17 -Oz -fexceptions --bind \
|
|
-Wl,--start-group \
|
|
"${QT6_WASM_DIR}/lib/libQt6Core.a" \
|
|
"${QT6_WASM_DIR}/lib/libQt6BundledPcre2.a" \
|
|
"${QT6_WASM_DIR}/lib/libQt6BundledZLIB.a" \
|
|
-Wl,--end-group \
|
|
-sMODULARIZE=1 -sEXPORT_ES6=1 -sENVIRONMENT=web,worker,node \
|
|
-sALLOW_MEMORY_GROWTH=1 -sNO_EXIT_RUNTIME=1 \
|
|
-o "${DIST_DIR}/freecad-private-naming-source-probe.js"
|
|
|
|
sha256sum "${DIST_DIR}/freecad-private-naming-source-probe.js" "${DIST_DIR}/freecad-private-naming-source-probe.wasm"
|