RunCMakeTest.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. include(RunCMake)
  2. run_cmake(ExplicitCMakeLists)
  3. run_cmake(ImplicitCMakeLists)
  4. run_cmake(InterfaceLibSources)
  5. run_cmake(XcodeFileType)
  6. run_cmake(XcodeAttributeLocation)
  7. run_cmake(XcodeAttributeGenex)
  8. run_cmake(XcodeAttributeGenexError)
  9. run_cmake(XcodeGenerateTopLevelProjectOnly)
  10. if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
  11. run_cmake(XcodeDuplicateCustomCommand)
  12. endif()
  13. function(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary)
  14. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeGenerateTopLevelProjectOnlyWithObjectLibrary-build)
  15. run_cmake(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary)
  16. set(RunCMake_TEST_NO_CLEAN 1)
  17. run_cmake_command(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary-build ${CMAKE_COMMAND} --build . --target shared_lib)
  18. endfunction()
  19. XcodeGenerateTopLevelProjectOnlyWithObjectLibrary()
  20. function(LinkBinariesBuildPhase mode)
  21. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/LinkBinariesBuildPhase_${mode}-build)
  22. set(RunCMake_TEST_OPTIONS "-DCMAKE_XCODE_LINK_BUILD_PHASE_MODE=${mode}")
  23. run_cmake(LinkBinariesBuildPhase_${mode})
  24. set(RunCMake_TEST_NO_CLEAN 1)
  25. run_cmake_command(LinkBinariesBuildPhase_${mode}-build ${CMAKE_COMMAND} --build .)
  26. endfunction()
  27. LinkBinariesBuildPhase(NONE)
  28. LinkBinariesBuildPhase(BUILT_ONLY)
  29. LinkBinariesBuildPhase(KNOWN_LOCATION)
  30. run_cmake(LinkBinariesBuildPhase_INVALID)
  31. run_cmake(XcodeObjectNeedsEscape)
  32. run_cmake(XcodeObjectNeedsQuote)
  33. run_cmake(XcodeOptimizationFlags)
  34. run_cmake(XcodePreserveNonOptimizationFlags)
  35. run_cmake(XcodePreserveObjcFlag)
  36. run_cmake(XcodePrecompileHeaders)
  37. if (NOT XCODE_VERSION VERSION_LESS 6)
  38. run_cmake(XcodePlatformFrameworks)
  39. endif()
  40. run_cmake(PerConfigPerSourceFlags)
  41. run_cmake(PerConfigPerSourceOptions)
  42. run_cmake(PerConfigPerSourceDefinitions)
  43. run_cmake(PerConfigPerSourceIncludeDirs)
  44. function(XcodeSchemaGeneration)
  45. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeSchemaGeneration-build)
  46. set(RunCMake_TEST_NO_CLEAN 1)
  47. set(RunCMake_TEST_OPTIONS "-DCMAKE_XCODE_GENERATE_SCHEME=ON")
  48. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  49. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  50. run_cmake(XcodeSchemaGeneration)
  51. run_cmake_command(XcodeSchemaGeneration-build xcodebuild -scheme foo build)
  52. endfunction()
  53. if(NOT XCODE_VERSION VERSION_LESS 7)
  54. XcodeSchemaGeneration()
  55. run_cmake(XcodeSchemaProperty)
  56. endif()
  57. function(XcodeDependOnZeroCheck)
  58. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeDependOnZeroCheck-build)
  59. set(RunCMake_TEST_NO_CLEAN 1)
  60. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  61. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  62. run_cmake(XcodeDependOnZeroCheck)
  63. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target parentdirlib)
  64. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target subdirlib)
  65. endfunction()
  66. XcodeDependOnZeroCheck()
  67. function(XcodeObjcxxFlags testName)
  68. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${testName}-build)
  69. set(RunCMake_TEST_NO_CLEAN 1)
  70. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  71. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  72. run_cmake(${testName})
  73. run_cmake_command(${testName}-build ${CMAKE_COMMAND} --build .)
  74. endfunction()
  75. XcodeObjcxxFlags(XcodeObjcFlags)
  76. XcodeObjcxxFlags(XcodeObjcxxFlags)
  77. function(XcodeRemoveExcessiveISystem)
  78. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeRemoveExcessiveISystem-build)
  79. run_cmake(XcodeRemoveExcessiveISystem)
  80. set(RunCMake_TEST_NO_CLEAN 1)
  81. run_cmake_command(XcodeRemoveExcessiveISystem-build ${CMAKE_COMMAND} --build .)
  82. endfunction()
  83. XcodeRemoveExcessiveISystem()
  84. # Isolate device tests from host architecture selection.
  85. unset(ENV{CMAKE_OSX_ARCHITECTURES})
  86. # Use a single build tree for a few tests without cleaning.
  87. if(NOT XCODE_VERSION VERSION_LESS 5)
  88. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeInstallIOS-build)
  89. set(RunCMake_TEST_NO_CLEAN 1)
  90. set(RunCMake_TEST_OPTIONS
  91. "-DCMAKE_SYSTEM_NAME=iOS"
  92. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/ios_install")
  93. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  94. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  95. run_cmake(XcodeInstallIOS)
  96. run_cmake_command(XcodeInstallIOS-install ${CMAKE_COMMAND} --build . --target install)
  97. unset(RunCMake_TEST_BINARY_DIR)
  98. unset(RunCMake_TEST_NO_CLEAN)
  99. unset(RunCMake_TEST_OPTIONS)
  100. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesOSX-build)
  101. set(RunCMake_TEST_NO_CLEAN 1)
  102. set(RunCMake_TEST_OPTIONS
  103. "-DCMAKE_SYSTEM_NAME=Darwin"
  104. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  105. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  106. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  107. run_cmake(XcodeBundles)
  108. run_cmake_command(XcodeBundles-build-macOS ${CMAKE_COMMAND} --build .)
  109. run_cmake_command(XcodeBundles-install-macOS ${CMAKE_COMMAND} --build . --target install)
  110. unset(RunCMake_TEST_BINARY_DIR)
  111. unset(RunCMake_TEST_NO_CLEAN)
  112. unset(RunCMake_TEST_OPTIONS)
  113. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesIOS-build)
  114. set(RunCMake_TEST_NO_CLEAN 1)
  115. set(RunCMake_TEST_OPTIONS
  116. "-DCMAKE_SYSTEM_NAME=iOS"
  117. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  118. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  119. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  120. run_cmake(XcodeBundles)
  121. run_cmake_command(XcodeBundles-build-iOS ${CMAKE_COMMAND} --build .)
  122. run_cmake_command(XcodeBundles-install-iOS ${CMAKE_COMMAND} --build . --target install)
  123. unset(RunCMake_TEST_BINARY_DIR)
  124. unset(RunCMake_TEST_NO_CLEAN)
  125. unset(RunCMake_TEST_OPTIONS)
  126. endif()
  127. if(NOT XCODE_VERSION VERSION_LESS 7)
  128. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesWatchOS-build)
  129. set(RunCMake_TEST_NO_CLEAN 1)
  130. set(RunCMake_TEST_OPTIONS
  131. "-DCMAKE_SYSTEM_NAME=watchOS"
  132. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  133. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  134. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  135. run_cmake(XcodeBundles)
  136. run_cmake_command(XcodeBundles-build-watchOS ${CMAKE_COMMAND} --build .)
  137. run_cmake_command(XcodeBundles-install-watchOS ${CMAKE_COMMAND} --build . --target install)
  138. unset(RunCMake_TEST_BINARY_DIR)
  139. unset(RunCMake_TEST_NO_CLEAN)
  140. unset(RunCMake_TEST_OPTIONS)
  141. endif()
  142. if(NOT XCODE_VERSION VERSION_LESS 7.1)
  143. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesTvOS-build)
  144. set(RunCMake_TEST_NO_CLEAN 1)
  145. set(RunCMake_TEST_OPTIONS
  146. "-DCMAKE_SYSTEM_NAME=tvOS"
  147. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  148. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  149. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  150. run_cmake(XcodeBundles)
  151. run_cmake_command(XcodeBundles-build-tvOS ${CMAKE_COMMAND} --build .)
  152. run_cmake_command(XcodeBundles-install-tvOS ${CMAKE_COMMAND} --build . --target install)
  153. unset(RunCMake_TEST_BINARY_DIR)
  154. unset(RunCMake_TEST_NO_CLEAN)
  155. unset(RunCMake_TEST_OPTIONS)
  156. endif()
  157. if(NOT XCODE_VERSION VERSION_LESS 7)
  158. set(RunCMake_TEST_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/osx.cmake")
  159. run_cmake(XcodeTbdStub)
  160. unset(RunCMake_TEST_OPTIONS)
  161. endif()
  162. if(XCODE_VERSION VERSION_GREATER_EQUAL 6)
  163. # XcodeIOSInstallCombined
  164. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombined-build)
  165. set(RunCMake_TEST_NO_CLEAN 1)
  166. set(RunCMake_TEST_OPTIONS
  167. "-DCMAKE_SYSTEM_NAME=iOS"
  168. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  169. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  170. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  171. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  172. run_cmake(XcodeIOSInstallCombined)
  173. run_cmake_command(XcodeIOSInstallCombined-build ${CMAKE_COMMAND} --build .)
  174. if(XCODE_VERSION VERSION_LESS 12)
  175. run_cmake_command(XcodeIOSInstallCombined-install ${CMAKE_COMMAND} --build . --target install)
  176. endif()
  177. # --build defaults to Debug, --install defaults to Release, so we have to
  178. # specify the configuration explicitly
  179. run_cmake_command(XcodeIOSInstallCombined-cmakeinstall
  180. ${CMAKE_COMMAND} --install . --config Debug
  181. )
  182. unset(RunCMake_TEST_BINARY_DIR)
  183. unset(RunCMake_TEST_NO_CLEAN)
  184. unset(RunCMake_TEST_OPTIONS)
  185. # XcodeIOSInstallCombinedPrune
  186. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedPrune-build)
  187. set(RunCMake_TEST_NO_CLEAN 1)
  188. set(RunCMake_TEST_OPTIONS
  189. "-DCMAKE_SYSTEM_NAME=iOS"
  190. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  191. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  192. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  193. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  194. run_cmake(XcodeIOSInstallCombinedPrune)
  195. run_cmake_command(XcodeIOSInstallCombinedPrune-build ${CMAKE_COMMAND} --build .)
  196. if(XCODE_VERSION VERSION_LESS 12)
  197. run_cmake_command(XcodeIOSInstallCombinedPrune-install ${CMAKE_COMMAND} --build . --target install)
  198. endif()
  199. # --build defaults to Debug, --install defaults to Release, so we have to
  200. # specify the configuration explicitly
  201. run_cmake_command(XcodeIOSInstallCombinedPrune-cmakeinstall
  202. ${CMAKE_COMMAND} --install . --config Debug
  203. )
  204. unset(RunCMake_TEST_BINARY_DIR)
  205. unset(RunCMake_TEST_NO_CLEAN)
  206. unset(RunCMake_TEST_OPTIONS)
  207. # XcodeIOSInstallCombinedSingleArch
  208. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedSingleArch-build)
  209. set(RunCMake_TEST_NO_CLEAN 1)
  210. set(RunCMake_TEST_OPTIONS
  211. "-DCMAKE_SYSTEM_NAME=iOS"
  212. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  213. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  214. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  215. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  216. run_cmake(XcodeIOSInstallCombinedSingleArch)
  217. run_cmake_command(XcodeIOSInstallCombinedSingleArch-build ${CMAKE_COMMAND} --build .)
  218. if(XCODE_VERSION VERSION_LESS 12)
  219. run_cmake_command(XcodeIOSInstallCombinedSingleArch-install ${CMAKE_COMMAND} --build . --target install)
  220. endif()
  221. # --build defaults to Debug, --install defaults to Release, so we have to
  222. # specify the configuration explicitly
  223. run_cmake_command(XcodeIOSInstallCombinedSingleArch-cmakeinstall
  224. ${CMAKE_COMMAND} --install . --config Debug
  225. )
  226. unset(RunCMake_TEST_BINARY_DIR)
  227. unset(RunCMake_TEST_NO_CLEAN)
  228. unset(RunCMake_TEST_OPTIONS)
  229. endif()
  230. if(NOT XCODE_VERSION VERSION_LESS 5)
  231. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeMultiplatform-build)
  232. set(RunCMake_TEST_NO_CLEAN 1)
  233. set(RunCMake_TEST_OPTIONS "${IOS_DEPLOYMENT_TARGET}")
  234. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  235. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  236. run_cmake(XcodeMultiplatform)
  237. # build ios before macos
  238. run_cmake_command(XcodeMultiplatform-iphonesimulator-build ${CMAKE_COMMAND} --build . -- -sdk iphonesimulator)
  239. run_cmake_command(XcodeMultiplatform-iphonesimulator-install ${CMAKE_COMMAND} --build . --target install -- -sdk iphonesimulator DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_iphonesimulator)
  240. run_cmake_command(XcodeMultiplatform-macosx-build ${CMAKE_COMMAND} --build . -- -sdk macosx)
  241. run_cmake_command(XcodeMultiplatform-macosx-install ${CMAKE_COMMAND} --build . --target install -- -sdk macosx DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_macosx)
  242. unset(RunCMake_TEST_BINARY_DIR)
  243. unset(RunCMake_TEST_NO_CLEAN)
  244. unset(RunCMake_TEST_OPTIONS)
  245. endif()
  246. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  247. function(deployment_target_test SystemName SDK)
  248. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/DeploymentTarget-${SDK}-build)
  249. set(RunCMake_TEST_NO_CLEAN 1)
  250. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  251. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  252. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  253. run_cmake(DeploymentTarget)
  254. run_cmake_command(DeploymentTarget-${SDK} ${CMAKE_COMMAND} --build .)
  255. endfunction()
  256. deployment_target_test(Darwin macosx)
  257. deployment_target_test(iOS iphoneos)
  258. deployment_target_test(iOS iphonesimulator)
  259. deployment_target_test(tvOS appletvos)
  260. deployment_target_test(tvOS appletvsimulator)
  261. deployment_target_test(watchOS watchos)
  262. deployment_target_test(watchOS watchsimulator)
  263. endif()
  264. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  265. function(xctest_lookup_test SystemName SDK)
  266. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XCTestLookup-${SDK}-build)
  267. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  268. run_cmake(XCTestLookup)
  269. endfunction()
  270. xctest_lookup_test(Darwin macosx)
  271. xctest_lookup_test(iOS iphoneos)
  272. xctest_lookup_test(iOS iphonesimulator)
  273. xctest_lookup_test(tvOS appletvos)
  274. xctest_lookup_test(tvOS appletvsimulator)
  275. endif()
  276. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  277. function(XcodeRemoveExcessiveISystemSDK SDK)
  278. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeRemoveExcessiveISystemSDK-${SDK}-build)
  279. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=iOS" "-DCMAKE_OSX_SYSROOT=${SDK}")
  280. run_cmake(XcodeRemoveExcessiveISystem)
  281. set(RunCMake_TEST_NO_CLEAN 1)
  282. run_cmake_command(XcodeRemoveExcessiveISystemSDK-${SDK}-build ${CMAKE_COMMAND} --build .)
  283. endfunction()
  284. XcodeRemoveExcessiveISystemSDK(iphoneos)
  285. XcodeRemoveExcessiveISystemSDK(iphonesimulator)
  286. endif()
  287. # Please add macOS-only tests above before the device-specific tests.