CMakeLists.txt 11 KB
Newer Older
1
cmake_minimum_required(VERSION 3.12)
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.9.0-RC1"
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
36
    python
    python3)
37
38
39
40
41

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

  list(APPEND projects
Chuck Atkins's avatar
Chuck Atkins committed
42
    adios2
43
44
    boost
    bzip2
Ben Boeckel's avatar
Ben Boeckel committed
45
    cuda
David E. DeMarle's avatar
David E. DeMarle committed
46
    embree
47
    freetype
Joachim Pouderoux's avatar
Joachim Pouderoux committed
48
    gdal
49
50
    hdf5
    ispc
Ben Boeckel's avatar
Ben Boeckel committed
51
    las
52
    lookingglass
53
54
    matplotlib
    mpi
Ben Boeckel's avatar
Ben Boeckel committed
55
    netcdf
56
    nlohmannjson
57
    numpy
58
    openimagedenoise
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
59
60
61
    openvkl
    ospray
    ospraymodulempi
62
    paraviewweb
63
    paraviewwebglance
Sebastien Jourdain's avatar
Sebastien Jourdain committed
64
    paraviewweblite
65
    paraviewwebdivvy
66
    paraviewwebflow
Ben Boeckel's avatar
Ben Boeckel committed
67
    paraviewwebvisualizer
68
    png
69
    protobuf
70
    pythonattrs
71
72
    pythonautobahn
    pythonconstantly
73
    pythoncycler
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
74
    pythoncython
75
    pythondateutil
76
77
    pythonhyperlink
    pythonincremental
78
    pythonkiwisolver
79
    pythonmako
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
80
    pythonpandas
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
81
    pythonpygments
82
    pythonpyparsing
Ben Boeckel's avatar
Ben Boeckel committed
83
    pythonsetuptools
84
85
86
87
    pythonsix
    pythontwisted
    pythontxaio
    pythonwslink
Ben Boeckel's avatar
Ben Boeckel committed
88
    pythonzope
89
    pythonzopeinterface
90
    pytz
91
    qt5
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
92
    rkcommon
93
94
95
96
97
98
    silo
    szip
    tbb
    visitbridge
    vortexfinder2
    vrpn
Robert Maynard's avatar
Robert Maynard committed
99
    vtkm
100
    xdmf3
Chuck Atkins's avatar
Chuck Atkins committed
101
    zfp
102
103
    zlib)

104
  if (UNIX)
105
    list(APPEND projects
106
      cosmotools
107
      ffi
108
      ffmpeg
Caitlin Ross's avatar
Caitlin Ross committed
109
      fides
Ben Boeckel's avatar
Ben Boeckel committed
110
      fortran
Joachim Pouderoux's avatar
Joachim Pouderoux committed
111
      gdal
112
      genericio
113
      lapack
114
      libxml2
Cory Quammen's avatar
Cory Quammen committed
115
      mili
116
      pkgconf
117
      pybind11
118
      rapidjson
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
119
120
      scipy
      sqlite)
121
122
123
124

    if (NOT APPLE)
      list(APPEND projects
        egl
Chuck Atkins's avatar
Chuck Atkins committed
125
        expat
126
        fontconfig
Chuck Atkins's avatar
Chuck Atkins committed
127
        glproto
128
        gperf
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
129
        launchers
130
        libfabric
131
132
133
        llvm
        mesa
        osmesa
Ben Boeckel's avatar
Ben Boeckel committed
134
        paraviewsdk
135
136
        socat
        utillinux)
137
138
139
140
    endif ()
  endif ()

  list(APPEND projects
141
    ospraymaterials
142
    paraviewgettingstartedguide
143
    paraviewtutorialdata)
144

145
  if (USE_NONFREE_COMPONENTS)
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
146
    # add non-free projects here.
Ben Boeckel's avatar
Ben Boeckel committed
147
148
149
150
    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
151
152
        nvidiamdl
        nvidiaoptix)
Ben Boeckel's avatar
Ben Boeckel committed
153
154
155
156

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

160
161
  if (WIN32)
    list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
162
      ftjam
Ken Martin's avatar
Ken Martin committed
163
      openvr
164
165
166
      pywin32)
  endif ()

