Skip to content

ci: assemble the non-driver component set on macOS (arm64) - #43

Merged
rxdu merged 2 commits into
mainfrom
build/macos-support
Sep 8, 2026
Merged

rxdu merged 2 commits into
mainfrom
build/macos-support

Conversation

@rxdu

@rxdu rxdu commented Sep 6, 2026

Copy link
Copy Markdown
Owner

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_DIR is passed explicitly because its default resolves against CMAKE_SOURCE_DIR, which under add_subdirectory is 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.

⚠️ Merge order — this lane goes green last

The submodule pointers are deliberately not bumped in this PR. It only turns green once each component's build/macos-support branch is merged:

# PR Notes
1 rxdu/xmBase#30 root of the set — merge first
2 rxdu/xmTelemetry#2 re-pin third_party/xmBase after (1)
2 rxdu/xmNavigation#82devel re-pin third_party/xmBase after (1)
2 rxdu/quickviz#34 independent
2 rxdu/xmMessaging#8 independent
2 rxdu/xmSimulator#3 independent
3 this PR bump submodule pointers, then merge

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.md on this branch's working tree (not committed).

@rxdu
rxdu force-pushed the build/macos-support branch from f6832a5 to cf89b5b Compare September 6, 2026 14:50
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
rxdu force-pushed the build/macos-support branch from cf89b5b to 775949d Compare September 6, 2026 15:00
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
@rxdu
rxdu merged commit c5ed679 into main Sep 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant