forked from Slicer/Slicer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
External_ITK.cmake
228 lines (195 loc) · 7.92 KB
/
External_ITK.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
set(proj ITK)
# Set dependency list
set(${proj}_DEPENDENCIES "zlib" "VTK")
if(Slicer_BUILD_DICOM_SUPPORT)
list(APPEND ${proj}_DEPENDENCIES DCMTK)
endif()
if(Slicer_BUILD_ITKPython)
list(APPEND ${proj}_DEPENDENCIES Swig python)
endif()
if(Slicer_USE_TBB)
list(APPEND ${proj}_DEPENDENCIES tbb)
endif()
# Include dependent projects if any
ExternalProject_Include_Dependencies(${proj} PROJECT_VAR proj DEPENDS_VAR ${proj}_DEPENDENCIES)
if(Slicer_USE_SYSTEM_${proj})
unset(ITK_DIR CACHE)
find_package(ITK 5.1 REQUIRED NO_MODULE)
endif()
# Sanity checks
if(DEFINED ITK_DIR AND NOT EXISTS ${ITK_DIR})
message(FATAL_ERROR "ITK_DIR variable is defined but corresponds to nonexistent directory")
endif()
if(NOT DEFINED ITK_DIR AND NOT Slicer_USE_SYSTEM_${proj})
ExternalProject_SetIfNotDefined(
Slicer_${proj}_GIT_REPOSITORY
"${EP_GIT_PROTOCOL}://github.com/InsightSoftwareConsortium/ITK"
QUIET
)
ExternalProject_SetIfNotDefined(
Slicer_${proj}_GIT_TAG
"be81e6223240508642b963511e6441203df6375e"
QUIET
)
set(EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS)
if(Slicer_USE_TBB)
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
-DModule_ITKTBB:BOOL=ON
-DTBB_DIR:PATH=${TBB_DIR}
)
endif()
if(Slicer_USE_PYTHONQT OR Slicer_BUILD_ITKPython)
# XXX Ensure python executable used for ITKModuleHeaderTest
# is the same as Slicer.
# This will keep the sanity check implemented in SlicerConfig.cmake
# quiet.
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
-DPYTHON_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
)
if(Slicer_VTK_VERSION_MAJOR STREQUAL "9")
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
# Required by FindPython3 CMake module used by VTK
-DPython3_ROOT_DIR:PATH=${Python3_ROOT_DIR}
-DPython3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR}
-DPython3_LIBRARY:FILEPATH=${Python3_LIBRARY}
-DPython3_LIBRARY_DEBUG:FILEPATH=${Python3_LIBRARY_DEBUG}
-DPython3_LIBRARY_RELEASE:FILEPATH=${Python3_LIBRARY_RELEASE}
-DPython3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE}
)
endif()
endif()
if(Slicer_BUILD_ITKPython)
# Sanity checks
if("${PYTHON_SITE_PACKAGES_SUBDIR}" STREQUAL "")
message(FATAL_ERROR "PYTHON_SITE_PACKAGES_SUBDIR CMake variable is expected to be set")
endif()
# Custom name for the components associated with ITK
# wrapping install rules enabling Slicer to optionally
# package ITK Wrapping in Slicer installer by simply
# toggling the Slicer_INSTALL_ITKPython option.
set(Slicer_WRAP_ITK_INSTALL_COMPONENT_IDENTIFIER "Wrapping")
mark_as_superbuild(Slicer_WRAP_ITK_INSTALL_COMPONENT_IDENTIFIER:STRING)
set(PY_SITE_PACKAGES_PATH lib/Python/${PYTHON_SITE_PACKAGES_SUBDIR})
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
-DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}
-DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}
-DSWIG_EXECUTABLE:PATH=${SWIG_EXECUTABLE}
-DITK_USE_SYSTEM_SWIG:BOOL=ON
-DWRAP_ITK_INSTALL_COMPONENT_IDENTIFIER:STRING=${Slicer_WRAP_ITK_INSTALL_COMPONENT_IDENTIFIER}
-DPY_SITE_PACKAGES_PATH:STRING=${PY_SITE_PACKAGES_PATH}
)
endif()
set(EP_SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj})
set(EP_BINARY_DIR ${CMAKE_BINARY_DIR}/${proj}-build)
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
-DITK_LEGACY_REMOVE:BOOL=OFF #<-- Allow LEGACY ITKv4 features for now.
-DITK_LEGACY_SILENT:BOOL=OFF #<-- Use of legacy code will produce compiler warnings
-DModule_ITKDeprecated:BOOL=ON #<-- Needed for ITKv5 now. (itkMultiThreader.h and MutexLock backwards compatibility.)
)
#Add additional user specified modules from this variable
#Slicer_ITK_ADDITIONAL_MODULES
#Add -DModule_${module} for each listed module
#Names in list must match the expected module names in the ITK build system
if(DEFINED Slicer_ITK_ADDITIONAL_MODULES)
foreach(module ${Slicer_ITK_ADDITIONAL_MODULES})
list(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
-DModule_${module}:BOOL=ON
)
endforeach()
endif()
ExternalProject_Add(${proj}
${${proj}_EP_ARGS}
GIT_REPOSITORY "${Slicer_${proj}_GIT_REPOSITORY}"
GIT_TAG "${Slicer_${proj}_GIT_TAG}"
SOURCE_DIR ${EP_SOURCE_DIR}
BINARY_DIR ${EP_BINARY_DIR}
CMAKE_CACHE_ARGS
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS:STRING=${ep_common_cxx_flags}
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS:STRING=${ep_common_c_flags}
-DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD}
-DCMAKE_CXX_STANDARD_REQUIRED:BOOL=${CMAKE_CXX_STANDARD_REQUIRED}
-DCMAKE_CXX_EXTENSIONS:BOOL=${CMAKE_CXX_EXTENSIONS}
-DITK_CXX_OPTIMIZATION_FLAGS:STRING= # Force compiler-default instruction set to ensure compatibility with older CPUs
-DITK_C_OPTIMIZATION_FLAGS:STRING= # Force compiler-default instruction set to ensure compatibility with older CPUs
-DITK_INSTALL_ARCHIVE_DIR:PATH=${Slicer_INSTALL_LIB_DIR}
-DITK_INSTALL_LIBRARY_DIR:PATH=${Slicer_INSTALL_LIB_DIR}
-DBUILD_TESTING:BOOL=OFF
-DBUILD_EXAMPLES:BOOL=OFF
-DITK_BUILD_DEFAULT_MODULES:BOOL=ON
-DGIT_EXECUTABLE:FILEPATH=${GIT_EXECUTABLE} # Used in ITKModuleRemote
-DModule_ITKReview:BOOL=ON
-DModule_MGHIO:BOOL=ON
-DModule_ITKIOMINC:BOOL=ON
-DModule_IOScanco:BOOL=ON
-DModule_MorphologicalContourInterpolation:BOOL=ON
-DModule_GrowCut:BOOL=ON
-DModule_SimpleITKFilters:BOOL=${Slicer_USE_SimpleITK}
-DModule_GenericLabelInterpolator:BOOL=ON
-DModule_AdaptiveDenoising:BOOL=ON
-DBUILD_SHARED_LIBS:BOOL=ON
-DITK_INSTALL_NO_DEVELOPMENT:BOOL=ON
-DKWSYS_USE_MD5:BOOL=ON # Required by SlicerExecutionModel
-DITK_WRAPPING:BOOL=OFF #${BUILD_SHARED_LIBS} ## HACK: QUICK CHANGE
-DITK_WRAP_PYTHON:BOOL=${Slicer_BUILD_ITKPython}
-DExternalData_OBJECT_STORES:PATH=${ExternalData_OBJECT_STORES}
# VTK
-DModule_ITKVtkGlue:BOOL=ON
-DVTK_DIR:PATH=${VTK_DIR}
# DCMTK
-DITK_USE_SYSTEM_DCMTK:BOOL=ON
-DDCMTK_DIR:PATH=${DCMTK_DIR}
-DModule_ITKIODCMTK:BOOL=${Slicer_BUILD_DICOM_SUPPORT}
# ZLIB
-DITK_USE_SYSTEM_ZLIB:BOOL=ON
-DZLIB_ROOT:PATH=${ZLIB_ROOT}
-DZLIB_INCLUDE_DIR:PATH=${ZLIB_INCLUDE_DIR}
-DZLIB_LIBRARY:FILEPATH=${ZLIB_LIBRARY}
${EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS}
INSTALL_COMMAND ""
DEPENDS
${${proj}_DEPENDENCIES}
)
ExternalProject_GenerateProjectDescription_Step(${proj})
set(ITK_DIR ${EP_BINARY_DIR})
if(NOT DEFINED ITK_VALGRIND_SUPPRESSIONS_FILE)
set(ITK_VALGRIND_SUPPRESSIONS_FILE ${EP_SOURCE_DIR}/CMake/InsightValgrind.supp)
endif()
mark_as_superbuild(ITK_VALGRIND_SUPPRESSIONS_FILE:FILEPATH)
#-----------------------------------------------------------------------------
# Launcher setting specific to build tree
set(_lib_subdir lib)
if(WIN32)
set(_lib_subdir bin)
endif()
# library paths
set(${proj}_LIBRARY_PATHS_LAUNCHER_BUILD ${ITK_DIR}/${_lib_subdir}/<CMAKE_CFG_INTDIR>)
mark_as_superbuild(
VARS ${proj}_LIBRARY_PATHS_LAUNCHER_BUILD
LABELS "LIBRARY_PATHS_LAUNCHER_BUILD"
)
if(Slicer_BUILD_ITKPython)
# pythonpath
set(${proj}_PYTHONPATH_LAUNCHER_BUILD
${ITK_DIR}/Wrapping/Generators/Python/<CMAKE_CFG_INTDIR>
${ITK_DIR}/lib/<CMAKE_CFG_INTDIR>
${ITK_DIR}/lib
)
mark_as_superbuild(
VARS ${proj}_PYTHONPATH_LAUNCHER_BUILD
LABELS "PYTHONPATH_LAUNCHER_BUILD"
)
endif()
#-----------------------------------------------------------------------------
# Launcher setting specific to install tree
# Since ITK Wrapping is installed in the Slicer standard site-packages
# location, there is no need to specify custom setting for the install
# case.
else()
ExternalProject_Add_Empty(${proj} DEPENDS ${${proj}_DEPENDENCIES})
endif()
mark_as_superbuild(
VARS ITK_DIR:PATH
LABELS "FIND_PACKAGE"
)