1
0

ios.toolchain.cmake 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  1. # This file is part of the ios-cmake project. It was retrieved from
  2. # https://github.com/leetal/ios-cmake.git, which is a fork of
  3. # https://github.com/gerstrong/ios-cmake.git, which is a fork of
  4. # https://github.com/cristeab/ios-cmake.git, which is a fork of
  5. # https://code.google.com/p/ios-cmake/. Which in turn is based off of
  6. # the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which
  7. # are included with CMake 2.8.4
  8. #
  9. # The ios-cmake project is licensed under the new BSD license.
  10. #
  11. # Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software,
  12. # Kitware, Inc., Insight Software Consortium. All rights reserved.
  13. # Redistribution and use in source and binary forms, with or without
  14. # modification, are permitted provided that the following conditions
  15. # are met:
  16. # 1. Redistributions of source code must retain the above copyright
  17. # notice, this list of conditions and the following disclaimer.
  18. #
  19. # 2. Redistributions in binary form must reproduce the above copyright
  20. # notice, this list of conditions and the following disclaimer in the
  21. # documentation and/or other materials provided with the distribution.
  22. #
  23. # 3. Neither the name of the copyright holder nor the names of its
  24. # contributors may be used to endorse or promote products derived from
  25. # this software without specific prior written permission.
  26. #
  27. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  28. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  29. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  30. # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  31. # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  32. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  33. # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  34. # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  35. # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  36. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  37. # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  38. # POSSIBILITY OF SUCH DAMAGE.
  39. #
  40. # This file is based on the Platform/Darwin.cmake and
  41. # Platform/UnixPaths.cmake files which are included with CMake 2.8.4
  42. # It has been altered for iOS development.
  43. #
  44. # Updated by Alex Stewart (alexs.mac@gmail.com)
  45. #
  46. # *****************************************************************************
  47. # Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com)
  48. # under the BSD-3-Clause license
  49. # https://github.com/leetal/ios-cmake
  50. # *****************************************************************************
  51. #
  52. # INFORMATION / HELP
  53. #
  54. ###############################################################################
  55. # OPTIONS #
  56. ###############################################################################
  57. #
  58. # PLATFORM: (default "OS64")
  59. # OS = Build for iPhoneOS.
  60. # OS64 = Build for arm64 iphoneOS.
  61. # OS64COMBINED = Build for arm64 x86_64 iphoneOS + iphoneOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
  62. # SIMULATOR = Build for x86 i386 iphoneOS Simulator.
  63. # SIMULATOR64 = Build for x86_64 iphoneOS Simulator.
  64. # SIMULATORARM64 = Build for arm64 iphoneOS Simulator.
  65. # TVOS = Build for arm64 tvOS.
  66. # TVOSCOMBINED = Build for arm64 x86_64 tvOS + tvOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
  67. # SIMULATOR_TVOS = Build for x86_64 tvOS Simulator.
  68. # WATCHOS = Build for armv7k arm64_32 for watchOS.
  69. # WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS + watchOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
  70. # SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator.
  71. # MAC = Build for x86_64 macOS.
  72. # MAC_ARM64 = Build for Apple Silicon macOS.
  73. # MAC_UNIVERSAL = Combined build for x86_64 and Apple Silicon on macOS.
  74. # MAC_CATALYST = Build for x86_64 macOS with Catalyst support (iOS toolchain on macOS).
  75. # Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS
  76. # MAC_CATALYST_ARM64 = Build for Apple Silicon macOS with Catalyst support (iOS toolchain on macOS).
  77. # Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS
  78. #
  79. # CMAKE_OSX_SYSROOT: Path to the SDK to use. By default this is
  80. # automatically determined from PLATFORM and xcodebuild, but
  81. # can also be manually specified (although this should not be required).
  82. #
  83. # CMAKE_DEVELOPER_ROOT: Path to the Developer directory for the platform
  84. # being compiled for. By default, this is automatically determined from
  85. # CMAKE_OSX_SYSROOT, but can also be manually specified (although this should
  86. # not be required).
  87. #
  88. # DEPLOYMENT_TARGET: Minimum SDK version to target. Default 2.0 on watchOS and 9.0 on tvOS+iOS
  89. #
  90. # NAMED_LANGUAGE_SUPPORT:
  91. # ON (default) = Will require "enable_language(OBJC) and/or enable_language(OBJCXX)" for full OBJC|OBJCXX support
  92. # OFF = Will embed the OBJC and OBJCXX flags into the CMAKE_C_FLAGS and CMAKE_CXX_FLAGS (legacy behavior, CMake version < 3.16)
  93. #
  94. # ENABLE_BITCODE: (ON|OFF) Enables or disables bitcode support. Default ON
  95. #
  96. # ENABLE_ARC: (ON|OFF) Enables or disables ARC support. Default ON (ARC enabled by default)
  97. #
  98. # ENABLE_VISIBILITY: (ON|OFF) Enables or disables symbol visibility support. Default OFF (visibility hidden by default)
  99. #
  100. # ENABLE_STRICT_TRY_COMPILE: (ON|OFF) Enables or disables strict try_compile() on all Check* directives (will run linker
  101. # to actually check if linking is possible). Default OFF (will set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY)
  102. #
  103. # ARCHS: (armv7 armv7s armv7k arm64 arm64_32 i386 x86_64) If specified, will override the default architectures for the given PLATFORM
  104. # OS = armv7 armv7s arm64 (if applicable)
  105. # OS64 = arm64 (if applicable)
  106. # SIMULATOR = i386
  107. # SIMULATOR64 = x86_64
  108. # SIMULATORARM64 = arm64
  109. # TVOS = arm64
  110. # SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated)
  111. # WATCHOS = armv7k arm64_32 (if applicable)
  112. # SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated)
  113. # MAC = x86_64
  114. # MAC_ARM64 = arm64
  115. # MAC_UNIVERSAL = x86_64 arm64
  116. # MAC_CATALYST = x86_64
  117. # MAC_CATALYST_ARM64 = arm64
  118. #
  119. # NOTE: When manually specifying ARCHS, put a semi-colon between the entries. E.g., -DARCHS="armv7;arm64"
  120. #
  121. ###############################################################################
  122. # END OPTIONS #
  123. ###############################################################################
  124. #
  125. # This toolchain defines the following properties (available via get_property()) for use externally:
  126. #
  127. # PLATFORM: The currently targeted platform.
  128. # XCODE_VERSION: Version number (not including Build version) of Xcode detected.
  129. # SDK_VERSION: Version of SDK being used.
  130. # OSX_ARCHITECTURES: Architectures being compiled for (generated from PLATFORM).
  131. # APPLE_TARGET_TRIPLE: Used by autoconf build systems. NOTE: If "ARCHS" is overridden, this will *NOT* be set!
  132. #
  133. # This toolchain defines the following macros for use externally:
  134. #
  135. # set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT)
  136. # A convenience macro for setting xcode specific properties on targets.
  137. # Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel
  138. # example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all").
  139. #
  140. # find_host_package (PROGRAM ARGS)
  141. # A macro used to find executable programs on the host system, not within the
  142. # environment. Thanks to the android-cmake project for providing the
  143. # command.
  144. #
  145. cmake_minimum_required(VERSION 3.8.0)
  146. # CMake invokes the toolchain file twice during the first build, but only once during subsequent rebuilds.
  147. if(DEFINED ENV{_IOS_TOOLCHAIN_HAS_RUN})
  148. return()
  149. endif()
  150. set(ENV{_IOS_TOOLCHAIN_HAS_RUN} true)
  151. # List of supported platform values
  152. list(APPEND _supported_platforms
  153. "OS" "OS64" "OS64COMBINED" "SIMULATOR" "SIMULATOR64" "SIMULATORARM64"
  154. "TVOS" "TVOSCOMBINED" "SIMULATOR_TVOS"
  155. "WATCHOS" "WATCHOSCOMBINED" "SIMULATOR_WATCHOS"
  156. "MAC" "MAC_ARM64" "MAC_UNIVERSAL"
  157. "MAC_CATALYST" "MAC_CATALYST_ARM64")
  158. # Cache what generator is used
  159. set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
  160. # Check if using a CMake version capable of building combined FAT builds (simulator and target slices combined in one static lib)
  161. if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14")
  162. set(MODERN_CMAKE YES)
  163. endif()
  164. # Get the Xcode version being used.
  165. # Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs.
  166. # Workaround: On the first run (in which cache variables are always accessible), set an intermediary environment variable.
  167. #
  168. # NOTE: This pattern is used in many places in this toolchain to speed up checks of all sorts
  169. if(DEFINED XCODE_VERSION_INT)
  170. # Environment variables are always preserved.
  171. set(ENV{_XCODE_VERSION_INT} "${XCODE_VERSION_INT}")
  172. elseif(DEFINED ENV{_XCODE_VERSION_INT})
  173. set(XCODE_VERSION_INT "$ENV{_XCODE_VERSION_INT}")
  174. elseif(NOT DEFINED XCODE_VERSION_INT)
  175. find_program(XCODEBUILD_EXECUTABLE xcodebuild)
  176. if(NOT XCODEBUILD_EXECUTABLE)
  177. message(FATAL_ERROR "xcodebuild not found. Please install either the standalone commandline tools or Xcode.")
  178. endif()
  179. execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version
  180. OUTPUT_VARIABLE XCODE_VERSION_INT
  181. ERROR_QUIET
  182. OUTPUT_STRIP_TRAILING_WHITESPACE)
  183. string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION_INT "${XCODE_VERSION_INT}")
  184. string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION_INT "${XCODE_VERSION_INT}")
  185. set(XCODE_VERSION_INT "${XCODE_VERSION_INT}" CACHE INTERNAL "")
  186. endif()
  187. # Assuming that xcode 12.0 is installed you most probably have ios sdk 14.0 or later installed (tested on Big Sur)
  188. # if you don't set a deployment target it will be set the way you only get 64-bit builds
  189. if(NOT DEFINED DEPLOYMENT_TARGET AND XCODE_VERSION_INT VERSION_GREATER 12.0)
  190. # Temporarily fix the arm64 issues in CMake install-combined by excluding arm64 for simulator builds (needed for Apple Silicon...)
  191. set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64")
  192. endif()
  193. # Check if the platform variable is set
  194. if(DEFINED PLATFORM)
  195. # Environment variables are always preserved.
  196. set(ENV{_PLATFORM} "${PLATFORM}")
  197. elseif(DEFINED ENV{_PLATFORM})
  198. set(PLATFORM "$ENV{_PLATFORM}")
  199. elseif(NOT DEFINED PLATFORM)
  200. message(FATAL_ERROR "PLATFORM argument not set. Bailing configure since I don't know what target you want to build for!")
  201. endif ()
  202. if(PLATFORM MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode")
  203. message(FATAL_ERROR "The combined builds support requires Xcode to be used as a generator via '-G Xcode' command-line argument in CMake")
  204. endif()
  205. # Safeguard that the platform value is set and is one of the supported values
  206. list(FIND _supported_platforms ${PLATFORM} contains_PLATFORM)
  207. if("${contains_PLATFORM}" EQUAL "-1")
  208. string(REPLACE ";" "\n * " _supported_platforms_formatted "${_supported_platforms}")
  209. message(FATAL_ERROR " Invalid PLATFORM specified! Current value: ${PLATFORM}.\n"
  210. " Supported PLATFORM values: \n * ${_supported_platforms_formatted}")
  211. endif()
  212. # Check if Apple Silicon is supported
  213. if(PLATFORM MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$|^(MAC_UNIVERSAL)$" AND ${CMAKE_VERSION} VERSION_LESS "3.19.5")
  214. message(FATAL_ERROR "Apple Silicon builds requires a minimum of CMake 3.19.5")
  215. endif()
  216. # Touch the toolchain variable to suppress the "unused variable" warning.
  217. # This happens if CMake is invoked with the same command line the second time.
  218. if(CMAKE_TOOLCHAIN_FILE)
  219. endif()
  220. # Fix for PThread library not in path
  221. set(CMAKE_THREAD_LIBS_INIT "-lpthread")
  222. set(CMAKE_HAVE_THREADS_LIBRARY 1)
  223. set(CMAKE_USE_WIN32_THREADS_INIT 0)
  224. set(CMAKE_USE_PTHREADS_INIT 1)
  225. # Specify named language support defaults.
  226. if(NOT DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16")
  227. set(NAMED_LANGUAGE_SUPPORT ON)
  228. message(STATUS "[DEFAULTS] Using explicit named language support! E.g., enable_language(CXX) is needed in the project files.")
  229. elseif(NOT DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_LESS "3.16")
  230. set(NAMED_LANGUAGE_SUPPORT OFF)
  231. message(STATUS "[DEFAULTS] Disabling explicit named language support. Falling back to legacy behavior.")
  232. elseif(DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_LESS "3.16")
  233. message(FATAL_ERROR "CMake named language support for OBJC and OBJCXX was added in CMake 3.16.")
  234. endif()
  235. set(NAMED_LANGUAGE_SUPPORT_INT ${NAMED_LANGUAGE_SUPPORT} CACHE BOOL
  236. "Whether or not to enable explicit named language support" FORCE)
  237. # Specify the minimum version of the deployment target.
  238. if(NOT DEFINED DEPLOYMENT_TARGET)
  239. if (PLATFORM MATCHES "WATCHOS")
  240. # Unless specified, SDK version 4.0 is used by default as minimum target version (watchOS).
  241. set(DEPLOYMENT_TARGET "4.0")
  242. elseif(PLATFORM STREQUAL "MAC")
  243. # Unless specified, SDK version 10.13 (High Sierra) is used by default as the minimum target version (macos).
  244. set(DEPLOYMENT_TARGET "10.13")
  245. elseif(PLATFORM STREQUAL "MAC_ARM64")
  246. # Unless specified, SDK version 11.0 (Big Sur) is used by default as the minimum target version (macOS on arm).
  247. set(DEPLOYMENT_TARGET "11.0")
  248. elseif(PLATFORM STREQUAL "MAC_UNIVERSAL")
  249. # Unless specified, SDK version 11.0 (Big Sur) is used by default as minimum target version for universal builds.
  250. set(DEPLOYMENT_TARGET "11.0")
  251. elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64")
  252. # Unless specified, SDK version 13.0 is used by default as the minimum target version (mac catalyst minimum requirement).
  253. set(DEPLOYMENT_TARGET "13.1")
  254. else()
  255. # Unless specified, SDK version 11.0 is used by default as the minimum target version (iOS, tvOS).
  256. set(DEPLOYMENT_TARGET "11.0")
  257. endif()
  258. message(STATUS "[DEFAULTS] Using the default min-version since DEPLOYMENT_TARGET not provided!")
  259. elseif(DEFINED DEPLOYMENT_TARGET AND PLATFORM MATCHES "^MAC_CATALYST" AND ${DEPLOYMENT_TARGET} VERSION_LESS "13.1")
  260. message(FATAL_ERROR "Mac Catalyst builds requires a minimum deployment target of 13.1!")
  261. endif()
  262. # Store the DEPLOYMENT_TARGET in the cache
  263. set(DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}" CACHE INTERNAL "")
  264. # Handle the case where we are targeting iOS and a version above 10.3.4 (32-bit support dropped officially)
  265. if(PLATFORM STREQUAL "OS" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
  266. set(PLATFORM "OS64")
  267. message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
  268. elseif(PLATFORM STREQUAL "SIMULATOR" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
  269. set(PLATFORM "SIMULATOR64")
  270. message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
  271. endif()
  272. set(PLATFORM_INT "${PLATFORM}")
  273. if(DEFINED ARCHS)
  274. string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
  275. endif()
  276. # Determine the platform name and architectures for use in xcodebuild commands
  277. # from the specified PLATFORM_INT name.
  278. if(PLATFORM_INT STREQUAL "OS")
  279. set(SDK_NAME iphoneos)
  280. if(NOT ARCHS)
  281. set(ARCHS armv7 armv7s arm64)
  282. set(APPLE_TARGET_TRIPLE_INT arm-apple-ios${DEPLOYMENT_TARGET})
  283. else()
  284. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
  285. endif()
  286. elseif(PLATFORM_INT STREQUAL "OS64")
  287. set(SDK_NAME iphoneos)
  288. if(NOT ARCHS)
  289. if (XCODE_VERSION_INT VERSION_GREATER 10.0)
  290. set(ARCHS arm64) # FIXME: Add arm64e when Apple has fixed the integration issues with it, libarclite_iphoneos.a is currently missing bitcode markers for example
  291. else()
  292. set(ARCHS arm64)
  293. endif()
  294. set(APPLE_TARGET_TRIPLE_INT aarch64-apple-ios${DEPLOYMENT_TARGET})
  295. else()
  296. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
  297. endif()
  298. elseif(PLATFORM_INT STREQUAL "OS64COMBINED")
  299. set(SDK_NAME iphoneos)
  300. if(MODERN_CMAKE)
  301. if(NOT ARCHS)
  302. if (XCODE_VERSION_INT VERSION_GREATER 10.0)
  303. set(ARCHS arm64 x86_64) # FIXME: Add arm64e when Apple has fixed the integration issues with it, libarclite_iphoneos.a is currently missing bitcode markers for example
  304. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
  305. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
  306. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
  307. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
  308. else()
  309. set(ARCHS arm64 x86_64)
  310. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
  311. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
  312. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
  313. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
  314. endif()
  315. set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-ios${DEPLOYMENT_TARGET})
  316. else()
  317. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
  318. endif()
  319. else()
  320. message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the OS64COMBINED setting work")
  321. endif()
  322. elseif(PLATFORM_INT STREQUAL "SIMULATOR")
  323. set(SDK_NAME iphonesimulator)
  324. if(NOT ARCHS)
  325. set(ARCHS i386)
  326. set(APPLE_TARGET_TRIPLE_INT i386-apple-ios${DEPLOYMENT_TARGET}-simulator)
  327. else()
  328. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
  329. endif()
  330. message(DEPRECATION "SIMULATOR IS DEPRECATED. Consider using SIMULATOR64 instead.")
  331. elseif(PLATFORM_INT STREQUAL "SIMULATOR64")
  332. set(SDK_NAME iphonesimulator)
  333. if(NOT ARCHS)
  334. set(ARCHS x86_64)
  335. set(APPLE_TARGET_TRIPLE_INT x86_64-apple-ios${DEPLOYMENT_TARGET}-simulator)
  336. else()
  337. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
  338. endif()
  339. elseif(PLATFORM_INT STREQUAL "SIMULATORARM64")
  340. set(SDK_NAME iphonesimulator)
  341. if(NOT ARCHS)
  342. set(ARCHS arm64)
  343. set(APPLE_TARGET_TRIPLE_INT aarch64-apple-ios${DEPLOYMENT_TARGET}-simulator)
  344. else()
  345. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
  346. endif()
  347. elseif(PLATFORM_INT STREQUAL "TVOS")
  348. set(SDK_NAME appletvos)
  349. if(NOT ARCHS)
  350. set(ARCHS arm64)
  351. set(APPLE_TARGET_TRIPLE_INT aarch64-apple-tvos${DEPLOYMENT_TARGET})
  352. else()
  353. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET})
  354. endif()
  355. elseif (PLATFORM_INT STREQUAL "TVOSCOMBINED")
  356. set(SDK_NAME appletvos)
  357. if(MODERN_CMAKE)
  358. if(NOT ARCHS)
  359. set(ARCHS arm64 x86_64)
  360. set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-tvos${DEPLOYMENT_TARGET})
  361. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvos*] "arm64")
  362. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvsimulator*] "x86_64")
  363. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvos*] "arm64")
  364. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvsimulator*] "x86_64")
  365. else()
  366. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET})
  367. endif()
  368. else()
  369. message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the TVOSCOMBINED setting work")
  370. endif()
  371. elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
  372. set(SDK_NAME appletvsimulator)
  373. if(NOT ARCHS)
  374. set(ARCHS x86_64)
  375. set(APPLE_TARGET_TRIPLE_INT x86_64-apple-tvos${DEPLOYMENT_TARGET}-simulator)
  376. else()
  377. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}-simulator)
  378. endif()
  379. elseif(PLATFORM_INT STREQUAL "WATCHOS")
  380. set(SDK_NAME watchos)
  381. if(NOT ARCHS)
  382. if (XCODE_VERSION_INT VERSION_GREATER 10.0)
  383. set(ARCHS armv7k arm64_32)
  384. set(APPLE_TARGET_TRIPLE_INT aarch64_32-apple-watchos${DEPLOYMENT_TARGET})
  385. else()
  386. set(ARCHS armv7k)
  387. set(APPLE_TARGET_TRIPLE_INT arm-apple-watchos${DEPLOYMENT_TARGET})
  388. endif()
  389. else()
  390. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET})
  391. endif()
  392. elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED")
  393. set(SDK_NAME watchos)
  394. if(MODERN_CMAKE)
  395. if(NOT ARCHS)
  396. if (XCODE_VERSION_INT VERSION_GREATER 10.0)
  397. set(ARCHS armv7k arm64_32 i386)
  398. set(APPLE_TARGET_TRIPLE_INT aarch64_32-i386-apple-watchos${DEPLOYMENT_TARGET})
  399. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k arm64_32")
  400. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386")
  401. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k arm64_32")
  402. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386")
  403. else()
  404. set(ARCHS armv7k i386)
  405. set(APPLE_TARGET_TRIPLE_INT arm-i386-apple-watchos${DEPLOYMENT_TARGET})
  406. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k")
  407. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386")
  408. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k")
  409. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386")
  410. endif()
  411. else()
  412. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET})
  413. endif()
  414. else()
  415. message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the WATCHOSCOMBINED setting work")
  416. endif()
  417. elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
  418. set(SDK_NAME watchsimulator)
  419. if(NOT ARCHS)
  420. set(ARCHS i386)
  421. set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos${DEPLOYMENT_TARGET}-simulator)
  422. else()
  423. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator)
  424. endif()
  425. elseif(PLATFORM_INT STREQUAL "MAC" OR PLATFORM_INT STREQUAL "MAC_CATALYST")
  426. set(SDK_NAME macosx)
  427. if(NOT ARCHS)
  428. set(ARCHS x86_64)
  429. endif()
  430. string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
  431. if(PLATFORM_INT STREQUAL "MAC")
  432. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
  433. elseif(PLATFORM_INT STREQUAL "MAC_CATALYST")
  434. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi)
  435. endif()
  436. elseif(PLATFORM_INT MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$")
  437. set(SDK_NAME macosx)
  438. if(NOT ARCHS)
  439. set(ARCHS arm64)
  440. endif()
  441. string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
  442. if(PLATFORM_INT STREQUAL "MAC_ARM64")
  443. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
  444. elseif(PLATFORM_INT STREQUAL "MAC_CATALYST_ARM64")
  445. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi)
  446. endif()
  447. elseif(PLATFORM_INT STREQUAL "MAC_UNIVERSAL")
  448. set(SDK_NAME macosx)
  449. if(NOT ARCHS)
  450. set(ARCHS "x86_64;arm64")
  451. endif()
  452. string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
  453. set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
  454. else()
  455. message(FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT}")
  456. endif()
  457. string(REPLACE ";" " " ARCHS_SPACED "${ARCHS}")
  458. if(MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode")
  459. message(FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode")
  460. endif()
  461. if(CMAKE_GENERATOR MATCHES "Xcode" AND PLATFORM_INT MATCHES "^MAC_CATALYST")
  462. set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
  463. set(CMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "macosx")
  464. set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-maccatalyst")
  465. if(NOT DEFINED MACOSX_DEPLOYMENT_TARGET)
  466. set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "10.15")
  467. else()
  468. set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "${MACOSX_DEPLOYMENT_TARGET}")
  469. endif()
  470. elseif(CMAKE_GENERATOR MATCHES "Xcode")
  471. set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
  472. set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}")
  473. if(NOT PLATFORM_INT MATCHES ".*COMBINED")
  474. set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=${SDK_NAME}*] "${ARCHS_SPACED}")
  475. set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=${SDK_NAME}*] "${ARCHS_SPACED}")
  476. endif()
  477. endif()
  478. # If the user did not specify the SDK root to use, then query xcodebuild for it.
  479. if(DEFINED CMAKE_OSX_SYSROOT_INT)
  480. # Environment variables are always preserved.
  481. set(ENV{_CMAKE_OSX_SYSROOT_INT} "${CMAKE_OSX_SYSROOT_INT}")
  482. elseif(DEFINED ENV{_CMAKE_OSX_SYSROOT_INT})
  483. set(CMAKE_OSX_SYSROOT_INT "$ENV{_CMAKE_OSX_SYSROOT_INT}")
  484. elseif(NOT DEFINED CMAKE_OSX_SYSROOT_INT)
  485. execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk ${SDK_NAME} Path
  486. OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT
  487. ERROR_QUIET
  488. OUTPUT_STRIP_TRAILING_WHITESPACE)
  489. endif()
  490. if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT)
  491. message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain"
  492. "is pointing to the correct path. Please run:"
  493. "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"
  494. "and see if that fixes the problem for you.")
  495. message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} "
  496. "does not exist.")
  497. elseif(DEFINED CMAKE_OSX_SYSROOT_INT)
  498. set(CMAKE_OSX_SYSROOT_INT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
  499. # Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT.
  500. set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
  501. endif()
  502. # Use bitcode or not
  503. if(NOT DEFINED ENABLE_BITCODE AND NOT ARCHS MATCHES "((^|;|, )(i386|x86_64))+")
  504. # Unless specified, enable bitcode support by default
  505. message(STATUS "[DEFAULTS] Enabling bitcode support by default. ENABLE_BITCODE not provided!")
  506. set(ENABLE_BITCODE ON)
  507. elseif(NOT DEFINED ENABLE_BITCODE)
  508. message(STATUS "[DEFAULTS] Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!")
  509. set(ENABLE_BITCODE OFF)
  510. endif()
  511. set(ENABLE_BITCODE_INT ${ENABLE_BITCODE} CACHE BOOL
  512. "Whether or not to enable bitcode" FORCE)
  513. # Use ARC or not
  514. if(NOT DEFINED ENABLE_ARC)
  515. # Unless specified, enable ARC support by default
  516. set(ENABLE_ARC ON)
  517. message(STATUS "[DEFAULTS] Enabling ARC support by default. ENABLE_ARC not provided!")
  518. endif()
  519. set(ENABLE_ARC_INT ${ENABLE_ARC} CACHE BOOL "Whether or not to enable ARC" FORCE)
  520. # Use hidden visibility or not
  521. if(NOT DEFINED ENABLE_VISIBILITY)
  522. # Unless specified, disable symbols visibility by default
  523. set(ENABLE_VISIBILITY OFF)
  524. message(STATUS "[DEFAULTS] Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!")
  525. endif()
  526. set(ENABLE_VISIBILITY_INT ${ENABLE_VISIBILITY} CACHE BOOL "Whether or not to hide symbols from the dynamic linker (-fvisibility=hidden)" FORCE)
  527. # Set strict compiler checks or not
  528. if(NOT DEFINED ENABLE_STRICT_TRY_COMPILE)
  529. # Unless specified, disable strict try_compile()
  530. set(ENABLE_STRICT_TRY_COMPILE OFF)
  531. message(STATUS "[DEFAULTS] Using NON-strict compiler checks by default. ENABLE_STRICT_TRY_COMPILE not provided!")
  532. endif()
  533. set(ENABLE_STRICT_TRY_COMPILE_INT ${ENABLE_STRICT_TRY_COMPILE} CACHE BOOL
  534. "Whether or not to use strict compiler checks" FORCE)
  535. # Get the SDK version information.
  536. if(DEFINED SDK_VERSION)
  537. # Environment variables are always preserved.
  538. set(ENV{_SDK_VERSION} "${SDK_VERSION}")
  539. elseif(DEFINED ENV{_SDK_VERSION})
  540. set(SDK_VERSION "$ENV{_SDK_VERSION}")
  541. elseif(NOT DEFINED SDK_VERSION)
  542. execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -sdk ${CMAKE_OSX_SYSROOT_INT} -version SDKVersion
  543. OUTPUT_VARIABLE SDK_VERSION
  544. ERROR_QUIET
  545. OUTPUT_STRIP_TRAILING_WHITESPACE)
  546. endif()
  547. # Find the Developer root for the specific iOS platform being compiled for
  548. # from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in
  549. # CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain
  550. # this information from xcrun or xcodebuild.
  551. if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode")
  552. get_filename_component(PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT_INT} PATH)
  553. get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH)
  554. if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}")
  555. message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.")
  556. endif()
  557. endif()
  558. # Find the C & C++ compilers for the specified SDK.
  559. if(DEFINED CMAKE_C_COMPILER)
  560. # Environment variables are always preserved.
  561. set(ENV{_CMAKE_C_COMPILER} "${CMAKE_C_COMPILER}")
  562. elseif(DEFINED ENV{_CMAKE_C_COMPILER})
  563. set(CMAKE_C_COMPILER "$ENV{_CMAKE_C_COMPILER}")
  564. set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
  565. elseif(NOT DEFINED CMAKE_C_COMPILER)
  566. execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang
  567. OUTPUT_VARIABLE CMAKE_C_COMPILER
  568. ERROR_QUIET
  569. OUTPUT_STRIP_TRAILING_WHITESPACE)
  570. set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
  571. endif()
  572. if(DEFINED CMAKE_CXX_COMPILER)
  573. # Environment variables are always preserved.
  574. set(ENV{_CMAKE_CXX_COMPILER} "${CMAKE_CXX_COMPILER}")
  575. elseif(DEFINED ENV{_CMAKE_CXX_COMPILER})
  576. set(CMAKE_CXX_COMPILER "$ENV{_CMAKE_CXX_COMPILER}")
  577. elseif(NOT DEFINED CMAKE_CXX_COMPILER)
  578. execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang++
  579. OUTPUT_VARIABLE CMAKE_CXX_COMPILER
  580. ERROR_QUIET
  581. OUTPUT_STRIP_TRAILING_WHITESPACE)
  582. endif()
  583. # Find (Apple's) libtool.
  584. if(DEFINED BUILD_LIBTOOL)
  585. # Environment variables are always preserved.
  586. set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}")
  587. elseif(DEFINED ENV{_BUILD_LIBTOOL})
  588. set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}")
  589. elseif(NOT DEFINED BUILD_LIBTOOL)
  590. execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find libtool
  591. OUTPUT_VARIABLE BUILD_LIBTOOL
  592. ERROR_QUIET
  593. OUTPUT_STRIP_TRAILING_WHITESPACE)
  594. endif()
  595. # Find the toolchain's provided install_name_tool if none is found on the host
  596. if(DEFINED CMAKE_INSTALL_NAME_TOOL)
  597. # Environment variables are always preserved.
  598. set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}")
  599. elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL})
  600. set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}")
  601. elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
  602. execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find install_name_tool
  603. OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT
  604. ERROR_QUIET
  605. OUTPUT_STRIP_TRAILING_WHITESPACE)
  606. set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "")
  607. endif()
  608. # Configure libtool to be used instead of ar + ranlib to build static libraries.
  609. # This is required on Xcode 7+, but should also work on previous versions of
  610. # Xcode.
  611. get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
  612. foreach(lang ${languages})
  613. set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> " CACHE INTERNAL "")
  614. endforeach()
  615. # CMake 3.14+ support building for iOS, watchOS, and tvOS out of the box.
  616. if(MODERN_CMAKE)
  617. if(SDK_NAME MATCHES "iphone")
  618. set(CMAKE_SYSTEM_NAME iOS)
  619. elseif(SDK_NAME MATCHES "macosx")
  620. set(CMAKE_SYSTEM_NAME Darwin)
  621. elseif(SDK_NAME MATCHES "appletv")
  622. set(CMAKE_SYSTEM_NAME tvOS)
  623. elseif(SDK_NAME MATCHES "watch")
  624. set(CMAKE_SYSTEM_NAME watchOS)
  625. endif()
  626. # Provide flags for a combined FAT library build on newer CMake versions
  627. if(PLATFORM_INT MATCHES ".*COMBINED")
  628. set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
  629. set(CMAKE_IOS_INSTALL_COMBINED YES)
  630. endif()
  631. elseif(NOT DEFINED CMAKE_SYSTEM_NAME AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10")
  632. # Legacy code path prior to CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified
  633. set(CMAKE_SYSTEM_NAME iOS)
  634. elseif(NOT DEFINED CMAKE_SYSTEM_NAME)
  635. # Legacy code path before CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified
  636. set(CMAKE_SYSTEM_NAME Darwin)
  637. endif()
  638. # Standard settings.
  639. set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "")
  640. set(UNIX ON CACHE BOOL "")
  641. set(APPLE ON CACHE BOOL "")
  642. if(PLATFORM STREQUAL "MAC" OR PLATFORM STREQUAL "MAC_ARM64" OR PLATFORM STREQUAL "MAC_UNIVERSAL")
  643. set(IOS OFF CACHE BOOL "")
  644. set(MACOS ON CACHE BOOL "")
  645. elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64")
  646. set(IOS ON CACHE BOOL "")
  647. set(MACOS ON CACHE BOOL "")
  648. else()
  649. set(IOS ON CACHE BOOL "")
  650. endif()
  651. set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
  652. set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
  653. set(CMAKE_STRIP strip CACHE FILEPATH "" FORCE)
  654. # Set the architectures for which to build.
  655. set(CMAKE_OSX_ARCHITECTURES ${ARCHS} CACHE INTERNAL "")
  656. # Change the type of target generated for try_compile() so it'll work when cross-compiling, weak compiler checks
  657. if(NOT ENABLE_STRICT_TRY_COMPILE_INT)
  658. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
  659. endif()
  660. # All iOS/Darwin specific settings - some may be redundant.
  661. if (NOT DEFINED CMAKE_MACOSX_BUNDLE)
  662. set(CMAKE_MACOSX_BUNDLE YES)
  663. endif()
  664. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
  665. set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
  666. set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
  667. set(CMAKE_SHARED_MODULE_PREFIX "lib")
  668. set(CMAKE_SHARED_MODULE_SUFFIX ".so")
  669. set(CMAKE_C_COMPILER_ABI ELF)
  670. set(CMAKE_CXX_COMPILER_ABI ELF)
  671. set(CMAKE_C_HAS_ISYSROOT 1)
  672. set(CMAKE_CXX_HAS_ISYSROOT 1)
  673. set(CMAKE_MODULE_EXISTS 1)
  674. set(CMAKE_DL_LIBS "")
  675. set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
  676. set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
  677. set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
  678. set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
  679. if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+")
  680. set(CMAKE_C_SIZEOF_DATA_PTR 8)
  681. set(CMAKE_CXX_SIZEOF_DATA_PTR 8)
  682. if(ARCHS MATCHES "((^|;|, )(arm64|arm64e))+")
  683. set(CMAKE_SYSTEM_PROCESSOR "aarch64")
  684. else()
  685. set(CMAKE_SYSTEM_PROCESSOR "x86_64")
  686. endif()
  687. else()
  688. set(CMAKE_C_SIZEOF_DATA_PTR 4)
  689. set(CMAKE_CXX_SIZEOF_DATA_PTR 4)
  690. set(CMAKE_SYSTEM_PROCESSOR "arm")
  691. endif()
  692. # Note that only Xcode 7+ supports the newer more specific:
  693. # -m${SDK_NAME}-version-min flags, older versions of Xcode use:
  694. # -m(ios/ios-simulator)-version-min instead.
  695. if(${CMAKE_VERSION} VERSION_LESS "3.11")
  696. if(PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64")
  697. if(XCODE_VERSION_INT VERSION_LESS 7.0)
  698. set(SDK_NAME_VERSION_FLAGS
  699. "-mios-version-min=${DEPLOYMENT_TARGET}")
  700. else()
  701. # Xcode 7.0+ uses flags we can build directly from SDK_NAME.
  702. set(SDK_NAME_VERSION_FLAGS
  703. "-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}")
  704. endif()
  705. elseif(PLATFORM_INT STREQUAL "TVOS")
  706. set(SDK_NAME_VERSION_FLAGS
  707. "-mtvos-version-min=${DEPLOYMENT_TARGET}")
  708. elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
  709. set(SDK_NAME_VERSION_FLAGS
  710. "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}")
  711. elseif(PLATFORM_INT STREQUAL "WATCHOS")
  712. set(SDK_NAME_VERSION_FLAGS
  713. "-mwatchos-version-min=${DEPLOYMENT_TARGET}")
  714. elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
  715. set(SDK_NAME_VERSION_FLAGS
  716. "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}")
  717. elseif(PLATFORM_INT STREQUAL "MAC")
  718. set(SDK_NAME_VERSION_FLAGS
  719. "-mmacosx-version-min=${DEPLOYMENT_TARGET}")
  720. else()
  721. # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min.
  722. set(SDK_NAME_VERSION_FLAGS
  723. "-mios-simulator-version-min=${DEPLOYMENT_TARGET}")
  724. endif()
  725. elseif(NOT PLATFORM_INT MATCHES "^MAC_CATALYST")
  726. # Newer versions of CMake sets the version min flags correctly, skip this for Mac Catalyst targets
  727. set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET})
  728. endif()
  729. if(DEFINED APPLE_TARGET_TRIPLE_INT)
  730. set(APPLE_TARGET_TRIPLE ${APPLE_TARGET_TRIPLE_INT} CACHE INTERNAL "")
  731. set(CMAKE_C_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
  732. set(CMAKE_CXX_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
  733. set(CMAKE_ASM_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
  734. endif()
  735. if(PLATFORM_INT MATCHES "^MAC_CATALYST")
  736. set(C_TARGET_FLAGS "-isystem ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/usr/include -iframework ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks")
  737. endif()
  738. if(ENABLE_BITCODE_INT)
  739. set(BITCODE "-fembed-bitcode")
  740. set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode")
  741. set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES")
  742. else()
  743. set(BITCODE "")
  744. set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
  745. endif()
  746. if(ENABLE_ARC_INT)
  747. set(FOBJC_ARC "-fobjc-arc")
  748. set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES")
  749. else()
  750. set(FOBJC_ARC "-fno-objc-arc")
  751. set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "NO")
  752. endif()
  753. if(NAMED_LANGUAGE_SUPPORT_INT)
  754. set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0")
  755. set(OBJC_LEGACY_VARS "")
  756. else()
  757. set(OBJC_VARS "")
  758. set(OBJC_LEGACY_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0")
  759. endif()
  760. if(NOT ENABLE_VISIBILITY_INT)
  761. foreach(lang ${languages})
  762. set(CMAKE_${lang}_VISIBILITY_PRESET "hidden" CACHE INTERNAL "")
  763. endforeach()
  764. set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES")
  765. set(VISIBILITY "-fvisibility=hidden -fvisibility-inlines-hidden")
  766. else()
  767. foreach(lang ${languages})
  768. set(CMAKE_${lang}_VISIBILITY_PRESET "default" CACHE INTERNAL "")
  769. endforeach()
  770. set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "NO")
  771. set(VISIBILITY "-fvisibility=default")
  772. endif()
  773. if(DEFINED APPLE_TARGET_TRIPLE)
  774. set(APPLE_TARGET_TRIPLE_FLAG "-target ${APPLE_TARGET_TRIPLE}")
  775. endif()
  776. #Check if Xcode generator is used since that will handle these flags automagically
  777. if(CMAKE_GENERATOR MATCHES "Xcode")
  778. message(STATUS "Not setting any manual command-line buildflags, since Xcode is selected as the generator. Modifying the Xcode build-settings directly instead.")
  779. else()
  780. set(CMAKE_C_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${OBJC_LEGACY_VARS} ${BITCODE} ${VISIBILITY} ${CMAKE_C_FLAGS}")
  781. set(CMAKE_C_FLAGS_DEBUG "-O0 -g ${CMAKE_C_FLAGS_DEBUG}")
  782. set(CMAKE_C_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_C_FLAGS_MINSIZEREL}")
  783. set(CMAKE_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
  784. set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_C_FLAGS_RELEASE}")
  785. set(CMAKE_CXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${OBJC_LEGACY_VARS} ${BITCODE} ${VISIBILITY} ${CMAKE_CXX_FLAGS}")
  786. set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g ${CMAKE_CXX_FLAGS_DEBUG}")
  787. set(CMAKE_CXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_CXX_FLAGS_MINSIZEREL}")
  788. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
  789. set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_CXX_FLAGS_RELEASE}")
  790. if(NAMED_LANGUAGE_SUPPORT_INT)
  791. set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}")
  792. set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}")
  793. set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}")
  794. set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}")
  795. set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}")
  796. set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}")
  797. set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}")
  798. set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}")
  799. set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}")
  800. set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}")
  801. endif()
  802. set(CMAKE_C_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
  803. set(CMAKE_CXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
  804. if(NAMED_LANGUAGE_SUPPORT_INT)
  805. set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}")
  806. set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}")
  807. endif()
  808. set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -arch ${CMAKE_OSX_ARCHITECTURES} ${APPLE_TARGET_TRIPLE_FLAG}")
  809. endif()
  810. ## Print status messages to inform of the current state
  811. message(STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT}, architecture(s): ${ARCHS}")
  812. message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT}")
  813. message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}")
  814. message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}")
  815. message(STATUS "Using libtool: ${BUILD_LIBTOOL}")
  816. message(STATUS "Using install name tool: ${CMAKE_INSTALL_NAME_TOOL}")
  817. if(DEFINED APPLE_TARGET_TRIPLE)
  818. message(STATUS "Autoconf target triple: ${APPLE_TARGET_TRIPLE}")
  819. endif()
  820. message(STATUS "Using minimum deployment version: ${DEPLOYMENT_TARGET}"
  821. " (SDK version: ${SDK_VERSION})")
  822. if(MODERN_CMAKE)
  823. message(STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!")
  824. if(PLATFORM_INT MATCHES ".*COMBINED")
  825. message(STATUS "Will combine built (static) artifacts into FAT lib...")
  826. endif()
  827. endif()
  828. if(CMAKE_GENERATOR MATCHES "Xcode")
  829. message(STATUS "Using Xcode version: ${XCODE_VERSION_INT}")
  830. endif()
  831. message(STATUS "CMake version: ${CMAKE_VERSION}")
  832. if(DEFINED SDK_NAME_VERSION_FLAGS)
  833. message(STATUS "Using version flags: ${SDK_NAME_VERSION_FLAGS}")
  834. endif()
  835. message(STATUS "Using a data_ptr size of: ${CMAKE_CXX_SIZEOF_DATA_PTR}")
  836. if(ENABLE_BITCODE_INT)
  837. message(STATUS "Bitcode: Enabled")
  838. else()
  839. message(STATUS "Bitcode: Disabled")
  840. endif()
  841. if(ENABLE_ARC_INT)
  842. message(STATUS "ARC: Enabled")
  843. else()
  844. message(STATUS "ARC: Disabled")
  845. endif()
  846. if(ENABLE_VISIBILITY_INT)
  847. message(STATUS "Hiding symbols: Disabled")
  848. else()
  849. message(STATUS "Hiding symbols: Enabled")
  850. endif()
  851. # Set global properties
  852. set_property(GLOBAL PROPERTY PLATFORM "${PLATFORM}")
  853. set_property(GLOBAL PROPERTY APPLE_TARGET_TRIPLE "${APPLE_TARGET_TRIPLE_INT}")
  854. set_property(GLOBAL PROPERTY SDK_VERSION "${SDK_VERSION}")
  855. set_property(GLOBAL PROPERTY XCODE_VERSION "${XCODE_VERSION_INT}")
  856. set_property(GLOBAL PROPERTY OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
  857. # Export configurable variables for the try_compile() command.
  858. set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
  859. PLATFORM
  860. XCODE_VERSION_INT
  861. SDK_VERSION
  862. NAMED_LANGUAGE_SUPPORT
  863. DEPLOYMENT_TARGET
  864. CMAKE_DEVELOPER_ROOT
  865. CMAKE_OSX_SYSROOT_INT
  866. ENABLE_BITCODE
  867. ENABLE_ARC
  868. CMAKE_ASM_COMPILER
  869. CMAKE_C_COMPILER
  870. CMAKE_C_COMPILER_TARGET
  871. CMAKE_CXX_COMPILER
  872. CMAKE_CXX_COMPILER_TARGET
  873. BUILD_LIBTOOL
  874. CMAKE_INSTALL_NAME_TOOL
  875. CMAKE_C_FLAGS
  876. CMAKE_C_DEBUG
  877. CMAKE_C_MINSIZEREL
  878. CMAKE_C_RELWITHDEBINFO
  879. CMAKE_C_RELEASE
  880. CMAKE_CXX_FLAGS
  881. CMAKE_CXX_FLAGS_DEBUG
  882. CMAKE_CXX_FLAGS_MINSIZEREL
  883. CMAKE_CXX_FLAGS_RELWITHDEBINFO
  884. CMAKE_CXX_FLAGS_RELEASE
  885. CMAKE_C_LINK_FLAGS
  886. CMAKE_CXX_LINK_FLAGS
  887. CMAKE_ASM_FLAGS
  888. )
  889. if(NAMED_LANGUAGE_SUPPORT_INT)
  890. list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
  891. CMAKE_OBJC_FLAGS
  892. CMAKE_OBJC_DEBUG
  893. CMAKE_OBJC_MINSIZEREL
  894. CMAKE_OBJC_RELWITHDEBINFO
  895. CMAKE_OBJC_RELEASE
  896. CMAKE_OBJCXX_FLAGS
  897. CMAKE_OBJCXX_DEBUG
  898. CMAKE_OBJCXX_MINSIZEREL
  899. CMAKE_OBJCXX_RELWITHDEBINFO
  900. CMAKE_OBJCXX_RELEASE
  901. CMAKE_OBJC_LINK_FLAGS
  902. CMAKE_OBJCXX_LINK_FLAGS
  903. )
  904. endif()
  905. set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
  906. set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks")
  907. set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
  908. set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
  909. set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
  910. set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
  911. set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
  912. set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
  913. # Set the find root to the SDK developer roots.
  914. # Note: CMAKE_FIND_ROOT_PATH is only useful when cross-compiling. Thus, do not set on macOS builds.
  915. if(NOT PLATFORM_INT MATCHES "^MAC.*$")
  916. list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
  917. set(CMAKE_IGNORE_PATH "/System/Library/Frameworks;/usr/local/lib" CACHE INTERNAL "")
  918. endif()
  919. # Default to searching for frameworks first.
  920. set(CMAKE_FIND_FRAMEWORK FIRST)
  921. # Set up the default search directories for frameworks.
  922. if(PLATFORM_INT MATCHES "^MAC_CATALYST")
  923. set(CMAKE_FRAMEWORK_PATH
  924. ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks
  925. ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks
  926. ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks
  927. ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "")
  928. else()
  929. set(CMAKE_FRAMEWORK_PATH
  930. ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks
  931. ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks
  932. ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "")
  933. endif()
  934. # By default, search both the specified iOS SDK and the remainder of the host filesystem.
  935. if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
  936. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
  937. endif()
  938. if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
  939. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH CACHE INTERNAL "")
  940. endif()
  941. if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
  942. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH CACHE INTERNAL "")
  943. endif()
  944. if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
  945. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH CACHE INTERNAL "")
  946. endif()
  947. #
  948. # Some helper-macros below to simplify and beautify the CMakeFile
  949. #
  950. # This little macro lets you set any Xcode specific property.
  951. macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION)
  952. set(XCODE_RELVERSION_I "${XCODE_RELVERSION}")
  953. if(XCODE_RELVERSION_I STREQUAL "All")
  954. set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}")
  955. else()
  956. set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}")
  957. endif()
  958. endmacro(set_xcode_property)
  959. # This macro lets you find executable programs on the host system.
  960. macro(find_host_package)
  961. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  962. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
  963. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
  964. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
  965. set(_TOOLCHAIN_IOS ${IOS})
  966. set(IOS OFF)
  967. find_package(${ARGN})
  968. set(IOS ${_TOOLCHAIN_IOS})
  969. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
  970. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
  971. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
  972. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
  973. endmacro(find_host_package)