ci: assemble the non-driver component set on macOS (arm64) - #43
Merged
Merged
Conversation
rxdu
force-pushed
the
build/macos-support
branch
from
September 6, 2026 14:50
f6832a5 to
cf89b5b
Compare
The umbrella's only lane assembles base + driver on Ubuntu. This adds an arm64 macOS assembly of everything that is portable, which is the cross-component integration no single component's CI can catch. xmDriver is excluded on purpose, and permanently: it binds SocketCAN (<linux/can.h>, <linux/serial.h>) and libevdev over /dev/input/event*. Those are kernel interfaces with no macOS equivalent, so supporting them means a driver port, not a build fix. Nothing else depends on xmDriver -- the only references to it in other components' CMake are comments -- so turning it off costs the hardware layer and nothing more. xmTelemetry is omitted for the same reason as the Linux lane: it is private and not checked out in CI. XMSIM_MUJOCO_DIR is passed explicitly because its default resolves against CMAKE_SOURCE_DIR, which under add_subdirectory is the umbrella root rather than the simulator's own -- a pre-existing wrinkle, not a macOS one. The submodule pointers are deliberately NOT bumped here: this lane only goes green once each component's build/macos-support branch is merged. Verified locally on macOS 15 (arm64): the assembly builds clean.
rxdu
force-pushed
the
build/macos-support
branch
from
September 6, 2026 15:00
cf89b5b to
775949d
Compare
Every component's macOS branch has landed, so bring the umbrella's
pointers up to the merged heads. This is what the assemble-macos lane was
waiting on: it failed in fetch_mujoco.sh because the recorded simulator
commit predated the arm64/dmg support, so the script rejected the host
before anything was configured.
base 3f389a06 -> 74c00080 (main)
telemetry 1e0f3082 -> afa0a216 (main)
navigation 282f290a -> 460d5cca (devel)
viewer edeb589d -> 236d7c47 (main)
messaging 93a61185 -> 03482337 (main)
simulator 65b6d838 -> bbf936fd (main)
navigation tracks devel rather than main, per .gitmodules.
Verified on macOS 15 (arm64), both configurations building clean:
- the CI set (driver and telemetry off), which is what the lane runs
- the full set with telemetry on, which CI cannot cover since that
repository is private and is not checked out there
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 umbrella's only lane assembles base + driver on Ubuntu. This adds an arm64 macOS assembly of everything that is portable — the cross-component integration no single component's CI can catch.
What is and is not included
xmDriver is excluded on purpose, and permanently. It binds SocketCAN (
<linux/can.h>,<linux/serial.h>) and libevdev over/dev/input/event*— kernel interfaces with no macOS equivalent, so supporting them means a driver port, not a build fix. Nothing else depends on it: the only references to xmDriver in other components' CMake are comments, so turning it off costs the hardware layer and nothing more.xmTelemetry is omitted for the same reason as the Linux lane — it is private and not checked out in CI.
Everything else assembles: xmBase, xmNavigation, xmViewer, xmMessaging, xmSimulator.
XMSIM_MUJOCO_DIRis passed explicitly because its default resolves againstCMAKE_SOURCE_DIR, which underadd_subdirectoryis this umbrella rather than the simulator's own root — a pre-existing wrinkle, not a macOS one.Verification
macOS 15 (arm64): the assembly builds clean.
The submodule pointers are deliberately not bumped in this PR. It only turns green once each component's
build/macos-supportbranch is merged:third_party/xmBaseafter (1)develthird_party/xmBaseafter (1)Context
Across the set, several of the fixes are latent bugs Linux masked rather than macOS-only work — Boost and glm were never referenced in CMake and resolved implicitly from
/usr/include; glad's<KHR/khrplatform.h>only resolved because Mesa happens to install one; a non-virtual destructor on a polymorphic base went unreported by GCC; and the PCL loader accepted malformed files. Those improve the Linux build too.Full status:
out/MACOS-COMPAT.mdon this branch's working tree (not committed).