RunCMakeTest.cmake 14 KB

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