CMakeLists.txt 9.14 KB
Newer Older
Ben Boeckel's avatar
Ben Boeckel committed
1
cmake_minimum_required(VERSION 3.6.1)
2

Ben Boeckel's avatar
Ben Boeckel committed
3
project(paraview-superbuild)
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
4

5
6
7
list(INSERT CMAKE_MODULE_PATH 0
  "${CMAKE_CURRENT_LIST_DIR}/cmake")

Ben Boeckel's avatar
Ben Boeckel committed
8
9
macro (superbuild_setup_variables)
  include(SuperbuildVersionMacros)
10
  if (paraview_SOURCE_SELECTION STREQUAL "git")
11
12
    # Assuming master; just use the latest version, but let the user set their
    # own version in case it is actually a branch from some other version.
13
    set(PARAVIEW_VERSION_DEFAULT "5.6.0"
14
15
16
17
18
19
20
      CACHE STRING "The default version of ParaView to use if it cannot be detected")
    mark_as_advanced(PARAVIEW_VERSION_DEFAULT)
    set(paraview_default_version "${PARAVIEW_VERSION_DEFAULT}")
  elseif (paraview_SOURCE_SELECTION STREQUAL "source")
    # If it is a git repo, we'll get it that way, otherwise we will look at the
    # `version.txt` in the checkout.
    set(paraview_default_version "")
21
  else ()
22
23
    # The selection is the version number; use it.
    set(paraview_default_version "${paraview_SOURCE_SELECTION}")
24
  endif()
25
  superbuild_set_version_variables(paraview "${paraview_default_version}" "paraview-version.cmake" "version.txt")
Ben Boeckel's avatar
Ben Boeckel committed
26
27
28
  set(paraview_version "${paraview_version_major}.${paraview_version_minor}")
endmacro ()

29
30
31
32
33
34
function (superbuild_find_projects var)
  include(ParaViewSuperbuildMacros)

  set(projects
    cxx11
    paraview
35
    paraviewpluginsexternal
36
37
38
39
40
41
42
43
    python)

  option(USE_NONFREE_COMPONENTS "Enable the non-free parts of the superbuild" OFF)
  mark_as_advanced(USE_NONFREE_COMPONENTS)

  list(APPEND projects
    boost
    bzip2
Ben Boeckel's avatar
Ben Boeckel committed
44
    cuda
David E. DeMarle's avatar
David E. DeMarle committed
45
    embree
46
47
48
    freetype
    hdf5
    ispc
Ben Boeckel's avatar
Ben Boeckel committed
49
    lapack
Ben Boeckel's avatar
Ben Boeckel committed
50
    las
51
52
    matplotlib
    mpi
Ben Boeckel's avatar
Ben Boeckel committed
53
    netcdf
54
    nlohmannjson
55
    numpy
56
    ospray
57
    openimagedenoise
58
    paraviewweb
59
    paraviewwebglance
Sebastien Jourdain's avatar
Sebastien Jourdain committed
60
    paraviewweblite
61
    paraviewwebdivvy
62
    paraviewwebflow
Ben Boeckel's avatar
Ben Boeckel committed
63
    paraviewwebvisualizer
64
    png
65
66
    pythonautobahn
    pythonconstantly
67
68
    pythoncycler
    pythondateutil
69
70
    pythonhyperlink
    pythonincremental
71
    pythonmako
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
72
    pythonpygments
73
    pythonpyparsing
Ben Boeckel's avatar
Ben Boeckel committed
74
    pythonsetuptools
75
76
77
78
    pythonsix
    pythontwisted
    pythontxaio
    pythonwslink
Ben Boeckel's avatar
Ben Boeckel committed
79
    pythonzope
80
    pythonzopeinterface
81
    pytz
82
83
84
85
86
87
88
    qt5
    silo
    szip
    tbb
    visitbridge
    vortexfinder2
    vrpn
Robert Maynard's avatar
Robert Maynard committed
89
    vtkm
90
91
92
    xdmf3
    zlib)

93
  if (UNIX)
94
95
    list(APPEND projects
      adios
96
      cosmotools
97
      ffmpeg
Ben Boeckel's avatar
Ben Boeckel committed
98
      fortran
99
      genericio
100
      libxml2
Cory Quammen's avatar
Cory Quammen committed
101
      mili
Ben Boeckel's avatar
Ben Boeckel committed
102
103
      mxml
      scipy)
104
105
106

    if (NOT APPLE)
      list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
107
        boxlib
108
109
        catalyst
        egl
Chuck Atkins's avatar
Chuck Atkins committed
110
        expat
111
        fontconfig
Chuck Atkins's avatar
Chuck Atkins committed
112
        glproto
113
        gperf
114
115
116
        llvm
        mesa
        osmesa
Ben Boeckel's avatar
Ben Boeckel committed
117
        paraviewsdk
118
        socat)
