CMakeLists.txt 9.21 KB
Newer Older
1
cmake_minimum_required(VERSION 3.6.1)
2

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

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

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

  list(APPEND projects
128
    ospraymaterials
129
    paraviewgettingstartedguide
130
    paraviewtutorialdata)
131

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

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

147 148
  if (WIN32)
    list(APPEND projects
149
      ftjam
150
      openvr
151 152 153
      pywin32)
  endif ()

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

159 160 161 162
  set("${var}"
    ${projects}
    PARENT_SCOPE)
endfunction ()
163

164 165 166 167 168 169 170 171 172
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()

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

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

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

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

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

211 212 213
function (superbuild_add_packaging)
  if (WIN32)
    set(generators
214 215
      ZIP
      NSIS)
216 217 218 219 220
  elseif (APPLE)
    set(generators
      DragNDrop)
  else ()
    set(generators
221 222
      TGZ
      TXZ)
223
  endif ()
224
  list(GET generators 0 default_generator)
225

226 227 228
  if (USE_SYSTEM_qt5)
    list(APPEND superbuild_export_variables
      Qt5_DIR)
229 230 231 232
    find_package(Qt5 QUIET REQUIRED COMPONENTS Core)
    set(qt5_version "${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}")
  else ()
    set(qt5_version "${qt5_SOURCE_SELECTION}")
233
  endif ()
234 235
  list(APPEND superbuild_export_variables
    qt5_version)
236

237 238 239 240
  if (NOT DEFINED PARAVIEW_CATALYST_EDITION)
    set(PARAVIEW_CATALYST_EDITION Full)
  endif ()

241 242
  include(paraview.suffix)
  list(APPEND superbuild_export_variables
243
    mesa_USE_SWR
244
    mesa_SWR_ARCH
245
    nvidiaindex_SOURCE_SELECTION
246
    PARAVIEW_DEFAULT_SYSTEM_GL
247 248
    PARAVIEW_PACKAGE_SUFFIX
    PARAVIEW_CATALYST_EDITION)
Chuck Atkins's avatar
Chuck Atkins committed
249 250 251 252 253 254 255 256 257 258 259 260 261 262

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

264 265 266 267 268 269 270 271
  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 ()

272 273
  set(default_package)

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

  if (paraviewsdk_enabled)
294
    set(default_package paraviewsdk)
Chuck Atkins's avatar
Chuck Atkins committed
295 296 297
    superbuild_add_extra_package_test(paraviewsdk "TGZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
298 299 300
    superbuild_add_extra_package_test(paraviewsdk "TXZ"
      LABELS  "ParaView"
      TIMEOUT 6400)
Chuck Atkins's avatar
Chuck Atkins committed
301
  endif ()
302 303 304 305

  if (default_package)
    superbuild_enable_install_target("${default_package}/${default_generator}")
  endif ()
306
endfunction ()
307

308 309 310 311
function (superbuild_add_tests)
  add_subdirectory("${CMAKE_SOURCE_DIR}/tests" "${CMAKE_BINARY_DIR}/tests")
endfunction ()

312 313 314 315 316 317 318 319 320 321 322 323
set(qt5_skip_modules
  qtconnectivity
  qtgamepad
  qtlocation
  qtmultimedia
  qtsensors
  qtserialport
  qtwayland
  qtwebchannel
  qtwebengine
  qtwebsockets)

324 325
set(boost_libraries
  date_time
326 327 328
  filesystem
  iostreams
  program_options
329 330
  system
  thread)
331 332
set(boost_extra_options
  "-sNO_BZIP2=1")
333 334 335

list(APPEND superbuild_version_files
  "${CMAKE_CURRENT_LIST_DIR}/versions.cmake")
336
list(APPEND superbuild_ctest_custom_files
337
  "${CMAKE_CURRENT_LIST_DIR}/cmake/CTestCustom.cmake")
338 339
list(APPEND superbuild_project_roots
  "${CMAKE_CURRENT_LIST_DIR}/projects")
340

341 342 343
# set the default arguments used for "git clone"
set(_git_clone_arguments_default --progress)

344 345 346
# set the default for cxx11 to be enabled for this project
set(_superbuild_default_cxx11 ON)

347 348 349
# Enable nlohmann_json by default
set(_superbuild_default_nlohmannjson ON)

Ben Boeckel's avatar
Ben Boeckel committed
350 351
# set the default for qt5 to be 5.9
set(_superbuild_qt5_default_selection "5.9")
Ben Boeckel's avatar
Ben Boeckel committed
352

Ben Boeckel's avatar
Ben Boeckel committed
353 354 355 356
# Build UCS4 binaries by default. This is more compatible with Linux
# distributions.
set(_python_unicode_default "UCS4")

357 358 359 360 361 362
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 ()

363
add_subdirectory(superbuild)