2.0 KiB
2.0 KiB
Component Targets
Status: build and packaging roadmap.
This note preserves the useful component-target split direction without making it a v0.4 release blocker.
Product Model
The monorepo should remain one repository and one release pipeline, while exposing consumable CMake targets:
datoviz::core:common,ds,fileio,math,thread;datoviz::vk:vk,vklite;datoviz::canvas:input,window,stream,video,canvas;datoviz::drp2: portable DRP2 protocol, streams, validation, and runtime client API;datoviz::webgpu: planned WebGPU runtime;datoviz::scene: high-level scene API built on DRP2/runtime contracts;datoviz::datoviz: aggregate convenience target.
Dependency Rules
corehas no graphics/runtime dependencies.vkdepends oncore, not oncanvas.canvasdepends oncoreandvk.drp2depends oncore; public headers expose no Vulkan, canvas, window, or platform types.webgpudepends ondrp2and optionally integrates with canvas through adapters.scenedepends on DRP2/runtime contracts, not raw backend internals.- WASM builds include portable
drp2andscene, excludingvkand nativecanvas.
Remaining Work
Completed baseline: layered targets, exports, build toggles, component runners, and the aggregate target exist.
Open follow-up:
- CI profiles for core-only, vk-only, canvas-stack, aggregate, and future wasm;
- out-of-tree package-consumer CTest/CI smokes for component imports;
- component-owned installed header sets;
- public-header probes for accidental transitive dependencies;
- reverse-dependency lint checks;
- README/build docs showing component-first consumption.
Guardrails
- Keep the aggregate target available.
- Add package-consumer smokes before tightening install ownership.
- Do not use packaging cleanup to reshuffle source modules without a behavior reason.
- Do not let DRP2 or scene public headers leak backend-native types.