macOS: Offer control over host architecture on Apple Silicon hosts
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