RunCMakeTest.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. include(RunCMake)
  2. # Isolate device tests from host architecture selection.
  3. unset(ENV{CMAKE_OSX_ARCHITECTURES})
  4. if(NOT XCODE_VERSION VERSION_LESS 5)
  5. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeInstallIOS-build)
  6. set(RunCMake_TEST_NO_CLEAN 1)
  7. set(RunCMake_TEST_OPTIONS
  8. "-DCMAKE_SYSTEM_NAME=iOS"
  9. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/ios_install")
  10. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  11. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  12. run_cmake(XcodeInstallIOS)
  13. run_cmake_command(XcodeInstallIOS-install ${CMAKE_COMMAND} --build . --target install)
  14. unset(RunCMake_TEST_BINARY_DIR)
  15. unset(RunCMake_TEST_NO_CLEAN)
  16. unset(RunCMake_TEST_OPTIONS)
  17. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesOSX-build)
  18. set(RunCMake_TEST_NO_CLEAN 1)
  19. set(RunCMake_TEST_OPTIONS
  20. "-DCMAKE_SYSTEM_NAME=Darwin"
  21. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  22. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  23. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  24. run_cmake(XcodeBundles)
  25. run_cmake_command(XcodeBundles-build-macOS ${CMAKE_COMMAND} --build .)
  26. run_cmake_command(XcodeBundles-install-macOS ${CMAKE_COMMAND} --build . --target install)
  27. unset(RunCMake_TEST_BINARY_DIR)
  28. unset(RunCMake_TEST_NO_CLEAN)
  29. unset(RunCMake_TEST_OPTIONS)
  30. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesIOS-build)
  31. set(RunCMake_TEST_NO_CLEAN 1)
  32. set(RunCMake_TEST_OPTIONS
  33. "-DCMAKE_SYSTEM_NAME=iOS"
  34. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  35. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  36. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  37. run_cmake(XcodeBundles)
  38. run_cmake_command(XcodeBundles-build-iOS ${CMAKE_COMMAND} --build .)
  39. run_cmake_command(XcodeBundles-install-iOS ${CMAKE_COMMAND} --build . --target install)
  40. unset(RunCMake_TEST_BINARY_DIR)
  41. unset(RunCMake_TEST_NO_CLEAN)
  42. unset(RunCMake_TEST_OPTIONS)
  43. endif()
  44. if(NOT XCODE_VERSION VERSION_LESS 7)
  45. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesWatchOS-build)
  46. set(RunCMake_TEST_NO_CLEAN 1)
  47. set(RunCMake_TEST_OPTIONS
  48. "-DCMAKE_SYSTEM_NAME=watchOS"
  49. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  50. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  51. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  52. run_cmake(XcodeBundles)
  53. run_cmake_command(XcodeBundles-build-watchOS ${CMAKE_COMMAND} --build .)
  54. run_cmake_command(XcodeBundles-install-watchOS ${CMAKE_COMMAND} --build . --target install)
  55. unset(RunCMake_TEST_BINARY_DIR)
  56. unset(RunCMake_TEST_NO_CLEAN)
  57. unset(RunCMake_TEST_OPTIONS)
  58. endif()
  59. if(NOT XCODE_VERSION VERSION_LESS 7.1)
  60. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesTvOS-build)
  61. set(RunCMake_TEST_NO_CLEAN 1)
  62. set(RunCMake_TEST_OPTIONS
  63. "-DCMAKE_SYSTEM_NAME=tvOS"
  64. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  65. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  66. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  67. run_cmake(XcodeBundles)
  68. run_cmake_command(XcodeBundles-build-tvOS ${CMAKE_COMMAND} --build .)
  69. run_cmake_command(XcodeBundles-install-tvOS ${CMAKE_COMMAND} --build . --target install)
  70. unset(RunCMake_TEST_BINARY_DIR)
  71. unset(RunCMake_TEST_NO_CLEAN)
  72. unset(RunCMake_TEST_OPTIONS)
  73. endif()
  74. if(NOT XCODE_VERSION VERSION_LESS 15.2)
  75. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesVisionOS-build)
  76. set(RunCMake_TEST_NO_CLEAN 1)
  77. set(RunCMake_TEST_OPTIONS
  78. "-DCMAKE_SYSTEM_NAME=visionOS"
  79. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  80. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  81. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  82. run_cmake(XcodeBundles)
  83. run_cmake_command(XcodeBundles-build-visionOS ${CMAKE_COMMAND} --build .)
  84. run_cmake_command(XcodeBundles-install-visionOS ${CMAKE_COMMAND} --build . --target install)
  85. unset(RunCMake_TEST_BINARY_DIR)
  86. unset(RunCMake_TEST_NO_CLEAN)
  87. unset(RunCMake_TEST_OPTIONS)
  88. endif()
  89. if(NOT XCODE_VERSION VERSION_LESS 7)
  90. set(RunCMake_TEST_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/osx.cmake")
  91. run_cmake(XcodeTbdStub)
  92. unset(RunCMake_TEST_OPTIONS)
  93. endif()
  94. if(XCODE_VERSION VERSION_GREATER_EQUAL 6)
  95. # XcodeIOSInstallCombined
  96. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombined-build)
  97. set(RunCMake_TEST_NO_CLEAN 1)
  98. set(RunCMake_TEST_OPTIONS
  99. "-DCMAKE_SYSTEM_NAME=iOS"
  100. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  101. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  102. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  103. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  104. run_cmake(XcodeIOSInstallCombined)
  105. run_cmake_command(XcodeIOSInstallCombined-build ${CMAKE_COMMAND} --build .)
  106. if(XCODE_VERSION VERSION_LESS 12)
  107. run_cmake_command(XcodeIOSInstallCombined-install ${CMAKE_COMMAND} --build . --target install)
  108. endif()
  109. # --build defaults to Debug, --install defaults to Release, so we have to
  110. # specify the configuration explicitly
  111. run_cmake_command(XcodeIOSInstallCombined-cmakeinstall
  112. ${CMAKE_COMMAND} --install . --config Debug
  113. )
  114. unset(RunCMake_TEST_BINARY_DIR)
  115. unset(RunCMake_TEST_NO_CLEAN)
  116. unset(RunCMake_TEST_OPTIONS)
  117. # XcodeIOSInstallCombinedPrune
  118. # FIXME(#24011): Xcode 14 removed support for older architectures the test needs.
  119. if(XCODE_VERSION VERSION_LESS 14)
  120. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedPrune-build)
  121. set(RunCMake_TEST_NO_CLEAN 1)
  122. set(RunCMake_TEST_OPTIONS
  123. "-DCMAKE_SYSTEM_NAME=iOS"
  124. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  125. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  126. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  127. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  128. run_cmake(XcodeIOSInstallCombinedPrune)
  129. run_cmake_command(XcodeIOSInstallCombinedPrune-build ${CMAKE_COMMAND} --build .)
  130. if(XCODE_VERSION VERSION_LESS 12)
  131. run_cmake_command(XcodeIOSInstallCombinedPrune-install ${CMAKE_COMMAND} --build . --target install)
  132. endif()
  133. # --build defaults to Debug, --install defaults to Release, so we have to
  134. # specify the configuration explicitly
  135. run_cmake_command(XcodeIOSInstallCombinedPrune-cmakeinstall
  136. ${CMAKE_COMMAND} --install . --config Debug
  137. )
  138. unset(RunCMake_TEST_BINARY_DIR)
  139. unset(RunCMake_TEST_NO_CLEAN)
  140. unset(RunCMake_TEST_OPTIONS)
  141. endif()
  142. # XcodeIOSInstallCombinedSingleArch
  143. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedSingleArch-build)
  144. set(RunCMake_TEST_NO_CLEAN 1)
  145. set(RunCMake_TEST_OPTIONS
  146. "-DCMAKE_SYSTEM_NAME=iOS"
  147. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  148. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  149. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  150. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  151. run_cmake(XcodeIOSInstallCombinedSingleArch)
  152. run_cmake_command(XcodeIOSInstallCombinedSingleArch-build ${CMAKE_COMMAND} --build .)
  153. if(XCODE_VERSION VERSION_LESS 12)
  154. run_cmake_command(XcodeIOSInstallCombinedSingleArch-install ${CMAKE_COMMAND} --build . --target install)
  155. endif()
  156. # --build defaults to Debug, --install defaults to Release, so we have to
  157. # specify the configuration explicitly
  158. run_cmake_command(XcodeIOSInstallCombinedSingleArch-cmakeinstall
  159. ${CMAKE_COMMAND} --install . --config Debug
  160. )
  161. unset(RunCMake_TEST_BINARY_DIR)
  162. unset(RunCMake_TEST_NO_CLEAN)
  163. unset(RunCMake_TEST_OPTIONS)
  164. endif()
  165. if(NOT XCODE_VERSION VERSION_LESS 5)
  166. # XcodeMultiplatform
  167. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeMultiplatform-build)
  168. set(RunCMake_TEST_NO_CLEAN 1)
  169. set(RunCMake_TEST_OPTIONS "${IOS_DEPLOYMENT_TARGET}")
  170. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  171. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  172. run_cmake(XcodeMultiplatform)
  173. # build ios before macos
  174. run_cmake_command(XcodeMultiplatform-iphonesimulator-build ${CMAKE_COMMAND} --build . -- -sdk iphonesimulator)
  175. run_cmake_command(XcodeMultiplatform-iphonesimulator-install ${CMAKE_COMMAND} --build . --target install -- -sdk iphonesimulator DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_iphonesimulator)
  176. run_cmake_command(XcodeMultiplatform-macosx-build ${CMAKE_COMMAND} --build . -- -sdk macosx)
  177. run_cmake_command(XcodeMultiplatform-macosx-install ${CMAKE_COMMAND} --build . --target install -- -sdk macosx DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_macosx)
  178. unset(RunCMake_TEST_BINARY_DIR)
  179. unset(RunCMake_TEST_NO_CLEAN)
  180. unset(RunCMake_TEST_OPTIONS)
  181. # EffectivePlatformNameOFF
  182. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/EffectivePlatformNameOFF-build)
  183. set(RunCMake_TEST_NO_CLEAN 1)
  184. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=iOS" "-DCMAKE_OSX_SYSROOT=iphonesimulator")
  185. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  186. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  187. run_cmake(EffectivePlatformNameOFF)
  188. run_cmake_command(EffectivePlatformNameOFF-iphonesimulator-build ${CMAKE_COMMAND} --build .)
  189. run_cmake_command(EffectivePlatformNameOFF-iphonesimulator-install ${CMAKE_COMMAND} --build . --target install -- DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_iphonesimulator)
  190. unset(RunCMake_TEST_BINARY_DIR)
  191. unset(RunCMake_TEST_NO_CLEAN)
  192. unset(RunCMake_TEST_OPTIONS)
  193. endif()
  194. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  195. function(deployment_target_test SystemName SDK)
  196. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/DeploymentTarget-${SDK}-build)
  197. set(RunCMake_TEST_NO_CLEAN 1)
  198. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  199. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  200. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  201. run_cmake(DeploymentTarget)
  202. run_cmake_command(DeploymentTarget-${SDK} ${CMAKE_COMMAND} --build .)
  203. endfunction()
  204. deployment_target_test(Darwin macosx)
  205. deployment_target_test(iOS iphoneos)
  206. deployment_target_test(iOS iphonesimulator)
  207. deployment_target_test(tvOS appletvos)
  208. deployment_target_test(tvOS appletvsimulator)
  209. deployment_target_test(watchOS watchos)
  210. deployment_target_test(watchOS watchsimulator)
  211. if(XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
  212. deployment_target_test(visionOS xros)
  213. deployment_target_test(visionOS xrsimulator)
  214. endif()
  215. endif()
  216. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  217. function(xctest_lookup_test SystemName SDK)
  218. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XCTestLookup-${SDK}-build)
  219. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  220. run_cmake(XCTestLookup)
  221. endfunction()
  222. xctest_lookup_test(Darwin macosx)
  223. xctest_lookup_test(iOS iphoneos)
  224. xctest_lookup_test(iOS iphonesimulator)
  225. xctest_lookup_test(tvOS appletvos)
  226. xctest_lookup_test(tvOS appletvsimulator)
  227. endif()
  228. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  229. function(XcodeRemoveExcessiveISystemSDK SDK)
  230. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeRemoveExcessiveISystemSDK-${SDK}-build)
  231. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=iOS" "-DCMAKE_OSX_SYSROOT=${SDK}")
  232. run_cmake(XcodeRemoveExcessiveISystem)
  233. set(RunCMake_TEST_NO_CLEAN 1)
  234. run_cmake_command(XcodeRemoveExcessiveISystemSDK-${SDK}-build ${CMAKE_COMMAND} --build .)
  235. endfunction()
  236. XcodeRemoveExcessiveISystemSDK(iphoneos)
  237. XcodeRemoveExcessiveISystemSDK(iphonesimulator)
  238. endif()
  239. if (XCODE_VERSION VERSION_GREATER_EQUAL 7.3)
  240. function(xctest_add_bundle_test SystemName SDK BuildSystemVersion ExpectedOutputDir)
  241. set(RunCMake_TEST_BINARY_DIR
  242. ${RunCMake_BINARY_DIR}/DeploymentTarget-${SystemName}-${SDK}-${BuildSystemVersion}-build)
  243. set(RunCMake_TEST_OPTIONS
  244. "-DCMAKE_SYSTEM_NAME=${SystemName}"
  245. "-DCMAKE_OSX_SYSROOT=${SDK}"
  246. "-DTEST_EXPECTED_OUTPUT_DIR=${ExpectedOutputDir}")
  247. unset(RunCMake_GENERATOR_TOOLSET)
  248. if(BuildSystemVersion)
  249. set(RunCMake_GENERATOR_TOOLSET "buildsystem=${BuildSystemVersion}")
  250. endif()
  251. set(RunCMake_TEST_VARIANT_DESCRIPTION "-${SystemName}-${SDK}")
  252. run_cmake(XCTestAddBundle)
  253. endfunction()
  254. if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
  255. xctest_add_bundle_test(Darwin macosx "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  256. if(XCODE_VERSION VERSION_LESS 14)
  257. xctest_add_bundle_test(Darwin macosx "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  258. xctest_add_bundle_test(iOS iphonesimulator "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  259. endif()
  260. if (XCODE_VERSION VERSION_LESS 12.5)
  261. xctest_add_bundle_test(iOS iphonesimulator "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>")
  262. else()
  263. xctest_add_bundle_test(iOS iphonesimulator "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  264. endif()
  265. else()
  266. xctest_add_bundle_test(Darwin macosx "" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  267. xctest_add_bundle_test(iOS iphonesimulator "" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  268. endif()
  269. endif()