aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/buildsystems/vcpkg.cmake50
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake4
-rw-r--r--scripts/toolchains/ios.cmake54
3 files changed, 106 insertions, 2 deletions
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index 1eebc3b8d..963546e98 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -76,6 +76,37 @@ else()
set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
elseif(_VCPKG_CL MATCHES "bin/cl.exe$" OR _VCPKG_CL MATCHES "x86/cl.exe$")
set(_VCPKG_TARGET_TRIPLET_ARCH x86)
+ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND DEFINED CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ list(LENGTH CMAKE_OSX_ARCHITECTURES arch_count)
+ if(arch_count EQUAL 0)
+ message(WARNING "Unable to determine target architecture. "
+ "Consider providing a value for the CMAKE_OSX_ARCHITECTURES cache variable. "
+ "Continuing without vcpkg.")
+ set(VCPKG_TOOLCHAIN ON)
+ return()
+ else()
+ if(arch_count GREATER 1)
+ message(WARNING "Detected more than one target architecture. Using the first one.")
+ endif()
+ list(GET CMAKE_OSX_ARCHITECTURES 0 target_arch)
+ if(target_arch STREQUAL arm64)
+ set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
+ elseif(target_arch STREQUAL arm64s)
+ set(_VCPKG_TARGET_TRIPLET_ARCH arm64s)
+ elseif(target_arch STREQUAL armv7s)
+ set(_VCPKG_TARGET_TRIPLET_ARCH armv7s)
+ elseif(target_arch STREQUAL armv7)
+ set(_VCPKG_TARGET_TRIPLET_ARCH arm)
+ elseif(target_arch STREQUAL x86_64)
+ set(_VCPKG_TARGET_TRIPLET_ARCH x64)
+ elseif(target_arch STREQUAL i386)
+ set(_VCPKG_TARGET_TRIPLET_ARCH x86)
+ else()
+ message(WARNING "Unable to determine target architecture, continuing without vcpkg.")
+ set(VCPKG_TOOLCHAIN ON)
+ return()
+ endif()
+ endif()
elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(_VCPKG_TARGET_TRIPLET_ARCH x64)
else()
@@ -96,6 +127,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HO
set(_VCPKG_TARGET_TRIPLET_PLAT linux)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin"))
set(_VCPKG_TARGET_TRIPLET_PLAT osx)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(_VCPKG_TARGET_TRIPLET_PLAT ios)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows"))
set(_VCPKG_TARGET_TRIPLET_PLAT windows)
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD"))
@@ -146,6 +179,8 @@ else() #Release build: Put Release paths before Debug paths. Debug Paths are req
)
endif()
+set(VCPKG_CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
+
file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
set(_PROGRAMFILESX86 "PROGRAMFILES(x86)")
file(TO_CMAKE_PATH "$ENV{${_PROGRAMFILESX86}}" _programfiles_x86)
@@ -235,7 +270,15 @@ if(NOT DEFINED VCPKG_OVERRIDE_FIND_PACKAGE_NAME)
set(VCPKG_OVERRIDE_FIND_PACKAGE_NAME find_package)
endif()
macro(${VCPKG_OVERRIDE_FIND_PACKAGE_NAME} name)
+ # Workaround to set the ROOT_PATH until upstream CMake stops overriding
+ # the ROOT_PATH at apple OS initialization phase.
+ # See https://gitlab.kitware.com/cmake/cmake/merge_requests/3273
+ if(CMAKE_SYSTEM_NAME STREQUAL iOS)
+ set(BACKUP_CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
+ list(APPEND CMAKE_FIND_ROOT_PATH ${VCPKG_CMAKE_FIND_ROOT_PATH})
+ endif()
string(TOLOWER "${name}" _vcpkg_lowercase_name)
+
if(EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${_vcpkg_lowercase_name}/vcpkg-cmake-wrapper.cmake")
set(ARGS "${ARGV}")
include(${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${_vcpkg_lowercase_name}/vcpkg-cmake-wrapper.cmake)
@@ -285,6 +328,9 @@ macro(${VCPKG_OVERRIDE_FIND_PACKAGE_NAME} name)
else()
_find_package(${ARGV})
endif()
+ if(CMAKE_SYSTEM_NAME STREQUAL iOS)
+ set(CMAKE_FIND_ROOT_PATH "${BACKUP_CMAKE_FIND_ROOT_PATH}")
+ endif()
endmacro()
set(VCPKG_TOOLCHAIN ON)
@@ -301,13 +347,15 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
file(TO_CMAKE_PATH "${_VCPKG_ROOT_DIR}" _root_dir)
file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/vcpkg.config.cmake"
"set(VCPKG_TARGET_TRIPLET \"${VCPKG_TARGET_TRIPLET}\" CACHE STRING \"\")\n"
+ "set(VCPKG_TARGET_ARCHITECTURE \"${VCPKG_TARGET_ARCHITECTURE}\" CACHE STRING \"\")\n"
"set(VCPKG_APPLOCAL_DEPS \"${VCPKG_APPLOCAL_DEPS}\" CACHE STRING \"\")\n"
"set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE \"${_chainload_file}\" CACHE STRING \"\")\n"
"set(_VCPKG_ROOT_DIR \"${_root_dir}\" CACHE STRING \"\")\n"
)
else()
- list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
VCPKG_TARGET_TRIPLET
+ VCPKG_TARGET_ARCHITECTURE
VCPKG_APPLOCAL_DEPS
VCPKG_CHAINLOAD_TOOLCHAIN_FILE
_VCPKG_ROOT_DIR
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index 9766bd267..ab65a5683 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -202,6 +202,8 @@ function(vcpkg_configure_cmake)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/android.cmake")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/osx.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/ios.cmake")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/freebsd.cmake")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
@@ -243,7 +245,7 @@ function(vcpkg_configure_cmake)
endif()
# Sets configuration variables for macOS builds
- foreach(config_var INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT)
+ foreach(config_var INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT OSX_ARCHITECTURES)
if(DEFINED VCPKG_${config_var})
list(APPEND _csc_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}")
endif()
diff --git a/scripts/toolchains/ios.cmake b/scripts/toolchains/ios.cmake
new file mode 100644
index 000000000..5497117a3
--- /dev/null
+++ b/scripts/toolchains/ios.cmake
@@ -0,0 +1,54 @@
+if(NOT _VCPKG_IOS_TOOLCHAIN)
+ set(_VCPKG_IOS_TOOLCHAIN 1)
+
+ # Set the CMAKE_SYSTEM_NAME for try_compile calls.
+ set(CMAKE_SYSTEM_NAME iOS CACHE STRING "")
+
+ macro(_vcpkg_setup_ios_arch arch)
+ unset(_vcpkg_ios_system_processor)
+ unset(_vcpkg_ios_sysroot)
+ unset(_vcpkg_ios_target_architecture)
+
+ if ("${arch}" STREQUAL "arm64")
+ set(_vcpkg_ios_system_processor "aarch64")
+ set(_vcpkg_ios_target_architecture "arm64")
+ elseif("${arch}" STREQUAL "arm")
+ set(_vcpkg_ios_system_processor "arm")
+ set(_vcpkg_ios_target_architecture "armv7")
+ elseif("${arch}" STREQUAL "x64")
+ set(_vcpkg_ios_sysroot "iphonesimulator")
+ set(_vcpkg_ios_target_architecture "x86_64")
+ elseif("${arch}" STREQUAL "x86")
+ set(_vcpkg_ios_sysroot "iphonesimulator")
+ set(_vcpkg_ios_target_architecture "i386")
+ else()
+ message(FATAL_ERROR
+ "Unknown VCPKG_TARGET_ARCHITECTURE value provided for triplet ${VCPKG_TARGET_TRIPLET}: ${arch}")
+ endif()
+ endmacro()
+
+ _vcpkg_setup_ios_arch("${VCPKG_TARGET_ARCHITECTURE}")
+ if(_vcpkg_ios_system_processor AND NOT CMAKE_SYSTEM_PROCESSOR)
+ set(CMAKE_SYSTEM_PROCESSOR ${_vcpkg_ios_system_processor})
+ endif()
+
+ # If VCPKG_OSX_ARCHITECTURES or VCPKG_OSX_SYSROOT is set in the triplet, they will take priority,
+ # so the following will be no-ops.
+ set(CMAKE_OSX_ARCHITECTURES "${_vcpkg_ios_target_architecture}" CACHE STRING "Build architectures for iOS")
+ if(_vcpkg_ios_sysroot)
+ set(CMAKE_OSX_SYSROOT ${_vcpkg_ios_sysroot} CACHE STRING "iOS sysroot")
+ 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} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ endif()
+endif()