Ben Boeckel's avatar
Ben Boeckel committed
167
168
169
170
171
  if (WIN32 OR (UNIX AND NOT APPLE))
    list(APPEND projects
      nvidiaindex)
  endif ()

172
173
174
175
  set("${var}"
    ${projects}
    PARENT_SCOPE)
endfunction ()
176

177
178
179
180
181
function (superbuild_sanity_check)
  if (NOT paraview_enabled AND NOT catalyst_enabled)
    message(WARNING "ParaView is disabled...")
  endif ()

182
183
184
185
186
187
188
  # 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 ()

189
  # Sanity check: Cannot have EGL and Qt enabled at the same time.
Ben Boeckel's avatar
Ben Boeckel committed
190
  if (egl_enabled AND qt5_enabled)
191
    message(SEND_ERROR "Cannot enable EGL and Qt at the same time.")
192
  endif ()
193
194
195
196

  # 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.")
197
198
  endif ()

199
200
201
202
203
  # 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 ()

204
  # Sanity check: Cannot have OSMesa and Qt enabled at the same time if we're building ParaView.
Ben Boeckel's avatar
Ben Boeckel committed
205
  if (osmesa_enabled AND qt5_enabled AND paraview_enabled)
206
207
208
209
210
211
212
213
    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 ()

Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
214
215
216
217
218
219
220
221
  # Sanity check: report cases where it doesn't make any sense to enable launchers.
  if (launchers_enabled AND NOT (mesa_enabled OR mpi_enabled))
    message(SEND_ERROR "Launchers cannot be enabled since neither MPI or MESA is enabled.")
  endif ()

  if (launchers_enabled AND mpi_enabled AND USE_SYSTEM_mpi AND NOT mesa_enabled)
    message(SEND_ERROR "Launchers cannot be enabled since MESA is not enabled and USE_SYSTEM_mpi is ON.")
  endif ()
222
223
endfunction ()

224
225
226
function (superbuild_add_packaging)
  if (WIN32)
    set(generators
227
228
      ZIP
      NSIS)
229
230
231
232
233
  elseif (APPLE)
    set(generators
      DragNDrop)
  else ()
    set(generators
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
234
      TGZ)
235
  endif ()
236
  list(GET generators 0 default_generator)
237

238
  if (qt5_enabled AND (USE_SYSTEM_qt5 OR APPLE OR WIN32))
Ben Boeckel's avatar
Ben Boeckel committed
239
240
    list(APPEND superbuild_export_variables
      Qt5_DIR)
241
242
243
244
    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
245
  endif ()
246
247
  list(APPEND superbuild_export_variables
    qt5_version)
Ben Boeckel's avatar
Ben Boeckel committed
248

249
250
251
252
  if (NOT DEFINED PARAVIEW_CATALYST_EDITION)
    set(PARAVIEW_CATALYST_EDITION Full)
  endif ()

253
254
255
256
257
258
  if (BUILD_SHARED_LIBS_paraview STREQUAL "<same>")
    set(paraview_is_shared "${BUILD_SHARED_LIBS}")
  else ()
    set(paraview_is_shared "${BUILD_SHARED_LIBS_paraview}")
  endif ()

259
260
  include(paraview.suffix)
  list(APPEND superbuild_export_variables
261
    mesa_USE_SWR
262
    mesa_SWR_ARCH
263
    nvidiaindex_SOURCE_SELECTION
264
    PARAVIEW_PACKAGE_SUFFIX
265
266
    PARAVIEW_CATALYST_EDITION
    paraview_is_shared)
Chuck Atkins's avatar
Chuck Atkins committed
267
268
269
270
271
272
273
274
275
276
277
278
279
280

  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 ()
281

282
283
284
285
286
287
288
289
290
291
292
  if (zfp_enabled)
    # ZFP will look for OpenMP and enable it if OPENMP_FOUND is set to
    # true. Do the same here and export a variable to the packaging step
    # if it is found.
    find_package(OpenMP COMPONENTS C)
    if (OPENMP_FOUND)
      set(CMAKE_INSTALL_OPENMP_LIBRARIES 1 CACHE BOOL "Install OpenMP runtime libraries")
      list(APPEND superbuild_export_variables CMAKE_INSTALL_OPENMP_LIBRARIES)
    endif()
  endif()

293
294
295
296
297
298
299
300
  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 ()

301
302
  set(default_package)

