spack/var/spack/repos/builtin/packages/paraview/package.py
kwryankrattiger cef59ad0bf
Patch VTK to enable python 3.8 in VTK 8.2 (#38735)
* VTK: Add patch for python 3.8 support

* CI: Re-enable VisIt in CI

* Configure spec matrix for stack with VisIt

* Add pugixml dep for 8.2.0

* Make VTK and ParaView consistent on proj dep

* OpenMPI 3: provides MP support by default

* Add details on proj dep in ParaView

* Add python 3.8 to test mock repo

* Patches to get VisIt VTK interface

* CI: Disable VisIt with GUI in DAV
2023-08-28 16:56:31 -05:00

655 lines
28 KiB
Python

# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import itertools
import os
import sys
from spack.package import *
class Paraview(CMakePackage, CudaPackage, ROCmPackage):
"""ParaView is an open-source, multi-platform data analysis and
visualization application. This package includes the Catalyst
in-situ library for versions 5.7 and greater, otherwise use the
catalyst package.
"""
homepage = "https://www.paraview.org"
url = "https://www.paraview.org/files/v5.7/ParaView-v5.7.0.tar.xz"
list_url = "https://www.paraview.org/files"
list_depth = 1
git = "https://gitlab.kitware.com/paraview/paraview.git"
maintainers("danlipsa", "vicentebolea", "kwryankrattiger")
tags = ["e4s"]
version("master", branch="master", submodules=True)
version(
"5.11.1",
sha256="5cc2209f7fa37cd3155d199ff6c3590620c12ca4da732ef7698dec37fa8dbb34",
preferred=True,
)
version("5.11.0", sha256="9a0b8fe8b1a2cdfd0ace9a87fa87e0ec21ee0f6f0bcb1fdde050f4f585a25165")
version("5.10.1", sha256="520e3cdfba4f8592be477314c2f6c37ec73fb1d5b25ac30bdbd1c5214758b9c2")
version("5.10.0", sha256="86d85fcbec395cdbc8e1301208d7c76d8f48b15dc6b967ffbbaeee31242343a5")
version("5.9.1", sha256="0d486cb6fbf55e428845c9650486f87466efcb3155e40489182a7ea85dfd4c8d")
version("5.9.0", sha256="b03258b7cddb77f0ee142e3e77b377e5b1f503bcabc02bfa578298c99a06980d")
version("5.8.1", sha256="7653950392a0d7c0287c26f1d3a25cdbaa11baa7524b0af0e6a1a0d7d487d034")
version("5.8.0", sha256="219e4107abf40317ce054408e9c3b22fb935d464238c1c00c0161f1c8697a3f9")
version("5.7.0", sha256="e41e597e1be462974a03031380d9e5ba9a7efcdb22e4ca2f3fec50361f310874")
version("5.6.2", sha256="1f3710b77c58a46891808dbe23dc59a1259d9c6b7bb123aaaeaa6ddf2be882ea")
version("5.6.0", sha256="cb8c4d752ad9805c74b4a08f8ae6e83402c3f11e38b274dba171b99bb6ac2460")
version("5.5.2", sha256="64561f34c4402b88f3cb20a956842394dde5838efd7ebb301157a837114a0e2d")
version("5.5.1", sha256="a6e67a95a7a5711a2b5f95f38ccbff4912262b3e1b1af7d6b9afe8185aa85c0d")
version("5.5.0", sha256="1b619e326ff574de808732ca9a7447e4cd14e94ae6568f55b6581896cd569dff")
version("5.4.1", sha256="390d0f5dc66bf432e202a39b1f34193af4bf8aad2355338fa5e2778ea07a80e4")
version("5.4.0", sha256="f488d84a53b1286d2ee1967e386626c8ad05a6fe4e6cbdaa8d5e042f519f94a9")
version("5.3.0", sha256="046631bbf00775edc927314a3db207509666c9c6aadc7079e5159440fd2f88a0")
version("5.2.0", sha256="894e42ef8475bb49e4e7e64f4ee2c37c714facd18bfbb1d6de7f69676b062c96")
version("5.1.2", sha256="ff02b7307a256b7c6e8ad900dee5796297494df7f9a0804fe801eb2f66e6a187")
version("5.0.1", sha256="caddec83ec284162a2cbc46877b0e5a9d2cca59fb4ab0ea35b0948d2492950bb")
version("4.4.0", sha256="c2dc334a89df24ce5233b81b74740fc9f10bc181cd604109fd13f6ad2381fc73")
variant(
"development_files",
default=True,
description="Install include files for Catalyst or plugins support",
)
variant("python", default=False, description="Enable Python support", when="@5.6:")
variant("fortran", default=False, description="Enable Fortran support")
variant("mpi", default=True, description="Enable MPI support")
variant("osmesa", default=False, description="Enable OSMesa support")
variant("qt", default=False, description="Enable Qt (gui) support")
variant("opengl2", default=True, description="Enable OpenGL2 backend")
variant("examples", default=False, description="Build examples")
variant("hdf5", default=False, description="Use external HDF5")
variant("shared", default=True, description="Builds a shared version of the library")
variant("kits", default=True, description="Use module kits")
variant("pagosa", default=False, description="Build the pagosa adaptor")
variant("eyedomelighting", default=False, description="Enable Eye Dome Lighting feature")
variant("tbb", default=False, description="Enable multi-threaded parallelism with TBB")
variant("adios2", default=False, description="Enable ADIOS2 support", when="@5.8:")
variant("visitbridge", default=False, description="Enable VisItBridge support")
variant("raytracing", default=False, description="Enable Raytracing support")
variant(
"openpmd",
default=False,
description="Enable openPMD support (w/ ADIOS2/HDF5)",
when="@5.9: +python",
)
variant("catalyst", default=False, description="Enable Catalyst 1", when="@5.7:")
variant(
"libcatalyst",
default=False,
description="Enable Catalyst 2 (libcatalyst) implementation",
when="@5.10:",
)
variant(
"advanced_debug",
default=False,
description="Enable all other debug flags beside build_type, such as VTK_DEBUG_LEAK",
)
variant(
"build_edition",
default="canonical",
multi=False,
values=("canonical", "catalyst_rendering", "catalyst", "rendering", "core"),
description="Build editions include only certain modules. "
"Editions are listed in decreasing order of size.",
)
variant(
"use_vtkm",
default="default",
multi=False,
values=("default", "on", "off"),
description="Build VTK-m with ParaView by setting PARAVIEW_USE_VTKM=ON,OFF."
' "default" lets the build_edition make the decision.'
' "on" or "off" will always override the build_edition.',
)
conflicts("~hdf5", when="+visitbridge")
conflicts("+adios2", when="@:5.10 ~mpi")
conflicts("+openpmd", when="~adios2 ~hdf5", msg="openPMD needs ADIOS2 and/or HDF5")
conflicts("~shared", when="+cuda")
conflicts("+cuda", when="@5.8:5.10")
conflicts("+cuda", when="use_vtkm=off")
conflicts("+rocm", when="+cuda")
conflicts("+rocm", when="use_vtkm=off")
conflicts("paraview@:5.10", when="+rocm")
# Legacy rendering dropped in 5.5
# See commit: https://gitlab.kitware.com/paraview/paraview/-/commit/798d328c
conflicts("~opengl2", when="@5.5:")
# in 5.7 you cannot reduce the size of the code for Catalyst builds.
conflicts("build_edition=catalyst_rendering", when="@:5.7")
conflicts("build_edition=catalyst", when="@:5.7")
conflicts("build_edition=rendering", when="@:5.7")
conflicts("build_edition=core", when="@:5.7")
# before 5.3.0, ParaView didn't have VTK-m
conflicts("use_vtkm=on", when="@:5.3")
# paraview@5.9.0 is recommended when using the xl compiler
# See https://gitlab.kitware.com/paraview/paraview/-/merge_requests/4433
conflicts(
"paraview@:5.8",
when="%xl_r",
msg="Use paraview@5.9.0 with %xl_r. Earlier versions are not able to build with xl.",
)
# We only support one single Architecture
for _arch, _other_arch in itertools.permutations(CudaPackage.cuda_arch_values, 2):
conflicts(
"cuda_arch={0}".format(_arch),
when="cuda_arch={0}".format(_other_arch),
msg="Paraview only accepts one architecture value",
)
for _arch in range(10, 14):
conflicts("cuda_arch=%d" % _arch, when="+cuda", msg="ParaView requires cuda_arch >= 20")
depends_on("cmake@3.3:", type="build")
depends_on("cmake@3.21:", type="build", when="+rocm")
extends("python", when="+python")
# VTK < 8.2.1 can't handle Python 3.8
# This affects Paraview <= 5.7 (VTK 8.2.0)
# https://gitlab.kitware.com/vtk/vtk/-/issues/17670
depends_on("python@3:3.7", when="@:5.7 +python", type=("build", "run"))
depends_on("python@3:", when="@5.8:+python", type=("build", "run"))
depends_on("py-numpy", when="+python", type=("build", "run"))
depends_on("py-mpi4py", when="+python+mpi", type=("build", "run"))
depends_on("py-matplotlib", when="+python", type="run")
depends_on("py-pandas@0.21:", when="+python", type="run")
# openPMD is implemented as a Python module and provides ADIOS2 and HDF5 backends
depends_on("openpmd-api@0.14.5: +python", when="+python +openpmd", type=("build", "run"))
depends_on("openpmd-api +adios2", when="+openpmd +adios2", type=("build", "run"))
depends_on("openpmd-api +hdf5", when="+openpmd +hdf5", type=("build", "run"))
depends_on("tbb", when="+tbb")
depends_on("mpi", when="+mpi")
depends_on("qt+opengl", when="@5.3.0:+qt+opengl2")
depends_on("qt~opengl", when="@5.3.0:+qt~opengl2")
depends_on("qt@:4", when="@:5.2.0+qt")
depends_on("gl@3.2:", when="+opengl2")
depends_on("gl@1.2:", when="~opengl2")
depends_on("glew")
depends_on("osmesa", when="+osmesa")
for p in ["linux", "cray"]:
depends_on("glx", when="~osmesa platform={}".format(p))
depends_on("libxt", when="~osmesa platform={}".format(p))
conflicts("+qt", when="+osmesa")
depends_on("ospray@2.1:", when="+raytracing")
depends_on("openimagedenoise", when="+raytracing")
depends_on("ospray +mpi", when="+raytracing +mpi")
depends_on("bzip2")
depends_on("double-conversion")
depends_on("expat")
depends_on("eigen@3:")
depends_on("freetype")
# depends_on('hdf5+mpi', when='+mpi')
# depends_on('hdf5~mpi', when='~mpi')
depends_on("hdf5+hl+mpi", when="+hdf5+mpi")
depends_on("hdf5+hl~mpi", when="+hdf5~mpi")
depends_on("hdf5@1.10:", when="+hdf5 @5.10:")
depends_on("adios2+mpi", when="+adios2+mpi")
depends_on("adios2~mpi", when="+adios2~mpi")
depends_on("silo", when="+visitbridge")
depends_on("silo+mpi", when="+visitbridge+mpi")
depends_on("silo~mpi", when="+visitbridge~mpi")
depends_on("boost", when="+visitbridge")
depends_on("jpeg")
depends_on("jsoncpp")
depends_on("libogg")
depends_on("libpng")
depends_on("libtheora")
depends_on("libtiff")
depends_on("netcdf-c")
depends_on("pegtl")
depends_on("protobuf@3.4:")
# Paraview 5.10 can't build with protobuf > 3.18
# https://github.com/spack/spack/issues/37437
depends_on("protobuf@3.4:3.18", when="@:5.10%oneapi")
depends_on("protobuf@3.4:3.18", when="@:5.10%intel@2021:")
depends_on("protobuf@3.4:3.18", when="@:5.10%xl")
depends_on("protobuf@3.4:3.18", when="@:5.10%xl_r")
# protobuf requires newer abseil-cpp, which in turn requires C++14,
# but paraview uses C++11 by default
depends_on("protobuf@3.4:3.21", when="@:5.11")
depends_on("libxml2")
depends_on("lz4")
depends_on("xz")
depends_on("zlib-api")
depends_on("libcatalyst@2:", when="+libcatalyst")
depends_on("hip@5.2:", when="+rocm")
for target in ROCmPackage.amdgpu_targets:
depends_on(
"kokkos@:3.7.01 +rocm amdgpu_target={0}".format(target),
when="+rocm amdgpu_target={0}".format(target),
)
# Older builds of pugi export their symbols differently,
# and pre-5.9 is unable to handle that.
depends_on("pugixml@:1.10", when="@:5.8")
depends_on("pugixml", when="@5.9:")
# ParaView depends on cli11 due to changes in MR
# https://gitlab.kitware.com/paraview/paraview/-/merge_requests/4951
depends_on("cli11@1.9.1", when="@5.10:")
# ParaView depends on nlohmann-json due to changes in MR
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8550
depends_on("nlohmann-json", when="@5.11:")
# ParaView depends on proj@8.1.0 due to changes in MR
# v8.1.0 is required for VTK::GeoVis
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8474
depends_on("proj@8.1.0", when="@5.11:")
patch("stl-reader-pv440.patch", when="@4.4.0")
# Broken gcc-detection - improved in 5.1.0, redundant later
patch("gcc-compiler-pv501.patch", when="@:5.0.1")
# Broken installation (ui_pqExportStateWizard.h) - fixed in 5.2.0
patch("ui_pqExportStateWizard.patch", when="@:5.1.2")
# Broken vtk-m config. Upstream catalyst changes
patch("vtkm-catalyst-pv551.patch", when="@5.5.0:5.5.2")
# Broken H5Part with external parallel HDF5
patch("h5part-parallel.patch", when="@5.7.0:5.7")
# Broken downstream FindMPI
patch("vtkm-findmpi-downstream.patch", when="@5.9.0")
# Include limits header wherever needed to fix compilation with GCC 11
patch("paraview-gcc11-limits.patch", when="@5.9.1 %gcc@11.1.0:")
# Fix IOADIOS2 module to work with kits
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8653
patch("vtk-adios2-module-no-kit.patch", when="@5.8:")
# Patch for paraview 5.9.0%xl_r
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/7591
patch("xlc-compilation-pv590.patch", when="@5.9.0%xl_r")
# intel oneapi doesn't compile some code in catalyst
patch("catalyst-etc_oneapi_fix.patch", when="@5.10.0:5.10.1%oneapi")
# Patch for paraview 5.10: +hdf5 ^hdf5@1.13.2:
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/9690
patch("vtk-xdmf2-hdf51.13.1.patch", when="@5.10.0:5.10")
patch("vtk-xdmf2-hdf51.13.2.patch", when="@5.10:5.11.0")
# Fix VTK to work with external freetype using CONFIG mode for find_package
patch("FindFreetype.cmake.patch", when="@5.10.1:")
# Fix VTK to remove deprecated ADIOS2 functions
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/10113
patch("adios2-remove-deprecated-functions.patch", when="@5.10: ^adios2@2.9:")
patch("exodusII-netcdf4.9.0.patch", when="@:5.10.2")
generator("ninja", "make", default="ninja")
# https://gitlab.kitware.com/paraview/paraview/-/issues/21223
conflicts("generator=ninja", when="%xl")
conflicts("generator=ninja", when="%xl_r")
def url_for_version(self, version):
_urlfmt = "http://www.paraview.org/files/v{0}/ParaView-v{1}{2}.tar.{3}"
"""Handle ParaView version-based custom URLs."""
if version < Version("5.1.0"):
return _urlfmt.format(version.up_to(2), version, "-source", "gz")
elif version < Version("5.6.1"):
return _urlfmt.format(version.up_to(2), version, "", "gz")
else:
return _urlfmt.format(version.up_to(2), version, "", "xz")
@property
def paraview_subdir(self):
"""The paraview subdirectory name as paraview-major.minor"""
if self.spec.version == Version("master"):
return "paraview-5.11"
else:
return "paraview-{0}".format(self.spec.version.up_to(2))
def setup_dependent_build_environment(self, env, dependent_spec):
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
else:
lib_dir = self.prefix.lib
env.set("ParaView_DIR", self.prefix)
if self.spec.version <= Version("5.7.0"):
env.set("PARAVIEW_VTK_DIR", join_path(lib_dir, "cmake", self.paraview_subdir))
else:
env.set("PARAVIEW_VTK_DIR", join_path(lib_dir, "cmake", self.paraview_subdir, "vtk"))
def flag_handler(self, name, flags):
if name == "ldflags" and self.spec.satisfies("%intel"):
flags.append("-shared-intel")
return (None, flags, None)
# -no-ipo prevents internal compiler error from multi-file
# optimization (https://github.com/spack/spack/issues/18192)
if (name == "cflags" or name == "cxxflags") and self.spec.satisfies("%intel"):
flags.append("-no-ipo")
return (None, None, flags)
if name in ("cflags", "cxxflags"):
# Constrain the HDF5 API
if self.spec.satisfies("@:5.9 +hdf5"):
if self.spec["hdf5"].satisfies("@1.10:"):
flags.append("-DH5_USE_18_API")
elif self.spec.satisfies("@5.10: +hdf5"):
if self.spec["hdf5"].satisfies("@1.12:"):
flags.append("-DH5_USE_110_API")
return (flags, None, None)
def setup_run_environment(self, env):
# paraview 5.5 and later
# - cmake under lib/cmake/paraview-5.5
# - libs under lib
# - python bits under lib/python2.8/site-packages
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
else:
lib_dir = self.prefix.lib
env.set("ParaView_DIR", self.prefix)
if self.spec.version <= Version("5.7.0"):
env.set("PARAVIEW_VTK_DIR", join_path(lib_dir, "cmake", self.paraview_subdir))
else:
env.set("PARAVIEW_VTK_DIR", join_path(lib_dir, "cmake", self.paraview_subdir, "vtk"))
if self.spec.version <= Version("5.4.1"):
lib_dir = join_path(lib_dir, self.paraview_subdir)
env.prepend_path("LIBRARY_PATH", lib_dir)
env.prepend_path("LD_LIBRARY_PATH", lib_dir)
if "+python" in self.spec:
if self.spec.version <= Version("5.4.1"):
pv_pydir = join_path(lib_dir, "site-packages")
env.prepend_path("PYTHONPATH", pv_pydir)
env.prepend_path("PYTHONPATH", join_path(pv_pydir, "vtk"))
else:
python_version = self.spec["python"].version.up_to(2)
pv_pydir = join_path(lib_dir, "python{0}".format(python_version), "site-packages")
if "+shared" in self.spec or self.spec.version <= Version("5.7.0"):
env.prepend_path("PYTHONPATH", pv_pydir)
# The Trilinos Catalyst adapter requires
# the vtkmodules directory in PYTHONPATH
env.prepend_path("PYTHONPATH", join_path(pv_pydir, "vtkmodules"))
else:
env.prepend_path("PYTHONPATH", join_path(pv_pydir, "_paraview.zip"))
env.prepend_path("PYTHONPATH", join_path(pv_pydir, "_vtk.zip"))
def cmake_args(self):
"""Populate cmake arguments for ParaView."""
spec = self.spec
def variant_bool(feature, on="ON", off="OFF"):
"""Ternary for spec variant to ON/OFF string"""
if feature in spec:
return on
return off
def nvariant_bool(feature):
"""Negated ternary for spec variant to OFF/ON string"""
return variant_bool(feature, on="OFF", off="ON")
rendering = variant_bool("+opengl2", "OpenGL2", "OpenGL")
includes = variant_bool("+development_files")
use_x11 = nvariant_bool("+osmesa") if not spec.satisfies("platform=windows") else "OFF"
cmake_args = [
"-DVTK_OPENGL_HAS_OSMESA:BOOL=%s" % variant_bool("+osmesa"),
"-DVTK_USE_X:BOOL=%s" % use_x11,
"-DPARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=%s" % includes,
"-DBUILD_TESTING:BOOL=OFF",
"-DOpenGL_GL_PREFERENCE:STRING=LEGACY",
self.define_from_variant("PARAVIEW_ENABLE_VISITBRIDGE", "visitbridge"),
self.define_from_variant("VISIT_BUILD_READER_Silo", "visitbridge"),
]
if spec.satisfies("@5.11:"):
cmake_args.append("-DVTK_MODULE_USE_EXTERNAL_VTK_verdict:BOOL=OFF")
if spec.satisfies("@5.10:"):
cmake_args.extend(
[
"-DVTK_MODULE_USE_EXTERNAL_ParaView_vtkcatalyst:BOOL=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_ioss:BOOL=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_exprtk:BOOL=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_fmt:BOOL=OFF",
]
)
if spec.satisfies("@:5.7") and spec["cmake"].satisfies("@3.17:"):
cmake_args.append("-DFPHSA_NAME_MISMATCHED:BOOL=ON")
if spec.satisfies("@5.7:"):
if spec.satisfies("@5.8:"):
cmake_args.extend(
[
"-DPARAVIEW_BUILD_EDITION:STRING=%s"
% spec.variants["build_edition"].value.upper(),
"-DPARAVIEW_USE_QT:BOOL=%s" % variant_bool("+qt"),
"-DPARAVIEW_BUILD_WITH_EXTERNAL=ON",
]
)
if spec.satisfies("%cce"):
cmake_args.append("-DVTK_PYTHON_OPTIONAL_LINK:BOOL=OFF")
else: # @5.7:
cmake_args.extend(
[
"-DPARAVIEW_ENABLE_CATALYST:BOOL=ON",
"-DPARAVIEW_BUILD_QT_GUI:BOOL=%s" % variant_bool("+qt"),
"-DPARAVIEW_USE_EXTERNAL:BOOL=ON",
]
)
cmake_args.extend(
[
"-DPARAVIEW_ENABLE_EXAMPLES:BOOL=%s" % variant_bool("+examples"),
"-DVTK_MODULE_USE_EXTERNAL_ParaView_cgns=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_gl2ps=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_libharu=OFF",
"-DVTK_MODULE_USE_EXTERNAL_VTK_utf8=OFF",
]
)
else:
cmake_args.extend(
[
"-DPARAVIEW_BUILD_EXAMPLES:BOOL=%s" % variant_bool("+examples"),
"-DVTK_RENDERING_BACKEND:STRING=%s" % rendering,
"-DPARAVIEW_BUILD_QT_GUI:BOOL=%s" % variant_bool("+qt"),
"-DVTK_USE_SYSTEM_LIBRARIES:BOOL=ON",
"-DVTK_USE_SYSTEM_CGNS:BOOL=OFF",
"-DVTK_USE_SYSTEM_DIY2:BOOL=OFF",
"-DVTK_USE_SYSTEM_GL2PS:BOOL=OFF",
"-DVTK_USE_SYSTEM_ICET:BOOL=OFF",
"-DVTK_USE_SYSTEM_LIBHARU:BOOL=OFF",
"-DVTK_USE_SYSTEM_NETCDFCPP:BOOL=OFF",
"-DVTK_USE_SYSTEM_UTF8:BOOL=OFF",
"-DVTK_USE_SYSTEM_XDMF2:BOOL=OFF",
"-DVTK_USE_SYSTEM_XDMF3:BOOL=OFF",
]
)
if "+adios2" in spec:
cmake_args.extend(["-DPARAVIEW_ENABLE_ADIOS2:BOOL=ON"])
# The assumed qt version changed to QT5 (as of paraview 5.2.1),
# so explicitly specify which QT major version is actually being used
if "+qt" in spec:
cmake_args.extend(["-DPARAVIEW_QT_VERSION=%s" % spec["qt"].version[0]])
if "+fortran" in spec:
cmake_args.append("-DPARAVIEW_USE_FORTRAN:BOOL=ON")
# CMake flags for python have changed with newer ParaView versions
# Make sure Spack uses the right cmake flags
if "+python" in spec:
py_use_opt = "USE" if spec.satisfies("@5.8:") else "ENABLE"
py_ver_opt = "PARAVIEW" if spec.satisfies("@5.7:") else "VTK"
py_ver_val = 3
cmake_args.extend(
[
"-DPARAVIEW_%s_PYTHON:BOOL=ON" % py_use_opt,
"-DPYTHON_EXECUTABLE:FILEPATH=%s" % spec["python"].command.path,
"-D%s_PYTHON_VERSION:STRING=%d" % (py_ver_opt, py_ver_val),
]
)
if spec.satisfies("@:5.6"):
cmake_args.append("-DVTK_USE_SYSTEM_MPI4PY:BOOL=%s" % variant_bool("+mpi"))
else:
cmake_args.append("-DPARAVIEW_ENABLE_PYTHON:BOOL=OFF")
if "+mpi" in spec:
mpi_args = [
"-DPARAVIEW_USE_MPI:BOOL=ON",
"-DMPIEXEC:FILEPATH=%s/bin/mpiexec" % spec["mpi"].prefix,
]
if not sys.platform == "win32":
mpi_args.extend(
[
"-DMPI_CXX_COMPILER:PATH=%s" % spec["mpi"].mpicxx,
"-DMPI_C_COMPILER:PATH=%s" % spec["mpi"].mpicc,
"-DMPI_Fortran_COMPILER:PATH=%s" % spec["mpi"].mpifc,
]
)
cmake_args.extend(mpi_args)
cmake_args.append("-DPARAVIEW_BUILD_SHARED_LIBS:BOOL=%s" % variant_bool("+shared"))
# VTK-m added to ParaView in 5.3.0 and up
if spec.satisfies("@5.3.0:") and spec.variants["use_vtkm"].value != "default":
cmake_args.append(
"-DPARAVIEW_USE_VTKM:BOOL=%s" % spec.variants["use_vtkm"].value.upper()
)
if spec.satisfies("@5.8:"):
cmake_args.append("-DPARAVIEW_USE_CUDA:BOOL=%s" % variant_bool("+cuda"))
elif spec.satisfies("@5.7:"):
cmake_args.append("-DVTK_USE_CUDA:BOOL=%s" % variant_bool("+cuda"))
else:
cmake_args.append("-DVTKm_ENABLE_CUDA:BOOL=%s" % variant_bool("+cuda"))
# VTK-m expects cuda_arch to be the arch name vs. the arch version.
if spec.satisfies("+cuda"):
supported_cuda_archs = {
# VTK-m and transitively ParaView does not support Tesla Arch
"20": "fermi",
"21": "fermi",
"30": "kepler",
"32": "kepler",
"35": "kepler",
"37": "kepler",
"50": "maxwel",
"52": "maxwel",
"53": "maxwel",
"60": "pascal",
"61": "pascal",
"62": "pascal",
"70": "volta",
"72": "volta",
"75": "turing",
"80": "ampere",
"86": "ampere",
}
cuda_arch_value = "native"
requested_arch = spec.variants["cuda_arch"].value
# ParaView/VTK-m only accepts one arch, default to first element
if requested_arch[0] != "none":
try:
cuda_arch_value = supported_cuda_archs[requested_arch[0]]
except KeyError:
raise InstallError("Incompatible cuda_arch=" + requested_arch[0])
cmake_args.append(self.define("VTKm_CUDA_Architecture", cuda_arch_value))
if "darwin" in spec.architecture:
cmake_args.extend(
["-DVTK_USE_X:BOOL=OFF", "-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON"]
)
if "+kits" in spec:
if spec.satisfies("@5.0:5.6"):
cmake_args.append("-DVTK_ENABLE_KITS:BOOL=ON")
elif spec.satisfies("@5.7"):
# cmake_args.append('-DPARAVIEW_ENABLE_KITS:BOOL=ON')
# Kits are broken with 5.7
cmake_args.append("-DPARAVIEW_ENABLE_KITS:BOOL=OFF")
else:
cmake_args.append("-DPARAVIEW_BUILD_WITH_KITS:BOOL=ON")
if "+pagosa" in spec:
cmake_args.append("-DPARAVIEW_BUILD_PAGOSA_ADAPTOR:BOOL=ON")
if "+eyedomelighting" in spec:
cmake_args.append("-DPARAVIEW_BUILD_PLUGIN_EyeDomeLighting:BOOL=ON")
if "+tbb" in spec:
cmake_args.append("-DVTK_SMP_IMPLEMENTATION_TYPE=TBB")
# Hide git from Paraview so it will not use `git describe`
# to find its own version number
if spec.satisfies("@5.4.0:5.4.1"):
cmake_args.extend(["-DGIT_EXECUTABLE=FALSE"])
# A bug that has been found in vtk causes an error for
# intel builds for version 5.6. This should be revisited
# with later versions of Paraview to see if the issues still
# arises.
if "%intel" in spec and spec.version >= Version("5.6"):
cmake_args.append("-DPARAVIEW_ENABLE_MOTIONFX:BOOL=OFF")
# Encourage Paraview to use the correct Python libs
if spec.satisfies("+python"):
pylibdirs = spec["python"].libs.directories
cmake_args.append("-DCMAKE_INSTALL_RPATH={0}".format(":".join(self.rpath + pylibdirs)))
if "+advanced_debug" in spec:
cmake_args.append("-DVTK_DEBUG_LEAKS:BOOL=ON")
if spec.satisfies("@5.11:"):
cmake_args.append("-DPARAVIEW_USE_HIP:BOOL=%s" % variant_bool("+rocm"))
if "+rocm" in spec:
archs = spec.variants["amdgpu_target"].value
if archs != "none":
arch_str = ",".join(archs)
cmake_args.append("-DCMAKE_HIP_ARCHITECTURES=%s" % arch_str)
cmake_args.append("-DKokkos_CXX_COMPILER=%s" % spec["hip"].hipcc)
if "+catalyst" in spec:
cmake_args.append("-DVTK_MODULE_ENABLE_ParaView_Catalyst=YES")
if "+python" in spec:
cmake_args.append("-DVTK_MODULE_ENABLE_ParaView_PythonCatalyst=YES")
if "+libcatalyst" in spec:
cmake_args.append("-DVTK_MODULE_ENABLE_ParaView_InSitu=YES")
cmake_args.append("-DPARAVIEW_ENABLE_CATALYST=YES")
cmake_args.append(self.define_from_variant("PARAVIEW_ENABLE_RAYTRACING", "raytracing"))
# Currently only support OSPRay ray tracing
cmake_args.append(self.define_from_variant("VTK_ENABLE_OSPRAY", "raytracing"))
cmake_args.append(self.define_from_variant("VTKOSPRAY_ENABLE_DENOISER", "raytracing"))
return cmake_args