SuperBuild.cmake 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. SET(cmake_version_required "2.8")
  2. SET(cmake_version_required_dash "2-8")
  3. CMAKE_MINIMUM_REQUIRED(VERSION ${cmake_version_required})
  4. #
  5. # CTK_KWSTYLE_EXECUTABLE
  6. # DCMTK_DIR
  7. # QT_QMAKE_EXECUTABLE
  8. # VTK_DIR
  9. # PYTHONQT_INSTALL_DIR
  10. # PYTHON_LIBRARY
  11. # PYTHON_INCLUDE_DIR
  12. #
  13. #-----------------------------------------------------------------------------
  14. # Enable and setup External project global properties
  15. #
  16. INCLUDE(ExternalProject)
  17. SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals")
  18. SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base})
  19. SET(ep_install_dir ${ep_base}/Install)
  20. SET(ep_build_dir ${ep_base}/Build)
  21. SET(ep_source_dir ${ep_base}/Source)
  22. #SET(ep_parallelism_level)
  23. SET(ep_build_shared_libs ON)
  24. SET(ep_build_testing OFF)
  25. SET(ep_common_args
  26. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  27. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  28. -DBUILD_TESTING:BOOL=${ep_build_testing}
  29. )
  30. # Compute -G arg for configuring external projects with the same CMake generator:
  31. IF(CMAKE_EXTRA_GENERATOR)
  32. SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
  33. ELSE()
  34. SET(gen "${CMAKE_GENERATOR}")
  35. ENDIF()
  36. # Use this value where semi-colons are needed in ep_add args:
  37. set(sep "^^")
  38. #-----------------------------------------------------------------------------
  39. # Update CMake module path
  40. #
  41. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
  42. #-----------------------------------------------------------------------------
  43. # Collect CTK library target dependencies
  44. #
  45. ctkMacroCollectAllTargetLibraries("${CTK_LIBS_SUBDIRS}" "Libs" ALL_TARGET_LIBRARIES)
  46. ctkMacroCollectAllTargetLibraries("${CTK_PLUGINS_SUBDIRS}" "Plugins" ALL_TARGET_LIBRARIES)
  47. ctkMacroCollectAllTargetLibraries("${CTK_APPLICATIONS_SUBDIRS}" "Applications" ALL_TARGET_LIBRARIES)
  48. #MESSAGE(STATUS ALL_TARGET_LIBRARIES:${ALL_TARGET_LIBRARIES})
  49. #-----------------------------------------------------------------------------
  50. # Initialize NON_CTK_DEPENDENCIES variable
  51. #
  52. # Using the variable ALL_TARGET_LIBRARIES initialized above with the help
  53. # of the macro ctkMacroCollectAllTargetLibraries, let's get the list of all Non-CTK dependencies.
  54. # NON_CTK_DEPENDENCIES is expected by the macro ctkMacroShouldAddExternalProject
  55. ctkMacroGetAllNonCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" NON_CTK_DEPENDENCIES)
  56. #MESSAGE(STATUS NON_CTK_DEPENDENCIES:${NON_CTK_DEPENDENCIES})
  57. #-----------------------------------------------------------------------------
  58. # Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
  59. #
  60. #-----------------------------------------------------------------------------
  61. # ExternalProjects
  62. #
  63. SET(external_projects
  64. KWStyle
  65. PythonQt
  66. DCMTK
  67. ZMQ
  68. QtMobility
  69. OpenIGTLink
  70. VTK
  71. XIP
  72. )
  73. # Include external projects
  74. FOREACH(p ${external_projects})
  75. INCLUDE(CMakeExternals/${p}.cmake)
  76. ENDFOREACH()
  77. #-----------------------------------------------------------------------------
  78. # CTK Utilities
  79. #
  80. set(proj CTK-Utilities)
  81. ExternalProject_Add(${proj}
  82. DOWNLOAD_COMMAND ""
  83. CONFIGURE_COMMAND ""
  84. BUILD_COMMAND ""
  85. INSTALL_COMMAND ""
  86. DEPENDS
  87. # Mandatory dependencies
  88. # - none
  89. # Optionnal dependencies
  90. ${QtMobility_DEPENDS}
  91. ${kwstyle_DEPENDS}
  92. ${DCMTK_DEPENDS}
  93. ${PythonQt_DEPENDS}
  94. ${ZMQ_DEPENDS}
  95. ${OpenIGTLink_DEPENDS}
  96. ${VTK_DEPENDS}
  97. ${XIP_DEPENDS}
  98. )
  99. #-----------------------------------------------------------------------------
  100. # Generate cmake variable name corresponding to Libs, Plugins and Applications
  101. #
  102. SET(ctk_libs_bool_vars)
  103. FOREACH(lib ${CTK_LIBS_SUBDIRS})
  104. LIST(APPEND ctk_libs_bool_vars CTK_LIB_${lib})
  105. ENDFOREACH()
  106. SET(ctk_plugins_bool_vars)
  107. FOREACH(plugin ${CTK_PLUGINS_SUBDIRS})
  108. LIST(APPEND ctk_plugins_bool_vars CTK_PLUGIN_${plugin})
  109. ENDFOREACH()
  110. SET(ctk_applications_bool_vars)
  111. FOREACH(app ${CTK_APPLICATIONS_SUBDIRS})
  112. LIST(APPEND ctk_applications_bool_vars CTK_APP_${app})
  113. ENDFOREACH()
  114. #-----------------------------------------------------------------------------
  115. # Convenient macro allowing to define superbuild arg
  116. #
  117. MACRO(ctk_set_superbuild_boolean_arg ctk_cmake_var)
  118. SET(superbuild_${ctk_cmake_var} ON)
  119. IF(DEFINED ${ctk_cmake_var} AND NOT ${ctk_cmake_var})
  120. SET(superbuild_${ctk_cmake_var} OFF)
  121. ENDIF()
  122. ENDMACRO()
  123. #-----------------------------------------------------------------------------
  124. # Set superbuild boolean args
  125. #
  126. SET(ctk_cmake_boolean_args
  127. BUILD_TESTING
  128. CTK_USE_KWSTYLE
  129. ${ctk_libs_bool_vars}
  130. ${ctk_plugins_bool_vars}
  131. ${ctk_applications_bool_vars}
  132. )
  133. SET(ctk_superbuild_boolean_args)
  134. FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
  135. ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
  136. LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
  137. ENDFOREACH()
  138. # MESSAGE("CMake args:")
  139. # FOREACH(arg ${ctk_superbuild_boolean_args})
  140. # MESSAGE(" ${arg}")
  141. # ENDFOREACH()
  142. #-----------------------------------------------------------------------------
  143. # CTK Configure
  144. #
  145. SET(proj CTK-Configure)
  146. ExternalProject_Add(${proj}
  147. DOWNLOAD_COMMAND ""
  148. CMAKE_GENERATOR ${gen}
  149. CMAKE_ARGS
  150. ${ctk_superbuild_boolean_args}
  151. -DCTK_SUPERBUILD:BOOL=OFF
  152. -DWITH_COVERAGE:BOOL=${WITH_COVERAGE}
  153. -DCTEST_USE_LAUNCHERS:BOOL=${CTEST_USE_LAUNCHERS}
  154. -DCTK_SUPERBUILD_BINARY_DIR:PATH=${CTK_BINARY_DIR}
  155. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  156. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  157. -DCTK_CXX_FLAGS:STRING=${CTK_CXX_FLAGS}
  158. -DCTK_C_FLAGS:STRING=${CTK_C_FLAGS}
  159. -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
  160. -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
  161. -DDCMTK_DIR:PATH=${DCMTK_DIR} # FindDCMTK expects DCMTK_DIR
  162. -DVTK_DIR:PATH=${VTK_DIR} # FindVTK expects VTK_DIR
  163. -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR} # FindPythonQt expects PYTHON_INCLUDE_DIR
  164. -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY} # FindPythonQt expects PYTHON_LIBRARY
  165. -DPYTHONQT_INSTALL_DIR:PATH=${PYTHONQT_INSTALL_DIR} # FindPythonQt expects PYTHONQT_INSTALL_DIR
  166. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  167. BINARY_DIR ${CMAKE_BINARY_DIR}/CTK-build
  168. BUILD_COMMAND ""
  169. INSTALL_COMMAND ""
  170. DEPENDS
  171. "CTK-Utilities"
  172. )
  173. #-----------------------------------------------------------------------------
  174. # CTK
  175. #
  176. #MESSAGE(STATUS SUPERBUILD_EXCLUDE_CTKBUILD_TARGET:${SUPERBUILD_EXCLUDE_CTKBUILD_TARGET})
  177. IF(NOT DEFINED SUPERBUILD_EXCLUDE_CTKBUILD_TARGET OR NOT SUPERBUILD_EXCLUDE_CTKBUILD_TARGET)
  178. SET(proj CTK-build)
  179. ExternalProject_Add(${proj}
  180. DOWNLOAD_COMMAND ""
  181. CMAKE_GENERATOR ${gen}
  182. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  183. BINARY_DIR CTK-build
  184. INSTALL_COMMAND ""
  185. DEPENDS
  186. "CTK-Configure"
  187. )
  188. ENDIF()
  189. #-----------------------------------------------------------------------------
  190. # Custom target allowing to drive the build of CTK project itself
  191. #
  192. ADD_CUSTOM_TARGET(CTK
  193. COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/CTK-build
  194. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CTK-build
  195. )