-
Notifications
You must be signed in to change notification settings - Fork 201
/
CMakeLists.txt
179 lines (140 loc) · 5.95 KB
/
CMakeLists.txt
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
set_source_files_properties ( ${SimpleITKBasicFiltersGeneratedSource} PROPERTIES GENERATED 1 )
# add_filter_library
# This function is used to apply standard building options for the
# libraries in the basic filters directory given a list of SimpleITK
# source files, and a list of ITK modules.
#
# This method is used to encapsulate the directory properties set when
# using an ITK module
#
function(add_filter_library library_name src_list_var itk_module_list_var)
add_library ( ${library_name} ${${src_list_var}} )
sitk_target_use_itk( ${library_name} PRIVATE ${${itk_module_list_var}}
ITKLabelMap ITKImageIntensity)
target_link_libraries ( ${library_name}
PUBLIC
SimpleITKCommon
SimpleITKBasicFilters0 )
if (SimpleITK_EXPLICIT_INSTANTIATION)
target_link_libraries ( ${library_name} PRIVATE SimpleITKExplicit )
endif()
target_include_directories( ${library_name}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/Code/BasicFilters/include>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/Code/BasicFilters/include>
$<INSTALL_INTERFACE:${SimpleITK_INSTALL_INCLUDE_DIR}>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR} )
if(BUILD_SHARED_LIBS)
# These other filters are split into files. They all use the
# following for export their interface. There must not be and
# inter-filter include.
target_compile_definitions( ${library_name}
PRIVATE
SimpleITKBasicFilters_EXPORTS )
endif()
target_compile_options( ${library_name}
PUBLIC
${SimpleITK_PUBLIC_COMPILE_OPTIONS}
PRIVATE
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
target_compile_features( ${library_name} PUBLIC cxx_std_17 )
add_dependencies ( ${library_name} BasicFiltersSourceCode )
sitk_install_exported_target( ${library_name} )
# append this new library to the globaly cached list
cache_list_append(SimpleITK_LIBRARIES ${library_name} )
endfunction()
find_package(ITK REQUIRED COMPONENTS ITKCommon OPTIONAL_COMPONENTS ITKFFT )
# common source which all basic filter libraries need to be linked against
set ( SimpleITKBasicFilters0Source
sitkImageFilter.cxx
)
add_library ( SimpleITKBasicFilters0 ${SimpleITKBasicFilters0Source} )
sitk_target_use_itk( SimpleITKBasicFilters0 PRIVATE ITKCommon)
target_link_libraries ( SimpleITKBasicFilters0
PUBLIC
SimpleITKCommon)
if (SimpleITK_EXPLICIT_INSTANTIATION)
target_link_libraries ( SimpleITKBasicFilters0 PRIVATE SimpleITKExplicit )
endif()
target_include_directories( SimpleITKBasicFilters0
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/Code/BasicFilters/include>
$<INSTALL_INTERFACE:${SimpleITK_INSTALL_INCLUDE_DIR}>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR} )
target_compile_options( SimpleITKBasicFilters0
PUBLIC
${SimpleITK_PUBLIC_COMPILE_OPTIONS}
PRIVATE
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
target_compile_features( SimpleITKBasicFilters0 PUBLIC cxx_std_17 )
sitk_install_exported_target( SimpleITKBasicFilters0 )
# append this new library to the globally cached list
cache_list_append(SimpleITK_LIBRARIES SimpleITKBasicFilters0 )
# manually written
cache_list_append( SimpleITKBasicFiltersGeneratedSource_ITKCommon
sitkCastImageFilter-2.cxx
sitkCastImageFilter-2l.cxx
sitkCastImageFilter-2v.cxx
sitkCastImageFilter-3.cxx
sitkCastImageFilter-3l.cxx
sitkCastImageFilter-3v.cxx
sitkCastImageFilter-4.cxx
sitkCastImageFilter.cxx
sitkExtractImageFilter.cxx
sitkHashImageFilter.cxx )
cache_list_append( SimpleITKBasicFiltersGeneratedSource_ITKTransform
sitkBSplineTransformInitializerFilter.cxx )
cache_list_append( SimpleITKBasicFiltersGeneratedSource_SimpleITKFilters
sitkDICOMOrientImageFilter_Support.cxx)
cache_list_append( SimpleITKBasicFiltersGeneratedSource_ITKImageGrid
sitkPasteImageFilter.cxx)
cache_list_append( SimpleITKBasicFiltersGeneratedSource_ITKRegistrationCommon
sitkCenteredTransformInitializerFilter.cxx
sitkCenteredVersorTransformInitializerFilter.cxx
sitkLandmarkBasedTransformInitializerFilter.cxx )
#
# Module based libraries
#
get_cmake_property( _varNames CACHE_VARIABLES )
foreach (_varName ${_varNames})
if(_varName MATCHES "^SimpleITKBasicFiltersGeneratedSource_")
string(REGEX MATCH "[A-Za-z0-9]+$" itk_module ${_varName})
list(APPEND module_vars ${itk_module})
endif()
endforeach()
foreach( itk_module ${module_vars} )
if( ${itk_module} IN_LIST ITK_MODULES_ENABLED)
add_filter_library( SimpleITK_${itk_module}
SimpleITKBasicFiltersGeneratedSource_${itk_module}
itk_module )
endif()
if (SimpleITKBasicFiltersGeneratedSource_${itk_module})
list( REMOVE_ITEM SimpleITKBasicFiltersGeneratedSource ${SimpleITKBasicFiltersGeneratedSource_${itk_module}})
endif()
endforeach()
# We should have dealt with all generated source files
list ( SORT SimpleITKBasicFiltersGeneratedSource )
list(LENGTH SimpleITKBasicFiltersGeneratedSource _len)
if(_len GREATER 0)
message(WARNING "Did not find module for source code: ${SimpleITKBasicFiltersGeneratedSource}")
endif()
#
# Deal with files which may depend on any or all other filters.
#
# add additional files which may depend on other modules
list(APPEND SimpleITKBasicFilters1Source ${SimpleITKBasicFiltersGeneratedSource} sitkAdditionalProcedures.cxx)
set(PREV_SimpleITK_LIBRARIES ${SimpleITK_LIBRARIES})
# No dependencies on ITK modules just SimpleITK
add_filter_library(SimpleITKBasicFilters1 SimpleITKBasicFilters1Source no_itk_deps)
target_link_libraries ( SimpleITKBasicFilters1
PRIVATE ${PREV_SimpleITK_LIBRARIES} )
# Manual dependency needed to run the Cast filter
target_link_libraries ( SimpleITK_ITKImageIntensity PRIVATE SimpleITK_ITKImageFilterBase )
if (GenericLabelInterpolator IN_LIST ITK_MODULES_ENABLED)
sitk_target_use_itk( SimpleITK_ITKImageGrid PRIVATE GenericLabelInterpolator )
endif()
sitk_target_use_itk_factory( SimpleITK_ITKFFT FFTImageFilterInit )
sitk_target_use_itk_factory( SimpleITK_ITKConvolution FFTImageFilterInit )
sitk_target_use_itk_factory( SimpleITK_ITKDeconvolution FFTImageFilterInit )