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

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

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

  list(APPEND projects
130
    ospraymaterials
131
    paraviewgettingstartedguide
132
    paraviewtutorialdata)
133

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

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

149
150
  if (WIN32)
    list(APPEND projects
Ben Boeckel's avatar
Ben Boeckel committed
151
      ftjam
Ken Martin's avatar
Ken Martin committed
152
      openvr
153
154
155
      pywin32)
  endif ()

Ben Boeckel's avatar
Ben Boeckel committed
156
157
158
159
160
  if (WIN32 OR (UNIX AND NOT APPLE))
    list(APPEND projects
      nvidiaindex)
  endif ()

161
162
163
164
  set("${var}"
    ${projects}
    PARENT_SCOPE)
endfunction ()
165

166
167
168
169
170
function (superbuild_sanity_check)
  if (NOT paraview_enabled AND NOT catalyst_enabled)
    message(WARNING "ParaView is disabled...")
  endif ()

171
172
173
174
175
176
177
  # 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 ()

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

  # 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.")
186
187
  endif ()

188
189
190
191
192
  # 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 ()

193
  # Sanity check: Cannot have OSMesa and Qt enabled at the same time if we're building ParaView.
Ben Boeckel's avatar
Ben Boeckel committed
194
  if (osmesa_enabled AND qt5_enabled AND paraview_enabled)
195
196
197
198
199
200
201
202
203
204
205
206
207
208
    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 ()

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

Ben Boeckel's avatar
Ben Boeckel committed
224
225
226
  if (USE_SYSTEM_qt5)
    list(APPEND superbuild_export_variables
      Qt5_DIR)
227
228
229
230
    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
231
  endif ()
232
233
  list(APPEND superbuild_export_variables
    qt5_version)
Ben Boeckel's avatar
Ben Boeckel committed
234

235
236
237
238
  if (NOT DEFINED PARAVIEW_CATALYST_EDITION)
    set(PARAVIEW_CATALYST_EDITION Full)
  endif ()

239
240
241
242
243
244
  if (BUILD_SHARED_LIBS_paraview STREQUAL "<same>")
    set(paraview_is_shared "${BUILD_SHARED_LIBS}")
  else ()
    set(paraview_is_shared "${BUILD_SHARED_LIBS_paraview}")
  endif ()

245
246
  include(paraview.suffix)
  list(APPEND superbuild_export_variables
247
    mesa_USE_SWR
248
    mesa_SWR_ARCH
249
    nvidiaindex_SOURCE_SELECTION
250
    PARAVIEW_DEFAULT_SYSTEM_GL
251
    PARAVIEW_PACKAGE_SUFFIX
252
253
    PARAVIEW_CATALYST_EDITION
    paraview_is_shared)
Chuck Atkins's avatar
Chuck Atkins committed
254
255
256
257
258
259
260
261
262
263
264
265
266
267

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

269
270
271
272
273
274
275
276
  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 ()

277
278
  set(default_package)

279
280
  foreach (generator IN LISTS generators)
    if (paraview_enabled)
281
282
283
      if (NOT default_package)
        set(default_package paraview)
      endif ()
284
285
      superbuild_add_extra_package_test(paraview "${generator}"
        LABELS  "ParaView"
286
        TIMEOUT 6400)
287
    endif ()
288
    if (catalyst_enabled OR (paraview_enabled AND UNIX AND NOT APPLE))
289
290
291
      if (NOT default_package)
        set(default_package catalyst)
      endif ()
292
293
      superbuild_add_extra_package_test(catalyst "${generator}"
        LABELS  "ParaView"
294
        TIMEOUT 6400)
295
296
    endif ()
  endforeach ()
Chuck Atkins's avatar
Chuck Atkins committed
297
298

  if (paraviewsdk_enabled)
299
    set(default_package paraviewsdk)
Chuck Atkins's avatar
Chuck Atkins committed
300
301
302
    superbuild_add_extra_package_test(paraviewsdk "TGZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Cory Quammen's avatar
Cory Quammen committed
303
304
305
    superbuild_add_extra_package_test(paraviewsdk "TXZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Chuck Atkins's avatar
Chuck Atkins committed
306
  endif ()
307
308
309
310

  if (default_package)
    superbuild_enable_install_target("${default_package}/${default_generator}")
  endif ()
311
endfunction ()
312

313
314
315
316
function (superbuild_add_tests)
  add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()

317
318
319
320
321
322
323
324
325
326
327
328
set(qt5_skip_modules
  qtconnectivity
  qtgamepad
  qtlocation
  qtmultimedia
  qtsensors
  qtserialport
  qtwayland
  qtwebchannel
  qtwebengine
  qtwebsockets)

329
set(boost_libraries
330
331
  atomic
  chrono
332
  date_time
Ben Boeckel's avatar
Ben Boeckel committed
333
334
335
  filesystem
  iostreams
  program_options
336
  regex
337
338
  system
  thread)
Dan Lipsa's avatar
Dan Lipsa committed
339
340
set(boost_extra_options
  "-sNO_BZIP2=1")
341
342
343

list(APPEND superbuild_version_files
  "${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
344
list(APPEND superbuild_ctest_custom_files
345
  "${CMAKE_CURRENT_LIST_DIR}/cmake/CTestCustom.cmake")
346
347
list(APPEND superbuild_project_roots
  "${CMAKE_CURRENT_LIST_DIR}/projects")
348

349
350
351
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)

352
353
354
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)

355
356
357
# Enable nlohmann_json by default
set(_superbuild_default_nlohmannjson ON)

Ben Boeckel's avatar
Ben Boeckel committed
358
359
# set the default for qt5 to be 5.9
set(_superbuild_qt5_default_selection "5.9")
Ben Boeckel's avatar
Ben Boeckel committed
360

361
362
363
# Force qt SVG support, so ParaView can use SVG icons
set(qt5_ENABLE_SVG ON CACHE INTERNAL "ParaView requires SVG support")

364
365
366
367
368
# 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
369
option(BUILD_SHARED_LIBS "Build shared or static libs" ON)
370
371
if (NOT BUILD_SHARED_LIBS AND _superbuild_no_static_everywhere)
  message(FATAL_ERROR
372
373
    "Setting BUILD_SHARED_LIBS=OFF is almost certainly what you don't want. "
    "Maybe you want the `BUILD_SHARED_LIBS_paraview=OFF` option?")
374
375
endif ()

Ben Boeckel's avatar
Ben Boeckel committed
376
377
378
379
# Build UCS4 binaries by default. This is more compatible with Linux
# distributions.
set(_python_unicode_default "UCS4")

380
381
382
383
384
385
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 ()

386
add_subdirectory(superbuild)