303
304
  foreach (generator IN LISTS generators)
    if (paraview_enabled)
305
306
307
      if (NOT default_package)
        set(default_package paraview)
      endif ()
308
309
      superbuild_add_extra_package_test(paraview "${generator}"
        LABELS  "ParaView"
310
        TIMEOUT 6400)
311
312
    endif ()
  endforeach ()
Chuck Atkins's avatar
Chuck Atkins committed
313
314

  if (paraviewsdk_enabled)
315
    set(default_package paraviewsdk)
Chuck Atkins's avatar
Chuck Atkins committed
316
317
318
    superbuild_add_extra_package_test(paraviewsdk "TGZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Cory Quammen's avatar
Cory Quammen committed
319
320
321
    superbuild_add_extra_package_test(paraviewsdk "TXZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Chuck Atkins's avatar
Chuck Atkins committed
322
  endif ()
323
324
325
326

  if (default_package)
    superbuild_enable_install_target("${default_package}/${default_generator}")
  endif ()
327
endfunction ()
328

329
330
331
332
function (superbuild_add_tests)
  add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()

333
334
335
336
337
338
339
340
341
342
343
344
set(qt5_skip_modules
  qtconnectivity
  qtgamepad
  qtlocation
  qtmultimedia
  qtsensors
  qtserialport
  qtwayland
  qtwebchannel
  qtwebengine
  qtwebsockets)

345
set(boost_libraries
346
347
  atomic
  chrono
348
  date_time
Ben Boeckel's avatar
Ben Boeckel committed
349
350
351
  filesystem
  iostreams
  program_options
352
  regex
353
354
  system
  thread)
Dan Lipsa's avatar
Dan Lipsa committed
355
356
set(boost_extra_options
  "-sNO_BZIP2=1")
357
358
359

list(APPEND superbuild_version_files
  "${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
360
list(APPEND superbuild_ctest_custom_files
361
  "${CMAKE_CURRENT_LIST_DIR}/cmake/CTestCustom.cmake")
362
363
list(APPEND superbuild_project_roots
  "${CMAKE_CURRENT_LIST_DIR}/projects")
364

365
366
367
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)

368
369
370
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)

371
372
373
# Enable nlohmann_json by default
set(_superbuild_default_nlohmannjson ON)

374
375
# set the default for qt5 to be 5.12
set(_superbuild_qt5_default_selection "5.12")
Ben Boeckel's avatar
Ben Boeckel committed
376

377
378
379
# Force qt SVG support, so ParaView can use SVG icons
set(qt5_ENABLE_SVG ON CACHE INTERNAL "ParaView requires SVG support")

380
381
382
383
384
# ParaView's superbuild does not support static-everywhere builds. But let
# people around the check if they want it.
if (NOT PARAVIEW_I_WANT_EVERYTHING_STATIC)
  set(_superbuild_no_static_everywhere ON)
endif ()
Ben Boeckel's avatar
Ben Boeckel committed
385
option(BUILD_SHARED_LIBS "Build shared or static libs" ON)
386
387
if (NOT BUILD_SHARED_LIBS AND _superbuild_no_static_everywhere)
  message(FATAL_ERROR
388
389
    "Setting BUILD_SHARED_LIBS=OFF is almost certainly what you don't want. "
    "Maybe you want the `BUILD_SHARED_LIBS_paraview=OFF` option?")
390
391
endif ()

Ben Boeckel's avatar
Ben Boeckel committed
392
393
394
395
# Build UCS4 binaries by default. This is more compatible with Linux
# distributions.
set(_python_unicode_default "UCS4")

396
397
398
399
# The projects end up with "errors" in their output that CDash ends up seeing
# and thinking things went wrong.
set(_superbuild_suppress_matplotlib_output ON)

400
401
402
403
404
405
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 ()

406
407
408
409
410
411
412
# Warn about deprecated PARAVIEW_DEFAULT_SYSTEM_GL.
if (DEFINED PARAVIEW_DEFAULT_SYSTEM_GL)
  message(WARNING "The 'PARAVIEW_DEFAULT_SYSTEM_GL' variable is deprecated. "
    "Use the 'launchers' project instead.")
  set(_superbuild_default_launchers "${PARAVIEW_DEFAULT_SYSTEM_GL}")
endif()

413
add_subdirectory(superbuild)