From 1ed3a8935a48846f239a8af0f44bd17c9b16fdfb Mon Sep 17 00:00:00 2001 From: Eric Kilmer Date: Wed, 10 Aug 2022 14:22:01 -0400 Subject: [PATCH] [vcpkg] Fix cross compiling macOS (#26240) This follows the pattern in the Windows toolchain with respect to setting VCPKG_CMAKE_SYSTEM_VERSION and also how arm64 macOS can execute x86_64 through Rosetta. --- scripts/toolchains/osx.cmake | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/scripts/toolchains/osx.cmake b/scripts/toolchains/osx.cmake index efad6c5fedaca8..56a32b669ca68e 100644 --- a/scripts/toolchains/osx.cmake +++ b/scripts/toolchains/osx.cmake @@ -1,11 +1,6 @@ if(NOT _VCPKG_OSX_TOOLCHAIN) set(_VCPKG_OSX_TOOLCHAIN 1) -if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") - set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "") - set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}" CACHE STRING "") -else() - set(CMAKE_SYSTEM_VERSION "17.0.0" CACHE STRING "") -endif() + set(CMAKE_SYSTEM_NAME Darwin CACHE STRING "") set(CMAKE_MACOSX_RPATH ON CACHE BOOL "") @@ -22,6 +17,23 @@ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR) endif() endif() +if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION) + set(CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}" CACHE STRING "" FORCE) +endif() + +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + if(CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR) + set(CMAKE_CROSSCOMPILING OFF CACHE STRING "") + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64") + # arm64 macOS can run x64 binaries + set(CMAKE_CROSSCOMPILING OFF CACHE STRING "") + endif() + + if(NOT DEFINED CMAKE_SYSTEM_VERSION) + set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}" CACHE STRING "") + endif() +endif() + get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) if(NOT _CMAKE_IN_TRY_COMPILE) string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")