1
0

RunCMakeTest.cmake 12 KB

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