summaryrefslogtreecommitdiffstats
path: root/Modules/Platform/Darwin-Initialize.cmake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-09-28 20:47:36 (GMT)
committerBrad King <brad.king@kitware.com>2020-09-30 15:58:44 (GMT)
commitb6c60f14b6df53d8cb6fe442d801fdae50ddf287 (patch)
treec90ce25ec8c6e5fb66c514869474b465aa6bfa04 /Modules/Platform/Darwin-Initialize.cmake
parent383e81aa60312433d25d68ab0ef4991aa3b869c1 (diff)
downloadCMake-b6c60f14b6df53d8cb6fe442d801fdae50ddf287.zip
CMake-b6c60f14b6df53d8cb6fe442d801fdae50ddf287.tar.gz
CMake-b6c60f14b6df53d8cb6fe442d801fdae50ddf287.tar.bz2
macOS: Default to arm64 architecture on Apple Silicon hosts
Detect `arm64` hardware using a method that pierces Rosetta. If `CMAKE_OSX_ARCHITECTURES` is not set, pass explicit flags to the toolchain to use `arm64` instead of letting the toolchain pick. Fixes: #20989
Diffstat (limited to 'Modules/Platform/Darwin-Initialize.cmake')
-rw-r--r--Modules/Platform/Darwin-Initialize.cmake11
1 files changed, 11 insertions, 0 deletions
diff --git a/Modules/Platform/Darwin-Initialize.cmake b/Modules/Platform/Darwin-Initialize.cmake
index d087412..15e6123 100644
--- a/Modules/Platform/Darwin-Initialize.cmake
+++ b/Modules/Platform/Darwin-Initialize.cmake
@@ -20,6 +20,17 @@ execute_process(COMMAND sw_vers -productVersion
set(CMAKE_OSX_ARCHITECTURES "$ENV{CMAKE_OSX_ARCHITECTURES}" CACHE STRING
"Build architectures for OSX")
+if(NOT CMAKE_CROSSCOMPILING AND
+ CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND
+ CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" AND
+ CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
+ # When building on Apple Silicon (arm64), we need to explicitly specify
+ # the architecture to the toolchain since it will otherwise guess the
+ # architecture based on that of the build system tool.
+ # Set an *internal variable* to tell the generators to do this.
+ set(_CMAKE_APPLE_ARCHS_DEFAULT "arm64")
+endif()
+
# macOS, iOS, tvOS, and watchOS should lookup compilers from
# Platform/Apple-${CMAKE_CXX_COMPILER_ID}-<LANG>
set(CMAKE_EFFECTIVE_SYSTEM_NAME "Apple")