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

76 lines
3.3 KiB
Markdown

# 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:
```text
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:
```text
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`