Maintainers will ask what the Design tab costs before they will look at the diff, so measure it rather than assert it. The headline correction: the OCCT delta is THREE toolkits, not two. The comment in deps/OCCT/OCCT.cmake claimed "TKFillet + TKOffset (3.77 MiB, Windows only)". Walking OCCT's own adm/MODULES and each toolkit's EXTERNLIB shows ModelingAlgorithms holds twelve toolkits, that eight of them are built either way because DataExchange (the STEP path upstream already ships) depends on them, and that the true delta is TKFeat, TKFillet, TKOffset and TKXMesh — of which TKXMesh is never produced. So three archives are built: 7.40, 5.38 and 4.42 MiB. TKFeat is the interesting one. Nothing in the Design tab references it and it is absent from the TKFillet/TKOffset dependency closure, so it is built for nothing — OCCT's module flag is all-or-nothing per module. On static-link platforms that is build time and zero shipped bytes. Two numbers are deliberately absent, marked as absent, and not approximated: the Windows DLL delta needs a Windows build (snaporca-gix), and a clean-build time delta needs the deps prefix built twice on one machine. The old 3.77 MiB figure is withdrawn rather than reused — it covered two of the three toolkits. Also recorded: the vendored solver is 9,339 lines under GPLv3 with its LICENSE preserved, which combines into this AGPLv3 fork without difficulty (AGPLv3 §13), and it is live code driving every sketch constraint — not a carried corpse. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5.2 KiB
Dependency weight of the Design/CAD subsystem
What the Design tab actually costs a maintainer who merges it. Written to be checkable: every number below is reproducible with the command that produced it, and the places where a number is still missing say so instead of guessing.
Measured on Linux x86_64, OCCT V7_6_0, in the snaporca-deps build image.
Summary
| Cost | |
|---|---|
| New third-party dependencies | none |
| OCCT build flag | BUILD_MODULE_ModelingAlgorithms=ON |
| Extra OCCT toolkits built | 3 (TKFillet, TKOffset, TKFeat) |
| Extra OCCT toolkits linked | 2 (TKFillet, TKOffset) |
| Vendored code | src/libslic3r/slvs, 9,339 lines, 380 KiB, GPLv3 |
| Own object code | 6.79 MiB unstripped .o (7.13 MiB with the solver) |
OCCT is already an upstream dependency — Orca uses it for STEP import. The Design tab does not add a library; it turns on one more OCCT module.
The OCCT module flag
deps/OCCT/OCCT.cmake gates the module on SLIC3R_CAD:
-DBUILD_MODULE_ModelingAlgorithms=${SLIC3R_CAD} # was hard-coded OFF
With SLIC3R_CAD=OFF the deps prefix matches upstream exactly.
ModelingAlgorithms contains 12 toolkits, but most were already being built, because
DataExchange — the STEP path upstream already ships — depends on them. The honest delta is
only the toolkits that DataExchange's dependency closure does not reach:
ModelingAlgorithms = TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR
TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing
already required by DataExchange: TKBO TKBool TKGeomAlgo TKHLR TKMesh
TKPrim TKShHealing TKTopAlgo
true delta: TKFeat TKFillet TKOffset TKXMesh
Reproduce by walking adm/MODULES and each toolkit's src/<TK>/EXTERNLIB in the OCCT
source tree.
Sizes of the delta toolkits
Static archives in the deps prefix. These are build artifacts, not shipped bytes — a static link pulls in only the objects it references:
| Toolkit | Archive | Referenced by the Design tab? |
|---|---|---|
| TKFillet | 7.40 MiB | yes — BRepFilletAPI |
| TKOffset | 5.38 MiB | yes — BRepOffsetAPI, BRepOffset_ |
| TKFeat | 4.42 MiB | no |
| TKXMesh | — | not produced at all |
TKFeat is worth calling out: nothing in the Design tab references it, and it is absent from
the TKFillet/TKOffset dependency closure, so it is built for nothing. OCCT's module flag
is all-or-nothing per module, which is why it comes along. It costs build time and zero
shipped bytes on any platform that links OCCT statically.
A correction to the record. The comment in deps/OCCT/OCCT.cmake and the earlier
summary both said the delta was "TKFillet + TKOffset — 3.77 MiB, Windows only". The toolkit
list was incomplete: TKFeat is built too. The 3.77 MiB figure covers 2 of the 3 built
toolkits and has not been re-derived here — see the gap below.
What is not measured yet
Two numbers a maintainer may reasonably ask for are not in this document, because producing them honestly needs a build this machine cannot do:
- Windows DLL delta. OCCT builds shared on Windows, so the shipped cost there is real
DLL bytes rather than linker-selected objects. That needs a Windows build to size —
tracked as the cross-platform build proof (
snaporca-gix). - Clean-build time delta. Measuring it means building the deps prefix twice, with the flag ON and OFF, on the same machine. The incremental figures from day-to-day work do not answer the question and are not offered as if they did.
Do not quote a number for either until it has been measured.
Vendored solver
src/libslic3r/slvs — the 2D sketch constraint solver extracted from SolveSpace.
- 19 files: 8
.cpp, 11.h, plusLICENSE - 9,339 lines, 380 KiB of source, 0.34 MiB of object code
- GPLv3,
LICENSEpreserved verbatim in the vendored directory
The fork is AGPLv3. GPLv3 code combines into an AGPLv3 work without difficulty: AGPLv3 §13 provides explicit compatibility in that direction. No licence question to resolve.
It is live code, not a carried corpse — SketchSolver.cpp is its only consumer and drives
every sketch constraint in the Design tab.
Own code
Object sizes from the release build (unstripped, so these include debug information and overstate the shipped contribution):
| Object | Size |
|---|---|
| DesignPanel.o | 2.22 MiB |
| McpControl.o | 1.69 MiB |
| DesignSketchTool.o | 0.88 MiB |
| CadDocument.o | 0.76 MiB |
| SketchEngine.o | 0.40 MiB |
| DesignCanvas.o | 0.37 MiB |
| GeometryEngine.o | 0.32 MiB |
| SketchSolver.o | 0.15 MiB |
| slvs (all objects) | 0.34 MiB |
| total | 7.13 MiB |
For scale, the linked binary is 137.1 MiB.
Reproducing
# toolkit membership and dependency closure
R=<occt-source>
cat $R/adm/MODULES # module -> toolkits
cat $R/src/<TK>/EXTERNLIB # toolkit -> its dependencies
# archive sizes
ls -l <deps-prefix>/lib/libTK{Fillet,Offset,Feat}.a
# what the Design tab actually references
grep -rE 'BRepFilletAPI|BRepOffsetAPI|BRepOffset_|BRepFeat' src/libslic3r/
# vendored solver
wc -l src/libslic3r/slvs/*.cpp src/libslic3r/slvs/**/*.h
head -3 src/libslic3r/slvs/LICENSE