Enable RADE in Windows CI and official installer builds#2324
Enable RADE in Windows CI and official installer builds#2324ten9876 merged 1 commit intoten9876:mainfrom
Conversation
The official Windows installer and CI check-windows job were explicitly passing -DENABLE_RADE=OFF at configure time. ENABLE_RADE defaults to ON in CMakeLists.txt, so local builds have always had RADE; only the packaged artifacts were silently missing it. The vendored build path (third_party/radae + third_party/opus-rade) is already used by the Linux AppImage workflow and validated by local MSVC builds. No source changes are required — the CMake ExternalProject in third_party/radae/cmake/BuildOpus.cmake has a complete WIN32 path that builds a RADE-capable static Opus (OPUS_DRED=ON, OPUS_OSCE=ON) using the tarball vendored at third_party/opus-rade/opus-rade-prepared.tar.gz. Changes: - Remove -DENABLE_RADE=OFF from windows-installer.yml configure step - Remove -DENABLE_RADE=OFF from ci.yml check-windows configure step - Add explicit "Build Opus (RADE dependency)" step before the main build in both workflows, mirroring the AppImage workflow pattern The explicit build_opus step is not strictly required (BUILD_BYPRODUCTS + add_dependencies correctly chain ExternalProject into the Ninja graph), but it provides clear CI failure attribution if the Opus build fails and eliminates any Ninja parallel-build ordering edge cases with IMPORTED targets across CMake versions. The RADE Opus is built as a static library and linked directly into AetherSDR.exe. No new DLLs are added to the deploy or packaging steps. The existing setup-opus.ps1 step (generic Opus for SmartLink audio) is harmless to leave in place — when RADE is enabled, CMakeLists.txt routes all Opus linkage through the vendored RADE build instead. Fixes ten9876#2207 Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
There was a problem hiding this comment.
Thanks for the careful writeup, @NF0T — this is a model bug report-and-fix.
I verified the claims:
third_party/radae/cmake/BuildOpus.cmakelines 46-72 already implement the Windows path (MSVCopus.lib/ MinGWlibopus.aresolution,OPUS_DRED=ON,OPUS_OSCE=ON).third_party/opus-rade/opus-rade-prepared.tar.gzis vendored.appimage.ymlline 79-80 uses the identicalBuild Opus (RADE dependency)step, so the new step is consistent with the established pattern.- The two workflow diffs match the PR description exactly — no scope creep, no source-code changes.
A couple of small observations, none blocking:
-
setup-opus.ps1becomes dead weight in the installer workflow. Once RADE is on,CMakeLists.txtroutes Opus linkage through the vendored RADE build, so the SmartLink prebuilt is unused. You acknowledge this in the PR description ("unused but harmless") and I agree it's safer to leave it in place for now in case someone disables RADE locally — just worth a follow-up cleanup once this has soaked. -
CI runtime hit. The 2–4 min penalty is real because
CMAKE_C_COMPILER_LAUNCHER=sccachedoesn't propagate into the ExternalProject subprocess. Forwarding it viaOPUS_CMAKE_ARGSinBuildOpus.cmakewould fix it for both Windows CI and the AppImage workflow, but that's clearly a follow-up — out of scope here. -
Defensive
build_opusstep rationale is sound. ExternalProject + IMPORTED + Ninja parallelism has historically been fragile across CMake versions; making the failure mode obvious in CI logs is worth one extra step name.
Looks good to me.
|
Claude here on Jeremy's behalf — merged via admin squash. Thanks for the careful root-cause writeup and for matching the AppImage workflow pattern exactly; that made review easy. The Windows installer should pick up RADE on the next release tag. 73, Jeremy KK7GWY & Claude (AI dev partner) |
Summary
Fixes #2207 — RADE digital voice mode is absent from the official Windows installer because both the installer workflow and the Windows CI job were explicitly passing
-DENABLE_RADE=OFFat CMake configure time. Local builds work becauseENABLE_RADEdefaults toONinCMakeLists.txt; only CI-produced artifacts were silently missing the feature.Root Cause
Both workflow files opted out of RADE:
This is a packaging decision, not a source-code limitation. The build infrastructure to support RADE on Windows already exists and is correct:
third_party/radae/cmake/BuildOpus.cmakehas a completeWIN32branch that builds a RADE-capable static Opus (-DOPUS_DRED=ON -DOPUS_OSCE=ON) via CMakeExternalProjectthird_party/opus-rade/opus-rade-prepared.tar.gzis vendored in the repositoryappimage.yml) already ships with RADE enabled and uses an identicalBuild Opusstep patternChanges
Two workflow files, no source changes:
.github/workflows/windows-installer.yml-DENABLE_RADE=OFF; addBuild Opus (RADE dependency)step.github/workflows/ci.yml-DENABLE_RADE=OFFfromcheck-windowsjob; addBuild Opus (RADE dependency)stepWhy a Separate
build_opusStep?BuildOpus.cmakecorrectly declaresBUILD_BYPRODUCTSandadd_dependencies(opus build_opus), so the Ninja dependency graph would handle ordering automatically. The explicit step is kept for two defensive reasons (matching the AppImage workflow's established pattern):Packaging Impact
BUILD_SHARED_LIBS=OFF→ statically linked intoAetherSDR.exerade_enc_data.c/rade_dec_data.c— no external model files to bundlesetup-opus.ps1(generic Opus for SmartLink compressed audio) remains in place; whenRADE_FOUND=TRUE,CMakeLists.txtroutes all Opus linkage through the vendored RADE build, so the prebuilt generic Opus is unused but harmlessAetherSDR.exewill be larger (~8–12 MB, matching the AppImage delta) due to compiled-in weightsKnown CI Impact
CMAKE_C_COMPILER_LAUNCHER=sccacheis not forwarded into the ExternalProject subprocess, so the Opus build will not benefit from the sccache cache. Expect the Windows CI job to run approximately 2–4 minutes longer than before. This is the same situation as the AppImage workflow and is not a blocker. A follow-onactions/cachestep keyed on the tarball hash could eliminate the cold-build penalty if it becomes a concern.Testing
ENABLE_RADE=ONconfirms the feature works on Windows🤖 Generated with Claude Code