daemon: link daedalus-fourier + log substrate availability at startup #13
Reference in New Issue
Block a user
Delete Branch "noether/daemon-link-daedalus-fourier"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First incremental step toward the H.264 daemon-rewrite plan in #11. Makes the daedalus-fourier kernel library available to the daemon process so subsequent patches can substitute its primitives (IDCT 4×4, IDCT 8×8, luma vertical deblock, etc.) for libavcodec's per-MB pixel math.
What this PR does
Nothing functional yet — purely linkage + observability:
daemon/CMakeLists.txt:pkg_check_modules(DAEDALUS_FOURIER REQUIRED daedalus-fourier)+ explicit link ordering. libdaedalus_core.a must precede -lvulkan in the link line (the static archive references vulkan symbols; linker resolves left-to-right). We bypass IMPORTED_TARGET here because pkg-config'sRequires.privatechain leaves CMake's dependency graph reordering the archive after -lvulkan, breaking the static link.daemon/src/main.c:daedalus_ctx_create_no_qpu()at startup, log line,daedalus_ctx_destroy()at exit.no_qpumode skips V3D Vulkan probe — this just proves linkage works without depending on shader-path resolution (separate work;v3d_runnercurrently loads.spvfiles from cwd-relative paths, would need a search path API).Sample journal line:
Verified
Build-test on hertz (Pi 5 dev host) against an installed copy of daedalus-fourier
r35+gd87239d(from marfrit/daedalus-fourier PR #1, just merged). Binary links cleanly,--helpprints,daemoncommand runs through the daedalus-fourier init + then fails opening the chardev (expected on hertz — nodaedalus_v4l2kmod there; on higgs the chardev is present and the existing working path resumes).Dependency
Needs
daedalus-fourier-dev(or equivalent) at build time. marfrit-packages build-deb.sh will need to fetch + build + install daedalus-fourier into a temp prefix before invoking the daemon's cmake — that's a follow-up marfrit-packages PR after this lands.Follow-up patches per #11
daedalus_ctx_create()for the QPU substrate (V3D opportunistic-helper paths, e.g. cycle 8 H.264 deblock).Wire protocol
Unchanged.
DAEDALUS_PROTO_VERSIONstays at 0. No kmod rebuild needed.First incremental step toward H.264 daemon-rewrite (daedalus-v4l2#11): make the daedalus-fourier kernel library available to the daemon process so subsequent patches can substitute its primitives (IDCT 4×4, IDCT 8×8, luma vertical deblock, etc.) for libavcodec's per-MB pixel math. This patch does NOT yet dispatch any kernels. It only: - Adds `pkg_check_modules(DAEDALUS_FOURIER REQUIRED daedalus-fourier)` to the daemon's CMakeLists, with explicit link ordering (libdaedalus_core.a must precede -lvulkan because the static archive references vulkan symbols and the linker resolves left-to-right). We bypass IMPORTED_TARGET because pkg-config's Requires.private chain leaves CMake's dependency graph reordering the archive after -lvulkan, breaking the static link. - Calls daedalus_ctx_create_no_qpu() at daemon startup, logs the substrate-availability line, destroys the context at exit. no_qpu mode skips V3D Vulkan probe — proves linkage works without depending on shader-path resolution (which is a separate piece of work, since v3d_runner currently loads .spv files from cwd-relative paths and consumer would need a search path override). Sample journal line: [2026-05-21 17:59:35.271 INFO] daedalus-fourier: linked, ctx alive (no_qpu mode; has_qpu=0) Build-test verified on hertz (Pi 5 dev host) against an installed copy of daedalus-fourier r35+gd87239d (from marfrit/daedalus-fourier PR #1). Binary links cleanly, --help prints, daemon mode opens chardev (fails predictably on hertz which has no daedalus_v4l2 kmod; on higgs this is the existing working path). Follow-up patches per daedalus-v4l2#11: 1. Instrument the existing libavcodec decode path to count per-frame IDCT blocks / deblock edges / MC tiles so we have a baseline of what work the daemon dispatches for a typical YouTube H.264 stream. 2. Substitute daedalus-fourier kernels one at a time, measuring CPU saved per substitution. 3. Wire shader path resolution into daedalus_ctx_create() for the QPU substrate (V3D opportunistic helper paths). Wire protocol unchanged. DAEDALUS_PROTO_VERSION stays at 0.