Skip to content

Build macOS wheels, use Python 3.10-3.14 everywhere, fix dqrobotics resolution - #8

Merged
mmmarinho merged 2 commits into
mainfrom
macos-and-python-versions
Sep 30, 2026
Merged

mmmarinho merged 2 commits into
mainfrom
macos-and-python-versions

Conversation

@mmmarinho

Copy link
Copy Markdown
Contributor

Summary

  • macOS wheels: macos-latest (arm64) joins the build matrix. Eigen comes from Homebrew; dqrobotics is built from source into the runner's temporary directory; delocate bundles libdqrobotics.dylib and tags the wheel for macOS 14.0 (MACOSX_DEPLOYMENT_TARGET).
  • Same Python versions everywhere: 3.10–3.14 on Linux x86_64/aarch64, macOS arm64 and Windows — the versions dqrobotics publishes wheels for.
  • dqrobotics resolution: dqrobotics>=20.4.0 could not be resolved. Only dqrobotics' pre-releases have wheels for Python ≥ 3.10, and pip does not choose pre-releases for that specifier (No matching distribution found for dqrobotics>=20.4.0). It is now dqrobotics>=26.4.0a7.
  • CMake: the dqrobotics headers include <eigen3/Eigen/Dense>, which needs Eigen's include prefix on the search path (true on Linux and Windows, not with Homebrew). Only Eigen is exposed, through an include directory in the build tree, so the rest of /opt/homebrew/include (e.g. a Homebrew pybind11) cannot shadow the submodules.
  • Smoke test: every wheel is installed in a clean environment and uses SerialManipulatorSimulatorFriendly. It installs with --no-deps, since only papers.icra2019 needs marinholab-solvers-qpoases, whose wheels do not yet cover every platform and Python version.
  • README / pyproject: PyPI installation and platforms, the macOS build from source, DQ([1]) in the modeling example (the current dqrobotics rejects DQ(1)), classifiers.

Test plan

  • macOS arm64, Python 3.14, Homebrew Eigen 5.0.1, dqrobotics/cpp master: the wheel builds, delocates to macosx_14_0_arm64, installs in a clean venv; SerialManipulatorSimulatorFriendly, Clock and the examples run.
  • Ubuntu Noble: docker compose run marinholab_sas_core passes all checks.
  • This PR's CI: the 20 platform × Python jobs.

🤖 Generated with Claude Code

mmmarinho and others added 2 commits September 30, 2026 20:14
…esolution

- publish.yml: add macos-latest (arm64) to the matrix and build every
  platform for Python 3.10-3.14, the versions dqrobotics publishes wheels
  for. On macOS, Eigen comes from Homebrew and dqrobotics is built from
  source into the runner's temporary directory; delocate bundles
  libdqrobotics.dylib into the wheel and tags it for macOS 14.0
  (MACOSX_DEPLOYMENT_TARGET). A smoke test installs each wheel in a clean
  environment and uses SerialManipulatorSimulatorFriendly.
- CMakeLists.txt: the dqrobotics headers include <eigen3/Eigen/Dense>,
  which needs Eigen's include prefix on the search path; it is on Linux
  and Windows but not on macOS (Homebrew), so expose only Eigen through an
  include directory in the build tree.
- pyproject.toml: require dqrobotics>=26.4.0a7. Only dqrobotics'
  pre-releases have wheels for Python >= 3.10, and with >=20.4.0 pip does
  not choose them (No matching distribution found for dqrobotics>=20.4.0).
  Also Python version and operating system classifiers.
- README: PyPI installation and platforms, the macOS build from source, and
  DQ([1]) in the modeling example (the current dqrobotics rejects DQ(1)).

Tested: on macOS (arm64, Python 3.14, Homebrew Eigen 5.0.1, dqrobotics/cpp
master) the wheel builds, delocates to macosx_14_0_arm64, installs in a
clean environment, and SerialManipulatorSimulatorFriendly, Clock and the
examples run; on Ubuntu Noble, docker compose run marinholab_sas_core
passes all checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
setup-python's python.org builds are universal2, so setuptools tagged the
wheel universal2 while the extension (and the dqrobotics it links) is arm64
only, and delocate-wheel failed: Failed to find any binary with the
required architecture: 'x86_64'. ARCHFLAGS=-arch arm64 passes the
architecture to CMake (setup.py maps it to CMAKE_OSX_ARCHITECTURES) and
_PYTHON_HOST_PLATFORM=macosx-14.0-arm64 tags the wheel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@mmmarinho mmmarinho left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@mmmarinho
mmmarinho merged commit b839da9 into main Sep 30, 2026
19 of 24 checks passed
@mmmarinho
mmmarinho deleted the macos-and-python-versions branch September 30, 2026 19:20
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