119
120
121
122
    endif ()
  endif ()

  list(APPEND projects
123
    ospraymaterials
124
    paraviewgettingstartedguide
125
    paraviewtutorialdata)
126

127
  if (USE_NONFREE_COMPONENTS)
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
128
    # add non-free projects here.
Ben Boeckel's avatar
Ben Boeckel committed
129
130
131
132
    if (WIN32 OR (UNIX AND NOT APPLE))
      # These are publicly available, but are behind logins or license
      # acceptances. Rehosted internally at Kitware for build machines.
      list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
133
134
        nvidiamdl
        nvidiaoptix)
Ben Boeckel's avatar
Ben Boeckel committed
135
136
137
138

      # These are open source, but require closed SDKs.
      list(APPEND projects
        visrtx)
Ben Boeckel's avatar
Ben Boeckel committed
139
    endif ()
140
  endif ()
141

142
143
  if (WIN32)
    list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
144
      ftjam
Ken Martin's avatar
Ken Martin committed
145
      openvr
146
147
148
      pywin32)
  endif ()

Ben Boeckel's avatar
Ben Boeckel committed
149
150
151
152
153
  if (WIN32 OR (UNIX AND NOT APPLE))
    list(APPEND projects
      nvidiaindex)
  endif ()

154
155
156
157
  set("${var}"
    ${projects}
    PARENT_SCOPE)
endfunction ()
158

159
160
161
162
163
164
165
166
167
function (superbuild_sanity_check)
  if (NOT paraview_enabled AND NOT catalyst_enabled)
    message(WARNING "ParaView is disabled...")
  endif ()

  include(qt.functions)

  superbuild_qt_sanity_check()

168
169
170
171
172
173
174
  # Sanity check: Cannot have paraview and have cxx11 disabled.
  if (NOT cxx11_enabled AND paraview_enabled)
    #While ParaView doesn't depend on cxx11 it needs to make sure that
    #other projects that optionally depend on it are built with cxx11
    message(SEND_ERROR "Cannot disable cxx11 when paraview is enabled.")
  endif ()

175
  # Sanity check: Cannot have EGL and Qt enabled at the same time.
Ben Boeckel's avatar
Ben Boeckel committed
176
  if (egl_enabled AND qt5_enabled)
177
    message(SEND_ERROR "Cannot enable EGL and Qt at the same time.")
178
  endif ()
179
180
181
182

  # Sanity check: Cannot have EGL and Mesa at the same time.
  if (egl_enabled AND mesa_enabled)
    message(SEND_ERROR "Cannot enable EGL and Mesa at the same time.")
183
184
  endif ()

185
186
187
188
189
  # Sanity check: Cannot have EGL and OSMesa at the same time.
  if (egl_enabled AND osmesa_enabled)
    message(SEND_ERROR "Cannot enable EGL and OSMesa at the same time.")
  endif ()

190
  # Sanity check: Cannot have OSMesa and Qt enabled at the same time if we're building ParaView.
Ben Boeckel's avatar
Ben Boeckel committed
191
  if (osmesa_enabled AND qt5_enabled AND paraview_enabled)
192
193
194
195
196
197
198
199
200
201
202
203
204
205
    message(SEND_ERROR "Cannot enable OSMesa and Qt at the same time.")
  endif ()

  # Sanity check: Cannot have OSMesa and Mesa at the same time.
  if (osmesa_enabled AND mesa_enabled)
    message(SEND_ERROR "Cannot enable OSMesa and Mesa at the same time.")
  endif ()

  # Sanity check: Cannot have ParaView and Catalyst enabled at the same time.
  if (paraview_enabled AND catalyst_enabled)
    message(SEND_ERROR "Cannot enable ParaView and Catalyst at the same time.")
  endif ()
endfunction ()

206
207
208
function (superbuild_add_packaging)
  if (WIN32)
    set(generators
209
210
      ZIP
      NSIS)
211
212
213
214
215
  elseif (APPLE)
    set(generators
      DragNDrop)
  else ()
    set(generators
Cory Quammen's avatar
Cory Quammen committed
216
217
      TGZ
      TXZ)
218
  endif ()
219
  list(GET generators 0 default_generator)
220

Ben Boeckel's avatar
Ben Boeckel committed
221
222
223
  if (USE_SYSTEM_qt5)
    list(APPEND superbuild_export_variables
      Qt5_DIR)
224
225
226
227
    find_package(Qt5 QUIET REQUIRED COMPONENTS Core)
    set(qt5_version "${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}")
  else ()
    set(qt5_version "${qt5_SOURCE_SELECTION}")
Ben Boeckel's avatar
Ben Boeckel committed
228
  endif ()
229
230
  list(APPEND superbuild_export_variables
    qt5_version)
Ben Boeckel's avatar
Ben Boeckel committed
231

232
233
234
235
  if (NOT DEFINED PARAVIEW_CATALYST_EDITION)
    set(PARAVIEW_CATALYST_EDITION Full)
  endif ()

