CMakeLists.txt 10.9 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.8.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
    python
    python2
    python3)
39
40
41
42
43

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

100
  if (UNIX)
101
    list(APPEND projects
102
      cosmotools
103
      ffi
104
      ffmpeg
Ben Boeckel's avatar
Ben Boeckel committed
105
      fortran
Joachim Pouderoux's avatar
Joachim Pouderoux committed
106
      gdal
107
      genericio
108
      lapack
109
      libxml2
Cory Quammen's avatar
Cory Quammen committed
110
      mili
111
      rapidjson
Ben Boeckel's avatar
Ben Boeckel committed
112
      scipy)
113
114
115
116

    if (NOT APPLE)
      list(APPEND projects
        egl
Chuck Atkins's avatar
Chuck Atkins committed
117
        expat
118
        fontconfig
Chuck Atkins's avatar
Chuck Atkins committed
119
        glproto
120
        gperf
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
121
        launchers
122
        libfabric
123
124
125
        llvm
        mesa
        osmesa
Ben Boeckel's avatar
Ben Boeckel committed
126
        paraviewsdk
127
128
        socat
        utillinux)
129
130
131
132
    endif ()
  endif ()

  list(APPEND projects
133
    ospraymaterials
134
    paraviewgettingstartedguide
135
    paraviewtutorialdata)
136

137
  if (USE_NONFREE_COMPONENTS)
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
138
    # add non-free projects here.
Ben Boeckel's avatar
Ben Boeckel committed
139
140
141
142
    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
143
144
        nvidiamdl
        nvidiaoptix)
Ben Boeckel's avatar
Ben Boeckel committed
145
146
147
148

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

152
153
  if (WIN32)
    list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
154
      ftjam
Ken Martin's avatar
Ken Martin committed
155
      openvr
156
157
158
      pywin32)
  endif ()

Ben Boeckel's avatar
Ben Boeckel committed
159
160
161
162
163
  if (WIN32 OR (UNIX AND NOT APPLE))
    list(APPEND projects
      nvidiaindex)
  endif ()

164
165
166
167
  set("${var}"
    ${projects}
    PARENT_SCOPE)
endfunction ()
168

169
170
171
172
173
function (superbuild_sanity_check)
  if (NOT paraview_enabled AND NOT catalyst_enabled)
    message(WARNING "ParaView is disabled...")
  endif ()

174
175
176
177
178
179
180
  # 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 ()

181
  # Sanity check: Cannot have EGL and Qt enabled at the same time.
Ben Boeckel's avatar
Ben Boeckel committed
182
  if (egl_enabled AND qt5_enabled)
183
    message(SEND_ERROR "Cannot enable EGL and Qt at the same time.")
184
  endif ()
185
186
187
188

  # 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.")
189
190
  endif ()

191
192
193
194
195
  # 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 ()

196
  # Sanity check: Cannot have OSMesa and Qt enabled at the same time if we're building ParaView.
Ben Boeckel's avatar
Ben Boeckel committed
197
  if (osmesa_enabled AND qt5_enabled AND paraview_enabled)
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 ()

Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
206
207
208
209
210
211
212
213
  # 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 ()
214
215
endfunction ()

216
217
218
function (superbuild_add_packaging)
  if (WIN32)
    set(generators
219
220
      ZIP
      NSIS)
221
222
223
224
225
  elseif (APPLE)
    set(generators
      DragNDrop)
  else ()
    set(generators
Utkarsh Ayachit's avatar
Utkarsh Ayachit committed
226
      TGZ)
227
  endif ()
228
  list(GET generators 0 default_generator)
229

230
  if (qt5_enabled AND (USE_SYSTEM_qt5 OR APPLE OR WIN32))
Ben Boeckel's avatar
Ben Boeckel committed
231
232
    list(APPEND superbuild_export_variables
      Qt5_DIR)
233
234
235
236
    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
237
  endif ()
238
239
  list(APPEND superbuild_export_variables
    qt5_version)
Ben Boeckel's avatar
Ben Boeckel committed
240

241
242
243
244
  if (NOT DEFINED PARAVIEW_CATALYST_EDITION)
    set(PARAVIEW_CATALYST_EDITION Full)
  endif ()

