Weeks 10-12: controls upstream, packaging, and three platforms
Modeling GlobalInterface
cyber_range was drawing into a mosaic cell, which means a slider was eating a
plot slot. There was no concept of “above the grid” in Superluminal, so I added
one: Superluminal::GlobalInterface(), a full-width panel whose height is
measured and reserved so it never overlaps the mosaic.
CyberEther #289, still open.
The first version worked and was still wrong. It did the ImGui window management
on the gr-cyberether side and handed a height back to CyberEther the
responsibility on the wrong side of the boundary, and not how CyberEther already
handles Type::Interface. Rewrote it so Superluminal owns the window and the
caller only supplies widgets. Our call site went from about twenty lines of ImGui
setup to a callback body, and the upstream diff got small enough to actually
review.
Windows
Five CI runs, five failures, every one a different cause:
- Git-for-Windows’
link.exeshadowing MSVC’s - the Vulkan SDK installed, but not on
INCLUDE PKG_CONFIG_PATHjoined with a Unix:on a platform where paths holdD:\pkgconftreating backslashes as escape charactersconda activatesilently overwritingPKG_CONFIG_PATHat the start of every step
None of these are findable by reading. It passes now and publishes an archive.
Installing it
The archives were a prefix tree with no instructions, which is not an install.
Now each one carries install.sh: it finds your GNU Radio, checks that the
bundled Python binding matches the Python your GNU Radio actually runs, installs,
verifies, and can uninstall from a manifest.
Where this leaves the repo
- v0.9.1, with archives for Linux, macOS and Windows.
- Two upstream PRs, one merged, one open.
- A dependency pin that means what it says.
Next: the final work product.
Repo: gr-cyberether — main
Mentors: Luigi Cruz (CyberEther),
Håkon Vågsether (GNU Radio).