236
237
  include(paraview.suffix)
  list(APPEND superbuild_export_variables
238
    mesa_USE_SWR
239
    mesa_SWR_ARCH
240
    nvidiaindex_SOURCE_SELECTION
241
    PARAVIEW_DEFAULT_SYSTEM_GL
242
243
    PARAVIEW_PACKAGE_SUFFIX
    PARAVIEW_CATALYST_EDITION)
Chuck Atkins's avatar
Chuck Atkins committed
244
245
246
247
248
249
250
251
252
253
254
255
256
257

  if (paraview_enabled)
    set(PARAVIEW_PACKAGE_FILE_NAME ""
      CACHE STRING "If set, overrides the generated filename for the package")
    list(APPEND superbuild_export_variables
      PARAVIEW_PACKAGE_FILE_NAME)
  endif ()

  if (paraviewsdk_enabled)
    set(PARAVIEWSDK_PACKAGE_FILE_NAME ""
      CACHE STRING "If set, overrides the generated filename for the package")
    list(APPEND superbuild_export_variables
      PARAVIEWSDK_PACKAGE_FILE_NAME)
  endif ()
258

259
260
261
262
263
264
265
266
  set(paraview_PLUGINS_AUTOLOAD ""
    CACHE STRING "List of plugins to autoload")
  foreach (paraview_plugin IN LISTS paraview_PLUGINS_AUTOLOAD)
    set("paraview_plugin_${paraview_plugin}_auto_load" 1)
    list(APPEND superbuild_export_variables
      "paraview_plugin_${paraview_plugin}_auto_load")
  endforeach ()

267
268
  set(default_package)

269
270
  foreach (generator IN LISTS generators)
    if (paraview_enabled)
271
272
273
      if (NOT default_package)
        set(default_package paraview)
      endif ()
274
275
      superbuild_add_extra_package_test(paraview "${generator}"
        LABELS  "ParaView"
276
        TIMEOUT 6400)
277
    endif ()
278
    if (catalyst_enabled OR (paraview_enabled AND UNIX AND NOT APPLE))
279
280
281
      if (NOT default_package)
        set(default_package catalyst)
      endif ()
282
283
      superbuild_add_extra_package_test(catalyst "${generator}"
        LABELS  "ParaView"
284
        TIMEOUT 6400)
285
286
    endif ()
  endforeach ()
Chuck Atkins's avatar
Chuck Atkins committed
287
288

  if (paraviewsdk_enabled)
289
    set(default_package paraviewsdk)
Chuck Atkins's avatar
Chuck Atkins committed
290
291
292
    superbuild_add_extra_package_test(paraviewsdk "TGZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Cory Quammen's avatar
Cory Quammen committed
293
294
295
    superbuild_add_extra_package_test(paraviewsdk "TXZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Chuck Atkins's avatar
Chuck Atkins committed
296
  endif ()
297
298
299
300

  if (default_package)
    superbuild_enable_install_target("${default_package}/${default_generator}")
  endif ()
301
endfunction ()
302

303
304
305
306
function (superbuild_add_tests)
  add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()

307
308
309
310
311
312
313
314
315
316
317
318
set(qt5_skip_modules
  qtconnectivity
  qtgamepad
  qtlocation
  qtmultimedia
  qtsensors
  qtserialport
  qtwayland
  qtwebchannel
  qtwebengine
  qtwebsockets)

319
320
set(boost_libraries
  date_time
Ben Boeckel's avatar
Ben Boeckel committed
321
322
323
  filesystem
  iostreams
  program_options
324
325
  system
  thread)
Dan Lipsa's avatar
Dan Lipsa committed
326
327
set(boost_extra_options
  "-sNO_BZIP2=1")
328
329
330

list(APPEND superbuild_version_files
  "${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
331
list(APPEND superbuild_ctest_custom_files
332
  "${CMAKE_CURRENT_LIST_DIR}/cmake/CTestCustom.cmake")
333
334
list(APPEND superbuild_project_roots
  "${CMAKE_CURRENT_LIST_DIR}/projects")
335

336
337
338
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)

339
340
341
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)

342
343
344
# Enable nlohmann_json by default
set(_superbuild_default_nlohmannjson ON)

Ben Boeckel's avatar
Ben Boeckel committed
345
346
# set the default for qt5 to be 5.9
set(_superbuild_qt5_default_selection "5.9")
Ben Boeckel's avatar
Ben Boeckel committed
347

Ben Boeckel's avatar
Ben Boeckel committed
348
349
350
351
# Build UCS4 binaries by default. This is more compatible with Linux
# distributions.
set(_python_unicode_default "UCS4")

352
353
354
355
356
357
if (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/superbuild/CMakeLists.txt")
  message(FATAL_ERROR "It appears as though the superbuild infrastructure "
                      "is missing; did you forget to do `git submodule init` "
                      "and `git submodule update`?")
endif ()

358
add_subdirectory(superbuild)