Files
FreeCADWasmDev/docs/web-dependency-boundary.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

3.3 KiB

FreeCAD Web Dependency Boundary

Scope

This report records the FW-P0-005 probes against the locked dependency sources and the current Emscripten toolchain. A successful dependency probe does not mean that the FreeCADBase or FreeCADApp targets are WebAssembly complete.

Dependency Locked source Probe result Evidence
QtCore / QtXml Qt 5.15.13 Configure and wasm static archive build passed build-web/qt-probe/lib/libQt5Core.a, build-web/qt-probe/lib/libQt5Xml.a
CPython Python 3.12.3 Cross configure passed for wasm32-unknown-emscripten build-web/python-probe/Makefile, build-web/python-probe/pyconfig.h
PyCXX PyCXX 7.1.11 Four C/C++ bridge sources compiled to wasm objects build-web/pycxx-probe/*.o

Reproduction

Qt was configured with the checked-in wasm-emscripten mkspec and then only the Core/XML targets were built:

FreeCAD/FreeCADBaseLib/sources/src/Qt-5.15.13/qtbase/configure \
  -xplatform wasm-emscripten -opensource -confirm-license -release -static \
  -no-feature-thread -nomake examples -nomake tests \
  -prefix FreeCAD/freecad-source/build-web/qt-install
make -C FreeCAD/freecad-source/build-web/qt-probe/src --jobs=8 sub-xml

The configure summary reports that Qt 5.15.13 recommends Emscripten 1.39.8, while this workspace uses Emscripten 3.1.6. The mismatch is a compatibility warning, not a hidden exact-compatibility claim. file reports representative objects from both archives as WebAssembly MVP modules.

CPython was configured using its checked-in wasm build instructions:

CONFIG_SITE=FreeCAD/FreeCADBaseLib/sources/src/Python-3.12.3/Tools/wasm/config.site-wasm32-emscripten \
  emconfigure FreeCAD/FreeCADBaseLib/sources/src/Python-3.12.3/configure -C \
  --host=wasm32-unknown-emscripten --build=x86_64-pc-linux-gnu \
  --with-emscripten-target=browser --with-build-python=/usr/bin/python3.12 \
  --without-ensurepip

The generated Makefile records MACHDEP=emscripten, SOABI=cpython-312-wasm32-emscripten, and PY_ENABLE_SHARED=0. The CPython runtime itself has not yet been compiled; a native build-Python and a later runtime build remain required.

PyCXX 7.1.11 sources cxx_extensions.cxx, cxxsupport.cxx, IndirectPythonInterface.cxx, and cxx_exceptions.cxx compile cleanly with em++ against the generated CPython headers. file confirms all four objects are WebAssembly modules.

Blocking boundary

The current FreeCAD CMake still calls find_package(Python3 COMPONENTS Interpreter Development REQUIRED) and find_package(Qt5 ... REQUIRED) for the FreeCADBase/FreeCADApp graph. The Web configuration currently has no installed Emscripten Python development package or Qt CMake package wired into those lookups. The first full-core configure is also stopped earlier by the missing yaml-cpp CMake package, as recorded in freecad-web-core-configure.log.

Consequently, this task establishes usable Qt/Python/PyCXX source boundaries and evidence, but does not promote FreeCADBase, FreeCADApp, Document, or Python integration to exact.

Logs

  • FreeCAD/docs/qt-web-configure-probe.log
  • FreeCAD/docs/qt-web-qmake-probe.log
  • FreeCAD/docs/qt-core-xml-web-build-probe.log
  • FreeCAD/docs/python-web-configure-probe.log
  • FreeCAD/docs/pycxx-web-compile-probe.log
  • FreeCAD/docs/freecad-web-core-configure.log