245
246
247
248
249
250
  if (BUILD_SHARED_LIBS_paraview STREQUAL "<same>")
    set(paraview_is_shared "${BUILD_SHARED_LIBS}")
  else ()
    set(paraview_is_shared "${BUILD_SHARED_LIBS_paraview}")
  endif ()

251
252
  include(paraview.suffix)
  list(APPEND superbuild_export_variables
253
    mesa_USE_SWR
254
    mesa_SWR_ARCH
255
    nvidiaindex_SOURCE_SELECTION
256
    PARAVIEW_PACKAGE_SUFFIX
257
258
    PARAVIEW_CATALYST_EDITION
    paraview_is_shared)
Chuck Atkins's avatar
Chuck Atkins committed
259
260
261
262
263
264
265
266
267
268
269
270
271
272

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

274
275
276
277
278
279
280
281
282
283
284
  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()

285
286
287
288
289
290
291
292
  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 ()

293
294
  set(default_package)

295
296
  foreach (generator IN LISTS generators)
    if (paraview_enabled)
297
298
299
      if (NOT default_package)
        set(default_package paraview)
      endif ()
300
301
      superbuild_add_extra_package_test(paraview "${generator}"
        LABELS  "ParaView"
302
        TIMEOUT 6400)
303
304
    endif ()
  endforeach ()
Chuck Atkins's avatar
Chuck Atkins committed
305
306

  if (paraviewsdk_enabled)
307
    set(default_package paraviewsdk)
Chuck Atkins's avatar
Chuck Atkins committed
308
309
310
    superbuild_add_extra_package_test(paraviewsdk "TGZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Cory Quammen's avatar
Cory Quammen committed
311
312
313
    superbuild_add_extra_package_test(paraviewsdk "TXZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Chuck Atkins's avatar
Chuck Atkins committed
314
  endif ()
315
316
317
318

  if (default_package)
    superbuild_enable_install_target("${default_package}/${default_generator}")
  endif ()
319
endfunction ()
320

321
322
323
324
function (superbuild_add_tests)
  add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()

325
326
327
328
329
330
331
332
333
334
335
336
set(qt5_skip_modules
  qtconnectivity
  qtgamepad
  qtlocation
  qtmultimedia
  qtsensors
  qtserialport
  qtwayland
  qtwebchannel
  qtwebengine
  qtwebsockets)

337
set(boost_libraries
338
339
  atomic
  chrono
340
  date_time
Ben Boeckel's avatar
Ben Boeckel committed
341
342
343
  filesystem
  iostreams
  program_options
344
  regex
345
346
  system
  thread)
Dan Lipsa's avatar
Dan Lipsa committed
347
348
set(boost_extra_options
  "-sNO_BZIP2=1")
349
350
351

list(APPEND superbuild_version_files
  "${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
352
list(APPEND superbuild_ctest_custom_files
353
  "${CMAKE_CURRENT_LIST_DIR}/cmake/CTestCustom.cmake")
354
355
list(APPEND superbuild_project_roots
  "${CMAKE_CURRENT_LIST_DIR}/projects")
356

357
358
359
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)

360
361
362
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)

363
364
365
# Enable nlohmann_json by default
set(_superbuild_default_nlohmannjson ON)

Ben Boeckel's avatar
Ben Boeckel committed
366
367
# set the default for qt5 to be 5.9
set(_superbuild_qt5_default_selection "5.9")
Ben Boeckel's avatar
Ben Boeckel committed
368

369
370
371
# Force qt SVG support, so ParaView can use SVG icons
set(qt5_ENABLE_SVG ON CACHE INTERNAL "ParaView requires SVG support")

372
373
374
375
376
# 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
377
option(BUILD_SHARED_LIBS "Build shared or static libs" ON)
378
379
if (NOT BUILD_SHARED_LIBS AND _superbuild_no_static_everywhere)
  message(FATAL_ERROR
380
381
    "Setting BUILD_SHARED_LIBS=OFF is almost certainly what you don't want. "
    "Maybe you want the `BUILD_SHARED_LIBS_paraview=OFF` option?")
382
383
endif ()

Ben Boeckel's avatar
Ben Boeckel committed
384
385
386
387
# Build UCS4 binaries by default. This is more compatible with Linux
# distributions.
set(_python_unicode_default "UCS4")

388
389
390
391
# 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)

392
393
394
395
396
397
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 ()

398
399
400
401
402
403
404
# 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()

405
add_subdirectory(superbuild)