RunCMakeTest.cmake 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. include(RunCMake)
  2. run_cmake(ExplicitCMakeLists)
  3. run_cmake(ImplicitCMakeLists)
  4. run_cmake(XcodeFileType)
  5. run_cmake(XcodeAttributeLocation)
  6. run_cmake(XcodeAttributeGenex)
  7. run_cmake(XcodeAttributeGenexError)
  8. run_cmake(XcodeGenerateTopLevelProjectOnly)
  9. run_cmake(XcodeObjectNeedsEscape)
  10. run_cmake(XcodeObjectNeedsQuote)
  11. run_cmake(XcodeOptimizationFlags)
  12. run_cmake(XcodePreserveNonOptimizationFlags)
  13. run_cmake(XcodePreserveObjcFlag)
  14. run_cmake(XcodePrecompileHeaders)
  15. if (NOT XCODE_VERSION VERSION_LESS 6)
  16. run_cmake(XcodePlatformFrameworks)
  17. endif()
  18. run_cmake(PerConfigPerSourceFlags)
  19. run_cmake(PerConfigPerSourceOptions)
  20. run_cmake(PerConfigPerSourceDefinitions)
  21. run_cmake(PerConfigPerSourceIncludeDirs)
  22. function(XcodeSchemaGeneration)
  23. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeSchemaGeneration-build)
  24. set(RunCMake_TEST_NO_CLEAN 1)
  25. set(RunCMake_TEST_OPTIONS "-DCMAKE_XCODE_GENERATE_SCHEME=ON")
  26. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  27. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  28. run_cmake(XcodeSchemaGeneration)
  29. run_cmake_command(XcodeSchemaGeneration-build xcodebuild -scheme foo build)
  30. endfunction()
  31. if(NOT XCODE_VERSION VERSION_LESS 7)
  32. XcodeSchemaGeneration()
  33. run_cmake(XcodeSchemaProperty)
  34. endif()
  35. function(XcodeDependOnZeroCheck)
  36. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeDependOnZeroCheck-build)
  37. set(RunCMake_TEST_NO_CLEAN 1)
  38. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  39. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  40. run_cmake(XcodeDependOnZeroCheck)
  41. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target parentdirlib)
  42. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target subdirlib)
  43. endfunction()
  44. XcodeDependOnZeroCheck()
  45. function(XcodeObjcxxFlags testName)
  46. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${testName}-build)
  47. set(RunCMake_TEST_NO_CLEAN 1)
  48. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  49. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  50. run_cmake(${testName})
  51. run_cmake_command(${testName}-build ${CMAKE_COMMAND} --build .)
  52. endfunction()
  53. XcodeObjcxxFlags(XcodeObjcFlags)
  54. XcodeObjcxxFlags(XcodeObjcxxFlags)
  55. # Isolate device tests from host architecture selection.
  56. unset(ENV{CMAKE_OSX_ARCHITECTURES})
  57. # Use a single build tree for a few tests without cleaning.
  58. if(NOT XCODE_VERSION VERSION_LESS 5)
  59. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeInstallIOS-build)
  60. set(RunCMake_TEST_NO_CLEAN 1)
  61. set(RunCMake_TEST_OPTIONS
  62. "-DCMAKE_SYSTEM_NAME=iOS"
  63. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/ios_install")
  64. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  65. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  66. run_cmake(XcodeInstallIOS)
  67. run_cmake_command(XcodeInstallIOS-install ${CMAKE_COMMAND} --build . --target install)
  68. unset(RunCMake_TEST_BINARY_DIR)
  69. unset(RunCMake_TEST_NO_CLEAN)
  70. unset(RunCMake_TEST_OPTIONS)
  71. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesOSX-build)
  72. set(RunCMake_TEST_NO_CLEAN 1)
  73. set(RunCMake_TEST_OPTIONS
  74. "-DCMAKE_SYSTEM_NAME=Darwin"
  75. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  76. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  77. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  78. run_cmake(XcodeBundles)
  79. run_cmake_command(XcodeBundles-build ${CMAKE_COMMAND} --build .)
  80. run_cmake_command(XcodeBundles-install ${CMAKE_COMMAND} --build . --target install)
  81. unset(RunCMake_TEST_BINARY_DIR)
  82. unset(RunCMake_TEST_NO_CLEAN)
  83. unset(RunCMake_TEST_OPTIONS)
  84. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesIOS-build)
  85. set(RunCMake_TEST_NO_CLEAN 1)
  86. set(RunCMake_TEST_OPTIONS
  87. "-DCMAKE_SYSTEM_NAME=iOS"
  88. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  89. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  90. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  91. run_cmake(XcodeBundles)
  92. run_cmake_command(XcodeBundles-build ${CMAKE_COMMAND} --build .)
  93. run_cmake_command(XcodeBundles-install ${CMAKE_COMMAND} --build . --target install)
  94. unset(RunCMake_TEST_BINARY_DIR)
  95. unset(RunCMake_TEST_NO_CLEAN)
  96. unset(RunCMake_TEST_OPTIONS)
  97. endif()
  98. if(NOT XCODE_VERSION VERSION_LESS 7)
  99. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesWatchOS-build)
  100. set(RunCMake_TEST_NO_CLEAN 1)
  101. set(RunCMake_TEST_OPTIONS
  102. "-DCMAKE_SYSTEM_NAME=watchOS"
  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.1)
  114. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesTvOS-build)
  115. set(RunCMake_TEST_NO_CLEAN 1)
  116. set(RunCMake_TEST_OPTIONS
  117. "-DCMAKE_SYSTEM_NAME=tvOS"
  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)
  129. set(RunCMake_TEST_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/osx.cmake")
  130. run_cmake(XcodeTbdStub)
  131. unset(RunCMake_TEST_OPTIONS)
  132. endif()
  133. if(NOT XCODE_VERSION VERSION_LESS 6)
  134. # XcodeIOSInstallCombined
  135. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombined-build)
  136. set(RunCMake_TEST_NO_CLEAN 1)
  137. set(RunCMake_TEST_OPTIONS
  138. "-DCMAKE_SYSTEM_NAME=iOS"
  139. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  140. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  141. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  142. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  143. run_cmake(XcodeIOSInstallCombined)
  144. run_cmake_command(XcodeIOSInstallCombined-build ${CMAKE_COMMAND} --build .)
  145. run_cmake_command(XcodeIOSInstallCombined-install ${CMAKE_COMMAND} --build . --target install)
  146. unset(RunCMake_TEST_BINARY_DIR)
  147. unset(RunCMake_TEST_NO_CLEAN)
  148. unset(RunCMake_TEST_OPTIONS)
  149. # XcodeIOSInstallCombinedPrune
  150. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedPrune-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(XcodeIOSInstallCombinedPrune)
  159. run_cmake_command(XcodeIOSInstallCombinedPrune-build ${CMAKE_COMMAND} --build .)
  160. run_cmake_command(XcodeIOSInstallCombinedPrune-install ${CMAKE_COMMAND} --build . --target install)
  161. unset(RunCMake_TEST_BINARY_DIR)
  162. unset(RunCMake_TEST_NO_CLEAN)
  163. unset(RunCMake_TEST_OPTIONS)
  164. # XcodeIOSInstallCombinedSingleArch
  165. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedSingleArch-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(XcodeIOSInstallCombinedSingleArch)
  174. run_cmake_command(XcodeIOSInstallCombinedSingleArch-build ${CMAKE_COMMAND} --build .)
  175. run_cmake_command(XcodeIOSInstallCombinedSingleArch-install ${CMAKE_COMMAND} --build . --target install)
  176. unset(RunCMake_TEST_BINARY_DIR)
  177. unset(RunCMake_TEST_NO_CLEAN)
  178. unset(RunCMake_TEST_OPTIONS)
  179. endif()
  180. if(NOT XCODE_VERSION VERSION_LESS 5)
  181. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeMultiplatform-build)
  182. set(RunCMake_TEST_NO_CLEAN 1)
  183. set(RunCMake_TEST_OPTIONS "${IOS_DEPLOYMENT_TARGET}")
  184. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  185. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  186. run_cmake(XcodeMultiplatform)
  187. # build ios before macos
  188. run_cmake_command(XcodeMultiplatform-iphonesimulator-build ${CMAKE_COMMAND} --build . -- -sdk iphonesimulator)
  189. run_cmake_command(XcodeMultiplatform-iphonesimulator-install ${CMAKE_COMMAND} --build . --target install -- -sdk iphonesimulator DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_iphonesimulator)
  190. run_cmake_command(XcodeMultiplatform-macosx-build ${CMAKE_COMMAND} --build . -- -sdk macosx)
  191. run_cmake_command(XcodeMultiplatform-macosx-install ${CMAKE_COMMAND} --build . --target install -- -sdk macosx DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_macosx)
  192. unset(RunCMake_TEST_BINARY_DIR)
  193. unset(RunCMake_TEST_NO_CLEAN)
  194. unset(RunCMake_TEST_OPTIONS)
  195. endif()
  196. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  197. function(deployment_target_test SystemName SDK)
  198. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/DeploymentTarget-${SDK}-build)
  199. set(RunCMake_TEST_NO_CLEAN 1)
  200. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  201. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  202. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  203. run_cmake(DeploymentTarget)
  204. run_cmake_command(DeploymentTarget-${SDK} ${CMAKE_COMMAND} --build .)
  205. endfunction()
  206. deployment_target_test(Darwin macosx)
  207. deployment_target_test(iOS iphoneos)
  208. deployment_target_test(iOS iphonesimulator)
  209. deployment_target_test(tvOS appletvos)
  210. deployment_target_test(tvOS appletvsimulator)
  211. deployment_target_test(watchOS watchos)
  212. deployment_target_test(watchOS watchsimulator)
  213. endif()
  214. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  215. function(xctest_lookup_test SystemName SDK)
  216. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XCTestLookup-${SDK}-build)
  217. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  218. run_cmake(XCTestLookup)
  219. endfunction()
  220. xctest_lookup_test(Darwin macosx)
  221. xctest_lookup_test(iOS iphoneos)
  222. xctest_lookup_test(iOS iphonesimulator)
  223. xctest_lookup_test(tvOS appletvos)
  224. xctest_lookup_test(tvOS appletvsimulator)
  225. endif()
  226. # Please add macOS-only tests above before the device-specific tests.