Skip to content

macOS: Offer control over host architecture on Apple Silicon hosts

Brad King requested to merge brad.king/cmake:apple-silicon-host-arch into master

Since !5291 (merged) we use sysctl to detect that we are running on Apple Silicon in a way that pierces Rosetta. This always sets CMAKE_HOST_SYSTEM_PROCESSOR to be arm64 on such hosts. However, macOS offers strong support for running processes under an emulated x86_64 architecture.

Teach CMake to select either arm64 or x86_64 as the host architecture on Apple Silicon based on the architecture of its own process. When CMake is built as a universal binary, macOS will select whichever slice (architecture) is appropriate under the user's shell, and CMAKE_HOST_SYSTEM_PROCESSOR will match.

Also offer a CMAKE_APPLE_SILICON_PROCESSOR variable and environment variable to provide users with explicit control over the host architecture selection regardless of CMake's own architecture.

Finally, if CMAKE_OSX_ARCHITECTURES is not set, pass explicit flags to the toolchain to use selected host architecture instead of letting the toolchain pick.

Fixes: #21554 (closed)
Backport: release

Merge request reports