SuperBuild.cmake 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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_QMAKE_EXECUTABLE
  6. # CTK_KWSTYLE_EXECUTABLE
  7. # CTK_DCMTK_DIR
  8. #
  9. #-----------------------------------------------------------------------------
  10. # Enable and setup External project global properties
  11. #
  12. INCLUDE(ExternalProject)
  13. SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals")
  14. SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base})
  15. SET(ep_install_dir ${ep_base}/Install)
  16. SET(ep_build_dir ${ep_base}/Build)
  17. #SET(ep_parallelism_level)
  18. SET(ep_build_shared_libs ON)
  19. SET(ep_build_testing OFF)
  20. SET(ep_common_args
  21. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  22. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  23. -DBUILD_TESTING:BOOL=${ep_build_testing}
  24. )
  25. # Compute -G arg for configuring external projects with the same CMake generator:
  26. IF(CMAKE_EXTRA_GENERATOR)
  27. SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
  28. ELSE()
  29. SET(gen "${CMAKE_GENERATOR}")
  30. ENDIF()
  31. # Use this value where semi-colons are needed in ep_add args:
  32. set(sep "^^")
  33. #-----------------------------------------------------------------------------
  34. # Update CMake module path
  35. #
  36. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
  37. #-----------------------------------------------------------------------------
  38. # Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
  39. #
  40. #-----------------------------------------------------------------------------
  41. # KWStyle
  42. #
  43. SET (kwstyle_DEPENDS)
  44. IF (CTK_USE_KWSTYLE)
  45. IF (NOT DEFINED CTK_KWSTYLE_EXECUTABLE)
  46. SET(proj KWStyle-CVSHEAD)
  47. SET(kwstyle_DEPENDS ${proj})
  48. ExternalProject_Add(${proj}
  49. LIST_SEPARATOR ${sep}
  50. CVS_REPOSITORY ":pserver:anoncvs:@public.kitware.com:/cvsroot/KWStyle"
  51. CVS_MODULE "KWStyle"
  52. CMAKE_GENERATOR ${gen}
  53. CMAKE_ARGS
  54. ${ep_common_args}
  55. )
  56. SET(CTK_KWSTYLE_EXECUTABLE ${ep_install_dir}/bin/KWStyle)
  57. ENDIF()
  58. ENDIF()
  59. #-----------------------------------------------------------------------------
  60. # Utilities/DCMTK
  61. #
  62. SET (DCMTK_DEPENDS)
  63. IF (NOT DEFINED CTK_DCMTK_DIR)
  64. SET(proj DCMTK)
  65. SET(DCMTK_DEPENDS ${proj})
  66. ExternalProject_Add(${proj}
  67. DOWNLOAD_COMMAND ""
  68. CMAKE_GENERATOR ${gen}
  69. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/${proj}
  70. CMAKE_ARGS
  71. ${ep_common_args}
  72. -DDCMTK_BUILD_APPS:BOOL=ON # Build also dmctk tools (movescu, storescp, ...)
  73. )
  74. SET(CTK_DCMTK_DIR ${ep_install_dir})
  75. ENDIF()
  76. #-----------------------------------------------------------------------------
  77. # Utilities/ZMQ
  78. #
  79. SET(proj ZMQ)
  80. ExternalProject_Add(${proj}
  81. DOWNLOAD_COMMAND ""
  82. INSTALL_COMMAND ""
  83. CMAKE_GENERATOR ${gen}
  84. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ZMQ
  85. CMAKE_ARGS
  86. ${ep_common_args}
  87. )
  88. #-----------------------------------------------------------------------------
  89. # CTK Utilities
  90. #
  91. set(proj CTK-Utilities)
  92. ExternalProject_Add(${proj}
  93. DOWNLOAD_COMMAND ""
  94. CONFIGURE_COMMAND ""
  95. BUILD_COMMAND ""
  96. INSTALL_COMMAND ""
  97. DEPENDS
  98. ${kwstyle_DEPENDS}
  99. ${DCMTK_DEPENDS}
  100. "ZMQ"
  101. )
  102. #-----------------------------------------------------------------------------
  103. # Convenient macro allowing to define superbuild arg
  104. #
  105. MACRO(ctk_set_superbuild_boolean_arg ctk_cmake_var)
  106. SET(superbuild_${ctk_cmake_var} ON)
  107. IF(DEFINED ${ctk_cmake_var} AND NOT ${ctk_cmake_var})
  108. SET(superbuild_${ctk_cmake_var} OFF)
  109. ENDIF()
  110. SET(superbuild_ep_arg_${ctk_cmake_var} -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_var}})
  111. ENDMACRO()
  112. #-----------------------------------------------------------------------------
  113. # Set superbuild boolean args
  114. #
  115. SET(ctk_cmake_boolean_args
  116. BUILD_TESTING
  117. CTK_USE_KWSTYLE
  118. ${ctk_libs}
  119. )
  120. SET(ctk_superbuild_boolean_args)
  121. FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
  122. ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
  123. LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
  124. ENDFOREACH()
  125. #-----------------------------------------------------------------------------
  126. # CTK Configure
  127. #
  128. SET(proj CTK-Configure)
  129. ExternalProject_Add(${proj}
  130. DOWNLOAD_COMMAND ""
  131. CMAKE_GENERATOR ${gen}
  132. CMAKE_ARGS
  133. ${ctk_superbuild_boolean_args}
  134. -DCTK_SUPERBUILD:BOOL=OFF
  135. -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
  136. -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
  137. -DCTK_QMAKE_EXECUTABLE:FILEPATH=${CTK_QMAKE_EXECUTABLE}
  138. -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
  139. -DDCMTK_DIR=${CTK_DCMTK_DIR} # FindDCMTK expects DCMTK_DIR
  140. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  141. BINARY_DIR ${CMAKE_BINARY_DIR}/CTK-build
  142. BUILD_COMMAND ""
  143. INSTALL_COMMAND ""
  144. DEPENDS
  145. "CTK-Utilities"
  146. )
  147. #-----------------------------------------------------------------------------
  148. # CTK
  149. #
  150. set(proj CTK-build)
  151. ExternalProject_Add(${proj}
  152. DOWNLOAD_COMMAND ""
  153. CMAKE_GENERATOR ${gen}
  154. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
  155. BINARY_DIR CTK-build
  156. #BUILD_COMMAND ""
  157. INSTALL_COMMAND ""
  158. DEPENDS
  159. "CTK-Configure"
  160. )