76 lines
3.3 KiB
Markdown
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`
|