forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkSMPSelection.cmake
141 lines (119 loc) · 4.83 KB
/
vtkSMPSelection.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
set(VTK_SMP_IMPLEMENTATION_TYPE "Sequential"
CACHE STRING "Which multi-threaded parallelism implementation to use. Options are Sequential, STDThread, OpenMP or TBB")
set_property(CACHE VTK_SMP_IMPLEMENTATION_TYPE
PROPERTY
STRINGS Sequential OpenMP TBB STDThread)
if (NOT (VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "OpenMP" OR
VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "TBB" OR
VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "Sequential"))
set_property(CACHE VTK_SMP_IMPLEMENTATION_TYPE
PROPERTY
VALUE "STDThread")
endif ()
option(VTK_SMP_ENABLE_SEQUENTIAL "Enable Sequential backend" ON)
option(VTK_SMP_ENABLE_STDTHREAD "Enable STDThread backend" ON)
# Force option to be ON if VTK_SMP_IMPLEMENTATION_TYPE equal to the backend otherwise it's OFF by default
cmake_dependent_option(VTK_SMP_ENABLE_TBB "Enable TBB backend" OFF
"NOT VTK_SMP_IMPLEMENTATION_TYPE STREQUAL TBB" ON)
cmake_dependent_option(VTK_SMP_ENABLE_OPENMP "Enable OpenMP backend" OFF
"NOT VTK_SMP_IMPLEMENTATION_TYPE STREQUAL OpenMP" ON)
mark_as_advanced(
VTK_SMP_ENABLE_SEQUENTIAL
VTK_SMP_ENABLE_STDTHREAD
VTK_SMP_ENABLE_TBB
VTK_SMP_ENABLE_OPENMP)
set(vtk_smp_default_name)
string(TOUPPER "${VTK_SMP_IMPLEMENTATION_TYPE}" vtk_smp_default_name)
if (NOT VTK_SMP_ENABLE_${vtk_smp_default_name})
message(FATAL_ERROR "VTK_SMP_ENABLE_${vtk_smp_default_name} must be enabled as VTK_SMP_IMPLEMENTATION_TYPE is set to ${VTK_SMP_IMPLEMENTATION_TYPE}.")
endif()
set(vtk_smp_defines)
set(vtk_smp_use_default_atomics ON)
set(vtk_smp_backends)
if (VTK_SMP_ENABLE_TBB)
vtk_module_find_package(PACKAGE TBB)
list(APPEND vtk_smp_libraries
TBB::tbb)
set(vtk_smp_enable_tbb 1)
list(APPEND vtk_smp_backends "TBB")
set(vtk_smp_use_default_atomics OFF)
set(vtk_smp_implementation_dir SMP/TBB)
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
if (VTK_SMP_ENABLE_OPENMP)
vtk_module_find_package(PACKAGE OpenMP)
list(APPEND vtk_smp_libraries
OpenMP::OpenMP_CXX)
set(vtk_smp_enable_openmp 1)
list(APPEND vtk_smp_backends "OpenMP")
set(vtk_smp_implementation_dir SMP/OpenMP)
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
if (OpenMP_CXX_SPEC_DATE AND NOT "${OpenMP_CXX_SPEC_DATE}" LESS "201107")
set(vtk_smp_use_default_atomics OFF)
else()
message(WARNING
"Required OpenMP version (3.1) for atomics not detected. Using default "
"atomics implementation.")
endif()
endif()
if (VTK_SMP_ENABLE_STDTHREAD)
set(vtk_smp_enable_stdthread 1)
set(vtk_smp_implementation_dir SMP/STDThread)
list(APPEND vtk_smp_backends "STDThread")
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadPool.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadPool.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
if (VTK_SMP_ENABLE_SEQUENTIAL)
set(vtk_smp_enable_sequential 1)
set(vtk_smp_implementation_dir SMP/Sequential)
list(APPEND vtk_smp_backends "Sequential")
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
set_property(GLOBAL
PROPERTY
_vtk_smp_backends "${vtk_smp_backends}")
if (vtk_smp_use_default_atomics)
include(CheckSymbolExists)
include("${CMAKE_CURRENT_SOURCE_DIR}/vtkTestBuiltins.cmake")
set(vtk_atomics_default_impl_dir "${CMAKE_CURRENT_SOURCE_DIR}/SMP/Sequential")
endif()
set(vtk_smp_common_dir SMP/Common)
list(APPEND vtk_smp_sources
"${vtk_smp_common_dir}/vtkSMPToolsAPI.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_common_dir}/vtkSMPThreadLocalAPI.h"
"${vtk_smp_common_dir}/vtkSMPThreadLocalImplAbstract.h"
"${vtk_smp_common_dir}/vtkSMPToolsAPI.h"
"${vtk_smp_common_dir}/vtkSMPToolsImpl.h"
"${vtk_smp_common_dir}/vtkSMPToolsInternal.h")
list(APPEND vtk_smp_sources
vtkSMPTools.cxx)
list(APPEND vtk_smp_headers
vtkSMPTools.h
vtkSMPThreadLocal.h
vtkSMPThreadLocalObject.h)