Skip to content
  • Brad King's avatar
    macOS: Offer control over host architecture on Apple Silicon hosts · 5f882f6c
    Brad King authored
    Since commit b6c60f14 (macOS: Default to arm64 architecture on Apple
    Silicon hosts, 2020-09-28, v3.19.0-rc1~63^2) 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
    5f882f6c