1
0

RunCMakeTest.cmake 12 KB

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