From d77a8f7aa15fe24a0e8da6477947611d699f86fb Mon Sep 17 00:00:00 2001 From: kwryankrattiger <80296582+kwryankrattiger@users.noreply.github.com> Date: Thu, 18 Aug 2022 19:20:01 -0500 Subject: Sensei v4 (#30432) * Sensei: Refactor package to work with v4.0.0 * Add missing MPI dependency * Patch bug in libsim adapter * Simplify conflicts with when-clauses * Conflict variants that are incompatible (catalyst/libsim/ascent) * Fix paraview version constraints to be more clear * Add version constraints for VTK * Drop unneeded visit restrictions * Specify +vtkm dependency on ParaView's VTKm * +hl is not needed for VTK, and is already specified in the VTK recipe when it is needed * Pass paths for adios2 and ascent packages * ECP-SDK: Enable sensei * CI: Add sensei to the data-vis-sdk pipeline * Sensei: Change VISIT_DIR to work on linux * Fixup: style check * Sensei: Add patch for version detection * CI: revert SDK pipeline in favor of new matrices * Sensei: Formatting fixes --- .../builtin/packages/ecp-data-vis-sdk/package.py | 12 +-- ...libsim-add-missing-symbol-visibility-pr67.patch | 33 ++++++++ var/spack/repos/builtin/packages/sensei/package.py | 87 +++++++++++++++------- .../sensei-find-mpi-component-cxx-pr68.patch | 13 ++++ .../sensei-install-external-pugixml-pr69.patch | 13 ++++ .../sensei/sensei-version-detection-pr75.patch | 23 ++++++ 6 files changed, 145 insertions(+), 36 deletions(-) create mode 100644 var/spack/repos/builtin/packages/sensei/libsim-add-missing-symbol-visibility-pr67.patch create mode 100644 var/spack/repos/builtin/packages/sensei/sensei-find-mpi-component-cxx-pr68.patch create mode 100644 var/spack/repos/builtin/packages/sensei/sensei-install-external-pugixml-pr69.patch create mode 100644 var/spack/repos/builtin/packages/sensei/sensei-version-detection-pr75.patch diff --git a/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py b/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py index 68eab92d27..a74b4ae8d2 100644 --- a/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py +++ b/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py @@ -81,15 +81,12 @@ class EcpDataVisSdk(BundlePackage, CudaPackage, ROCmPackage): variant("ascent", default=False, description="Enable Ascent") variant("cinema", default=False, description="Enable Cinema") variant("paraview", default=False, description="Enable ParaView") + variant("sensei", default=False, description="Enable Sensei") variant("sz", default=False, description="Enable SZ") variant("visit", default=False, description="Enable VisIt") variant("vtkm", default=False, description="Enable VTK-m") variant("zfp", default=False, description="Enable ZFP") - # Outstanding build issues - variant("sensei", default=False, description="Enable Sensei") - conflicts("+sensei") - ############################################################ # Dependencies ############################################################ @@ -115,13 +112,10 @@ class EcpDataVisSdk(BundlePackage, CudaPackage, ROCmPackage): dav_sdk_depends_on("veloc", when="+veloc") - # Currenly only develop has necessary patches. Update this after SC21 release - propagate_to_sensei = [(v, v) for v in ["adios2", "ascent", "hdf5", "vtkm"]] + propagate_to_sensei = [(v, v) for v in ["adios2", "ascent", "hdf5"]] propagate_to_sensei.extend([("paraview", "catalyst"), ("visit", "libsim")]) dav_sdk_depends_on( - "sensei@develop +vtkio +python ~miniapps", - when="+sensei", - propagate=dict(propagate_to_sensei), + "sensei@4: ~vtkio +python", when="+sensei", propagate=dict(propagate_to_sensei) ) # Fortran support with ascent is problematic on some Cray platforms so the diff --git a/var/spack/repos/builtin/packages/sensei/libsim-add-missing-symbol-visibility-pr67.patch b/var/spack/repos/builtin/packages/sensei/libsim-add-missing-symbol-visibility-pr67.patch new file mode 100644 index 0000000000..072f91f2d5 --- /dev/null +++ b/var/spack/repos/builtin/packages/sensei/libsim-add-missing-symbol-visibility-pr67.patch @@ -0,0 +1,33 @@ +From 431e4b59e50bef4609b5aa5b47719302c41f4fd8 Mon Sep 17 00:00:00 2001 +From: Chuck Atkins +Date: Wed, 18 May 2022 13:02:38 -0400 +Subject: [PATCH] libsim: Add missing symbol visibility for + LibsimImageProperties + +--- + sensei/LibsimImageProperties.h | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/sensei/LibsimImageProperties.h b/sensei/LibsimImageProperties.h +index 6a63580..c317fd7 100644 +--- a/sensei/LibsimImageProperties.h ++++ b/sensei/LibsimImageProperties.h +@@ -1,12 +1,14 @@ + #ifndef sensei_LibsimImageProperties_h + #define sensei_LibsimImageProperties_h + ++#include "senseiConfig.h" ++ + #include + + namespace sensei + { + +-class LibsimImageProperties ++class SENSEI_EXPORT LibsimImageProperties + { + public: + LibsimImageProperties(); +-- +2.36.1 + diff --git a/var/spack/repos/builtin/packages/sensei/package.py b/var/spack/repos/builtin/packages/sensei/package.py index 3b44ed8267..ff88d767dd 100644 --- a/var/spack/repos/builtin/packages/sensei/package.py +++ b/var/spack/repos/builtin/packages/sensei/package.py @@ -8,7 +8,7 @@ from spack.package import * class Sensei(CMakePackage): """SENSEI is a platform for scalable in-situ analysis and visualization. - Its design motto is 'Write once, run everywhere', this means that once + Its design motto is "Write once, run everywhere", this means that once the application is instrumented with SENSEI it can use existing and future analysis backends. Existing backends include: Paraview/Catalyst, Visit/Libsim, ADIOS, Python scripts, and so on.""" @@ -19,6 +19,7 @@ class Sensei(CMakePackage): maintainers = ["sshudler", "kwryankrattiger"] version("develop", branch="develop") + version("4.0.0", sha256="fc1538aa1051789dbdefbe18b7f251bc46e7a6ae1db3a940c123552e0318db8b") version("3.2.2", sha256="d554b654880e899d97d572f02de87b0202faadaf899420ef871093b5bce320c0") version("3.2.1", sha256="7438fb4b148e4d1eb888c619366d0d8639122ecbbf1767e19549d6ca0c8698ca") version("3.2.0", sha256="fd1a69134d9f8151d85a7f84a67d6a648aef5580585b39f74a56367cff433c82") @@ -36,8 +37,13 @@ class Sensei(CMakePackage): variant("libsim", default=False, description="Build with VisIt-Libsim support") variant("vtkio", default=False, description="Enable adaptors to write to VTK XML format") variant("adios2", default=False, description="Enable ADIOS2 adaptors and endpoints") - variant("hdf5", default=False, description="Enables HDF5 adaptors and endpoints") - variant("vtkm", default=False, description="Enable VTKm adaptors and endpoints") + variant("hdf5", default=False, description="Enables HDF5 adaptors and endpoints", when="@3:") + variant( + "vtkm", + default=False, + description="Enable VTKm adaptors and endpoints", + when="@4: +catalyst", + ) variant("python", default=False, description="Enable Python bindings") variant( "miniapps", default=False, description="Enable the parallel 3D and oscillators miniapps" @@ -46,21 +52,36 @@ class Sensei(CMakePackage): # All SENSEI versions up to 2.1.1 support only Python 2, so in this case # Paraview 6 cannot be used since it requires Python 3. Starting from # version 3, SENSEI supports Python 3. - depends_on("paraview@5.5.0:5.5.2+mpi+hdf5", when="@:2.1.1 +catalyst") - depends_on("paraview@5.5.0:5.5.2+python+mpi+hdf5", when="@:2.1.1 +catalyst+python") - depends_on("paraview@5.6:5.7+mpi+hdf5", when="@3:3.2.1 +catalyst") - depends_on("paraview@5.6:5.7+python3+mpi+hdf5", when="@3:3.2.1 +catalyst+python") - depends_on("paraview+mpi+hdf5", when="+catalyst") - depends_on("paraview+python3+mpi+hdf5", when="+catalyst+python") - depends_on("visit~gui~python", when="+libsim") - depends_on("vtk@8.1.0:8.1.2", when="+libsim") - depends_on("vtk", when="~libsim ~catalyst") - depends_on("vtk+python", when="~libsim ~catalyst+python") + depends_on("paraview+mpi", when="+catalyst") + depends_on("paraview+hdf5", when="+catalyst+hdf5") + depends_on("paraview+python", when="@:2 +catalyst+python") + depends_on("paraview+python3", when="@3: +catalyst+python") + + depends_on("paraview@5.5.0:5.5.2", when="@:2.1.1 +catalyst") + depends_on("paraview@5.6:5.7", when="@3:3.2.1 +catalyst") + depends_on("paraview@5.7:5.9", when="@3.2.2 +catalyst") + depends_on("paraview@5.7:5.10", when="@4: +catalyst") + + # Visit Dep + depends_on("visit", when="+libsim") + + # VTK Dep + depends_on("vtk@8:8", when="@:3 ~catalyst") + depends_on("vtk+python", when="@:3 ~catalyst+python") + depends_on("vtk@9:", when="@4: +vtkio ~catalyst") + + # VTK-m + depends_on("paraview use_vtkm=on", when="+vtkm") + + # ADIOS2 depends_on("adios2", when="+adios2") + + # Ascent depends_on("ascent", when="+ascent") - # VTK needs +hl and currently spack cannot resolve +hl and ~hl - depends_on("hdf5+hl", when="+hdf5") + # HDF5 + depends_on("hdf5", when="+hdf5") + # SENSEI 3 supports Python 3, earlier versions upport only Python 2 depends_on("python@:2.7.16", when="@:2.1.1 +python", type=("build", "run")) depends_on("python@3:", when="@3: +python", type=("build", "run")) @@ -70,15 +91,18 @@ class Sensei(CMakePackage): depends_on("swig", when="+python", type="build") depends_on("cmake@3.6:", when="@3:", type="build") depends_on("pugixml") + depends_on("mpi") - # Since sensei always has a VTK dependency, either directly or indirectly, - # VTKm will also always be available via VTK so there's no scenario to - # have a directl dependency on VTK, - - # Can have either LibSim or Catalyst, but not both + # Can have either LibSim or Catalyst or Ascent, but not a combination conflicts("+libsim", when="+catalyst") - # hdf5 variant is available only for SENSEI 3 - conflicts("+hdf5", when="@:2.1.1") + conflicts("+ascent", when="+catalyst") + conflicts("+ascent", when="+libsim") + + # Patches + patch("libsim-add-missing-symbol-visibility-pr67.patch", when="@4.0.0") + patch("sensei-find-mpi-component-cxx-pr68.patch", when="@4.0.0") + patch("sensei-install-external-pugixml-pr69.patch", when="@4.0.0") + patch("sensei-version-detection-pr75.patch", when="@4.0.0") def cmake_args(self): spec = self.spec @@ -88,6 +112,11 @@ class Sensei(CMakePackage): self.define_from_variant("BUILD_SHARED_LIBS", "shared"), self.define("SENSEI_USE_EXTERNAL_pugixml", True), self.define("ENABLE_SENSEI", True), + self.define("MPI_C_COMPILER", spec["mpi"].mpicc), + self.define("MPI_CXX_COMPILER", spec["mpi"].mpicxx), + # Don"t rely on MPI found in cray environment for cray systems. + # On non-cray systems this should be a no-op + self.define("ENABLE_CRAY_MPICH", False), self.define_from_variant("ENABLE_ASCENT", "ascent"), self.define_from_variant("ENABLE_VTKM", "vtkm"), self.define_from_variant("ENABLE_CATALYST", "catalyst"), @@ -100,12 +129,16 @@ class Sensei(CMakePackage): self.define_from_variant("ENABLE_OSCILLATORS", "miniapps"), ] + if "+adios2" in spec: + args.append(self.define("ADIOS2_DIR", spec["adios2"].prefix)) + + if "+ascent" in spec: + args.append(self.define("ASCENT_DIR", spec["ascent"].prefix)) + if "+libsim" in spec: - args.append( - "-DVISIT_DIR:PATH={0}/current/{1}-{2}".format( - spec["visit"].prefix, spec.platform, spec.target.family - ) - ) + # This is only for linux + # Visit install location may be different on other platforms + args.append("-DVISIT_DIR:PATH={0}/current/linux-x86_64".format(spec["visit"].prefix)) if "+python" in spec: args.append(self.define("PYTHON_EXECUTABLE", spec["python"].command.path)) diff --git a/var/spack/repos/builtin/packages/sensei/sensei-find-mpi-component-cxx-pr68.patch b/var/spack/repos/builtin/packages/sensei/sensei-find-mpi-component-cxx-pr68.patch new file mode 100644 index 0000000000..e8b605522f --- /dev/null +++ b/var/spack/repos/builtin/packages/sensei/sensei-find-mpi-component-cxx-pr68.patch @@ -0,0 +1,13 @@ +diff --git a/CMake/mpi.cmake b/CMake/mpi.cmake +index 853a355e..0f40d7b4 100644 +--- a/CMake/mpi.cmake ++++ b/CMake/mpi.cmake +@@ -16,7 +16,7 @@ elseif (ENABLE_CORI_GPU OR (NOT DEFINED ENABLE_CORI_GPU AND NOT ("$ENV{OPENMPI_D + set(MPIEXEC srun CACHE STRING "Platform MPI run equivalent") + set(MPI_C_FOUND CACHE BOOL ON "status of MPI config") + else() +- find_package(MPI COMPONENTS C) ++ find_package(MPI COMPONENTS C CXX) + endif() + + if (NOT MPI_C_FOUND) diff --git a/var/spack/repos/builtin/packages/sensei/sensei-install-external-pugixml-pr69.patch b/var/spack/repos/builtin/packages/sensei/sensei-install-external-pugixml-pr69.patch new file mode 100644 index 0000000000..662ba50d9f --- /dev/null +++ b/var/spack/repos/builtin/packages/sensei/sensei-install-external-pugixml-pr69.patch @@ -0,0 +1,13 @@ +diff --git a/utils/pugixml/CMakeLists.txt b/utils/pugixml/CMakeLists.txt +index 09896fb1..cf7b3450 100644 +--- a/utils/pugixml/CMakeLists.txt ++++ b/utils/pugixml/CMakeLists.txt +@@ -6,7 +6,7 @@ if (SENSEI_USE_EXTERNAL_pugixml) + @ONLY) + + install( +- FILES "${CMAKE_BINARY_DIR}/lib/cmake/pugixml.cmake" ++ FILES "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/pugixml.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake") + else () + add_library(pugixml STATIC src/pugixml.cpp) diff --git a/var/spack/repos/builtin/packages/sensei/sensei-version-detection-pr75.patch b/var/spack/repos/builtin/packages/sensei/sensei-version-detection-pr75.patch new file mode 100644 index 0000000000..0eb79839e8 --- /dev/null +++ b/var/spack/repos/builtin/packages/sensei/sensei-version-detection-pr75.patch @@ -0,0 +1,23 @@ +diff --git a/CMake/version.cmake b/CMake/version.cmake +index ea171ade..f2b85e76 100644 +--- a/CMake/version.cmake ++++ b/CMake/version.cmake +@@ -1,12 +1,14 @@ + set(tmp) + find_package(Git QUIET) + if(GIT_FOUND) +- execute_process(COMMAND ${GIT_EXECUTABLE} +- --git-dir=${CMAKE_SOURCE_DIR}/.git describe --tags +- OUTPUT_VARIABLE tmp OUTPUT_STRIP_TRAILING_WHITESPACE) ++ execute_process(COMMAND ${GIT_EXECUTABLE} ++ --git-dir=${CMAKE_SOURCE_DIR}/.git describe --tags ++ OUTPUT_VARIABLE tmp OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + if(NOT tmp) +- set(tmp "v0.0.0") ++ # Set this to the latest released version. ++ # This version is used when using release tarballs ++ set(tmp "v4.0.0") + endif() + set(SENSEI_VERSION ${tmp} CACHE STRING "SENSEI version" FORCE) + -- cgit v1.2.3-60-g2f50