SuperBuild.cmake 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. ###########################################################################
  2. #
  3. # Library: CTK
  4. #
  5. # Copyright (c) 2010 Kitware Inc.
  6. #
  7. # Licensed under the Apache License, Version 2.0 (the "License");
  8. # you may not use this file except in compliance with the License.
  9. # You may obtain a copy of the License at
  10. #
  11. # http://www.commontk.org/LICENSE
  12. #
  13. # Unless required by applicable law or agreed to in writing, software
  14. # distributed under the License is distributed on an "AS IS" BASIS,
  15. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. # See the License for the specific language governing permissions and
  17. # limitations under the License.
  18. #
  19. ###########################################################################
  20. #
  21. # CTK_KWSTYLE_EXECUTABLE
  22. # DCMTK_DIR
  23. # QT_QMAKE_EXECUTABLE
  24. # VTK_DIR
  25. # PYTHONQT_INSTALL_DIR
  26. # PYTHON_LIBRARY
  27. # PYTHON_INCLUDE_DIR
  28. #
  29. #-----------------------------------------------------------------------------
  30. # Make sure ${CTK_BINARY_DIR}/CTK-build/bin exists
  31. # May be used by some external project to install libs (e.g QtMobility)
  32. IF(NOT EXISTS ${CTK_BINARY_DIR}/CTK-build/bin)
  33. FILE(MAKE_DIRECTORY ${CTK_BINARY_DIR}/CTK-build/bin)
  34. ENDIF()
  35. #-----------------------------------------------------------------------------
  36. # Enable and setup External project global properties
  37. #
  38. INCLUDE(ExternalProject)
  39. SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals")
  40. SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base})
  41. SET(ep_install_dir ${ep_base}/Install)
  42. SET(ep_build_dir ${ep_base}/Build)
  43. SET(ep_source_dir ${ep_base}/Source)
  44. #SET(ep_parallelism_level)
  45. SET(ep_build_shared_libs ON)
  46. SET(ep_build_testing OFF)
  47. SET(ep_common_args
  48. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  49. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  50. -DBUILD_TESTING:BOOL=${ep_build_testing}
  51. )
  52. # Compute -G arg for configuring external projects with the same CMake generator:
  53. IF(CMAKE_EXTRA_GENERATOR)
  54. SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
  55. ELSE()
  56. SET(gen "${CMAKE_GENERATOR}")
  57. ENDIF()
  58. # Use this value where semi-colons are needed in ep_add args:
  59. set(sep "^^")
  60. #-----------------------------------------------------------------------------
  61. # Collect CTK library target dependencies
  62. #
  63. ctkMacroCollectAllTargetLibraries("${CTK_LIBS_SUBDIRS}" "Libs" ALL_TARGET_LIBRARIES)
  64. ctkMacroCollectAllTargetLibraries("${CTK_PLUGINS_SUBDIRS}" "Plugins" ALL_TARGET_LIBRARIES)
  65. ctkMacroCollectAllTargetLibraries("${CTK_APPLICATIONS_SUBDIRS}" "Applications" ALL_TARGET_LIBRARIES)
  66. #MESSAGE(STATUS ALL_TARGET_LIBRARIES:${ALL_TARGET_LIBRARIES})
  67. #-----------------------------------------------------------------------------
  68. # Initialize NON_CTK_DEPENDENCIES variable
  69. #
  70. # Using the variable ALL_TARGET_LIBRARIES initialized above with the help
  71. # of the macro ctkMacroCollectAllTargetLibraries, let's get the list of all Non-CTK dependencies.
  72. # NON_CTK_DEPENDENCIES is expected by the macro ctkMacroShouldAddExternalProject
  73. ctkMacroGetAllNonCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" NON_CTK_DEPENDENCIES)
  74. #MESSAGE(STATUS NON_CTK_DEPENDENCIES:${NON_CTK_DEPENDENCIES})
  75. #-----------------------------------------------------------------------------
  76. # Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
  77. #
  78. #-----------------------------------------------------------------------------
  79. # ExternalProjects
  80. #
  81. SET(external_projects
  82. log4qt
  83. KWStyle
  84. PythonQt
  85. DCMTK
  86. ZMQ
  87. QtMobility
  88. OpenIGTLink
  89. VTK
  90. XIP
  91. )
  92. # Include external projects
  93. FOREACH(p ${external_projects})
  94. INCLUDE(CMakeExternals/${p}.cmake)
  95. ENDFOREACH()
  96. #-----------------------------------------------------------------------------
  97. # CTK Utilities
  98. #
  99. set(proj CTK-Utilities)
  100. ExternalProject_Add(${proj}
  101. DOWNLOAD_COMMAND ""
  102. CONFIGURE_COMMAND ""
  103. BUILD_COMMAND ""
  104. INSTALL_COMMAND ""
  105. DEPENDS
  106. # Mandatory dependencies
  107. ${log4qt_DEPENDS}
  108. # Optionnal dependencies
  109. ${QtMobility_DEPENDS}
  110. ${kwstyle_DEPENDS}
  111. ${DCMTK_DEPENDS}
  112. ${PythonQt_DEPENDS}
  113. ${ZMQ_DEPENDS}
  114. ${OpenIGTLink_DEPENDS}
  115. ${VTK_DEPENDS}
  116. ${XIP_DEPENDS}
  117. )
  118. #-----------------------------------------------------------------------------
  119. # Generate cmake variable name corresponding to Libs, Plugins and Applications
  120. #
  121. SET(ctk_libs_bool_vars)
  122. FOREACH(lib ${CTK_LIBS_SUBDIRS})
  123. LIST(APPEND ctk_libs_bool_vars CTK_LIB_${lib})
  124. ENDFOREACH()
  125. SET(ctk_plugins_bool_vars)
  126. FOREACH(plugin ${CTK_PLUGINS_SUBDIRS})
  127. LIST(APPEND ctk_plugins_bool_vars CTK_PLUGIN_${plugin})
  128. ENDFOREACH()
  129. SET(ctk_applications_bool_vars)
  130. FOREACH(app ${CTK_APPLICATIONS_SUBDIRS})
  131. LIST(APPEND ctk_applications_bool_vars CTK_APP_${app})
  132. ENDFOREACH()
  133. #-----------------------------------------------------------------------------
  134. # Convenient function allowing to define superbuild arg
  135. #
  136. FUNCTION(ctk_set_superbuild_boolean_arg ctk_cmake_var)
  137. SET(superbuild_${ctk_cmake_var} OFF)
  138. IF(DEFINED ${ctk_cmake_var})
  139. SET(superbuild_${ctk_cmake_var} ${${ctk_cmake_var}} PARENT_SCOPE)
  140. ENDIF()
  141. ENDFUNCTION()
  142. #-----------------------------------------------------------------------------
  143. # Set superbuild boolean args
  144. #
  145. SET(ctk_cmake_boolean_args
  146. BUILD_TESTING
  147. CTK_USE_KWSTYLE
  148. WITH_COVERAGE
  149. DOCUMENTATION_TARGET_IN_ALL
  150. CTEST_USE_LAUNCHERS
  151. ${ctk_libs_bool_vars}
  152. ${ctk_plugins_bool_vars}
  153. ${ctk_applications_bool_vars}
  154. )
  155. SET(ctk_superbuild_boolean_args)
  156. FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
  157. ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
  158. LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
  159. ENDFOREACH()
  160. # MESSAGE("CMake args:")
  161. # FOREACH(arg ${ctk_superbuild_boolean_args})
  162. # MESSAGE(" ${arg}")
  163. # ENDFOREACH()
  164. #-----------------------------------------------------------------------------
  165. # CTK Configure
  166. #
  167. SET(proj CTK-Configure)
  168. ExternalProject_Add(${proj}
  169. DOWNLOAD_COMMAND ""
  170. CMAKE_GENERATOR ${gen}
  171. CMAKE_ARGS
  172. ${ctk_superbuild_boolean_args}
  173. -DCTK_SUPERBUILD:BOOL=OFF
  174. -DDOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY:PATH=${DOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY}
  175. -DCTK_SUPERBUILD_BINARY_DIR:PATH=${CTK_BINARY_DIR}
  176. -DCTK_CMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CTK_CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
  177. -DCTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY}
  178. -DCTK_CMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CTK_CMAKE_RUNTIME_OUTPUT_DIRECTORY}
  179. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  180. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  181. -DCTK_CXX_FLAGS:STRING=${CTK_CXX_FLAGS}
  182. -DCTK_C_FLAGS:STRING=${CTK_C_FLAGS}
  183. -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  184. -DZMQ_DIR:PATH=${ZMQ_DIR} # FindVTK expects VTK_DIR variable to be defined
  185. -DOpenIGTLink_DIR:PATH=${OpenIGTLink_DIR} # FindOpenIGTLink expects OpenIGTLink_DIR variable to be defined
  186. -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
  187. -DDCMTK_DIR:PATH=${DCMTK_DIR} # FindDCMTK expects DCMTK_DIR variable to be defined
  188. -DVTK_DIR:PATH=${VTK_DIR} # FindVTK expects VTK_DIR variable to be defined
  189. -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR} # FindPythonQt expects PYTHON_INCLUDE_DIR variable to be defined
  190. -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY} # FindPythonQt expects PYTHON_LIBRARY variable to be defined
  191. -DPYTHONQT_INSTALL_DIR:PATH=${PYTHONQT_INSTALL_DIR} # FindPythonQt expects PYTHONQT_INSTALL_DIR variable to be defined
  192. -Dlog4qt_DIR:PATH=${log4qt_DIR} # Findlog4qt expects log4qt_DIR variable to be defined
  193. SOURCE_DIR ${CTK_SOURCE_DIR}
  194. BINARY_DIR ${CTK_BINARY_DIR}/CTK-build
  195. BUILD_COMMAND ""
  196. INSTALL_COMMAND ""
  197. DEPENDS
  198. "CTK-Utilities"
  199. )
  200. #-----------------------------------------------------------------------------
  201. # CTK
  202. #
  203. #MESSAGE(STATUS SUPERBUILD_EXCLUDE_CTKBUILD_TARGET:${SUPERBUILD_EXCLUDE_CTKBUILD_TARGET})
  204. IF(NOT DEFINED SUPERBUILD_EXCLUDE_CTKBUILD_TARGET OR NOT SUPERBUILD_EXCLUDE_CTKBUILD_TARGET)
  205. SET(proj CTK-build)
  206. ExternalProject_Add(${proj}
  207. DOWNLOAD_COMMAND ""
  208. CMAKE_GENERATOR ${gen}
  209. SOURCE_DIR ${CTK_SOURCE_DIR}
  210. BINARY_DIR CTK-build
  211. INSTALL_COMMAND ""
  212. DEPENDS
  213. "CTK-Configure"
  214. )
  215. ENDIF()
  216. #-----------------------------------------------------------------------------
  217. # Custom target allowing to drive the build of CTK project itself
  218. #
  219. ADD_CUSTOM_TARGET(CTK
  220. COMMAND ${CMAKE_COMMAND} --build ${CTK_BINARY_DIR}/CTK-build
  221. WORKING_DIRECTORY ${CTK_BINARY_DIR}/CTK-build
  222. )