ci: test cross compiled natives on native runners - #267
Merged
devopvoid merged 6 commits intoSep 6, 2026
Conversation
The linux_arm and linux_arm64 lanes skip their tests, because the natives cannot run on the x86_64 build host. Until now, no CI run loaded those natives. The two lanes now upload the classifier jar that they produced. A test job on an arm64 runner downloads that exact jar, installs it into the local repository, and runs the test suite of the webrtc module against it. The 32-bit lane uses a Liberica armv7 JDK and the armhf runtime libraries that the natives require. The composite action is generic, so a further cross compiled platform only needs a matrix entry.
Signed-off-by: Joshua Castle <[email protected]>
The natives now open libpulse at runtime, so the test runners do not install libpulse. A test lane that passes on a host without PulseAudio proves that the natives load on minimal systems.
The Wayland and PipeWire desktop capture in 0.16.0 links gio, gbm and libdrm directly and added Xext, Xdamage and Xtst to the X11 set. The natives need those libraries at load time, so the test runners install them, in the armhf variants for the 32-bit lane.
This was referenced Sep 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
linux_armandlinux_arm64lanes cross-compile on x86_64 runners and skip their tests, since the binaries can't run on the build host. That means no CI has ever actually loaded those natives. This PR runs them on native ARM runners, and along the way makes the Linux natives load on hosts without PulseAudio.The two lanes now upload the classifier jar they built as a workflow artifact. A
test-nativesjob downloads that exact jar onto anubuntu-22.04-armrunner, installs it into the local repository, and runs thewebrtcmodule's test suite against it with the platform's profile. What gets tested is the artifact a release would publish, not a rebuild. The arm64 entry uses Temurin; the 32-bit entry runs on the same arm64 runner with a Liberica armv7 JDK. Both entries install the runtime libraries the natives link against, the 32-bit one their armhf variants. The composite action is generic, so adding another cross-compiled platform is one matrix entry and one upload step.The Linux natives linked
libpulseat link time, so they failed to load on any host without it, which includes most headless servers and containers. This PR includes three commits by Joshua Castle (Kas-tle), who maintains a downstream fork of this library, kept under his authorship (one trimmed to its header change, since the rest of that commit was fork-specific CI): they openlibpulseat runtime and bind the symbols withdlsym. The library now loads without PulseAudio; a host that lacks it gets a Java exception only when it enumerates audio devices, which matches the behavior on a host without a running PulseAudio server. The test runners deliberately don't install PulseAudio, so the lanes verify this on every run. The other link-time dependencies stay as they are:libudevandlibdbusfrom this library, and the X11, GLib, GBM and libdrm set that libwebrtc's desktop capturers reference directly since 0.16.0.Validation on my fork: this run. Both native lanes ran the full 122-test suite with zero failures and no
libpulseon the runner, the natives built in that run no longer listlibpulse.so.0in their dynamic dependencies, and all existing platforms built as before. The run also carries #266 and a Windows ARM64 test lane built the same way, plus a small test timeout change I'll submit separately, which is why it shows ten jobs.