From acc19ad34faaf5439f26004a9c5664a50dd68a74 Mon Sep 17 00:00:00 2001 From: Robert Underwood Date: Fri, 18 Nov 2022 13:26:50 -0500 Subject: [PATCH] LibPressio support for MGARD (#33999) Co-authored-by: Robert Underwood --- .../builtin/packages/libpressio/package.py | 6 +++ .../repos/builtin/packages/mgard/package.py | 40 ++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/var/spack/repos/builtin/packages/libpressio/package.py b/var/spack/repos/builtin/packages/libpressio/package.py index b56e565c8b..12e21e14ba 100644 --- a/var/spack/repos/builtin/packages/libpressio/package.py +++ b/var/spack/repos/builtin/packages/libpressio/package.py @@ -20,6 +20,7 @@ class Libpressio(CMakePackage, CudaPackage): tests_require_compiler = True version("master", branch="master") version("develop", branch="develop") + version("0.90.2", sha256="1fe3f4073952a96bda1b3d7c237bc5d64d1f7bf13bfe1830074852ea33006bf9") version("0.88.3", sha256="b2df2ed11f77eb2e07206f7bdfa4754017559017235c3324820021ef451fd48b") version("0.88.2", sha256="f5de6aff5ff906b164d6b2199ada10a8e32fb1e2a6295da3f0b79d9626661a46") version("0.88.1", sha256="d7fe73a6b2d8de6d19c85e87888dcf1a62956f56b4e6dfd23e26901740031e00") @@ -246,6 +247,11 @@ class Libpressio(CMakePackage, CudaPackage): depends_on("arc", when="+arc") depends_on("netcdf-c", when="+netcdf") depends_on("mgardx", when="+mgardx") + conflicts( + "^ mgard@2022-11-18", + when="@:0.88.3+mgard", + msg="mgard@2022-11-18 is not supported before 0.89.0", + ) conflicts( "+mgardx", when="+szauto" ) # SZ auto and MGARDx cause symbol conflicts with each other diff --git a/var/spack/repos/builtin/packages/mgard/package.py b/var/spack/repos/builtin/packages/mgard/package.py index 1cc336c7a1..8f649a6733 100644 --- a/var/spack/repos/builtin/packages/mgard/package.py +++ b/var/spack/repos/builtin/packages/mgard/package.py @@ -18,28 +18,50 @@ class Mgard(CMakePackage, CudaPackage): maintainers = ["robertu94"] + version("2022-11-18", commit="72dd230ed1af88f62ed3c0f662e2387a6e587748") version("2021-11-12", commit="3c05c80a45a51bb6cc5fb5fffe7b1b16787d3366") version("2020-10-01", commit="b67a0ac963587f190e106cc3c0b30773a9455f7a") + variant("serial", when="@2022-11-18:", default=True) + variant("openmp", when="@2022-11-18:", default=True) + variant("timing", when="@2022-11-18:", default=False) + variant("unstructured", when="@2022-11-18:", default=False) + + depends_on("python", type=("build",), when="@2022-11-18:") + depends_on("sed", type=("build",), when="@2022-11-18:") depends_on("zlib") + depends_on("pkgconf", type=("build",), when="@2022-11-18:") depends_on("zstd") + depends_on("protobuf", when="@2022-11-18:") depends_on("libarchive", when="@2021-11-12:") - depends_on("tclap", when="@2021-11-12:") + depends_on("tclap", when="@2021-11-12") depends_on("yaml-cpp", when="@2021-11-12:") depends_on("cmake@3.19:") - depends_on("nvcomp@2.0.2", when="+cuda") + depends_on("nvcomp@2.2.0:", when="@2022-11-18:+cuda") + depends_on("nvcomp@2.0.2", when="@:2021-11-12+cuda") conflicts("cuda_arch=none", when="+cuda") - conflicts("~cuda", when="@2021-11-12") + conflicts( + "~cuda", when="@2021-11-12", msg="without cuda MGARD@2021-11-12 has undefined symbols" + ) + conflicts("%gcc@:7", when="@2022-11-18:", msg="requires std::optional and other c++17 things") def cmake_args(self): args = ["-DBUILD_TESTING=OFF"] + args.append(self.define_from_variant("MGARD_ENABLE_CUDA", "cuda")) if "+cuda" in self.spec: - args.append("-DMGARD_ENABLE_CUDA=ON") cuda_arch = self.spec.variants["cuda_arch"].value args.append("-DCUDA_ARCH_STRING={}".format(";".join(cuda_arch))) - if "75" in cuda_arch: - args.append("-DMGARD_ENABLE_CUDA_OPTIMIZE_TURING=ON") - if "70" in cuda_arch: - args.append("-DMGARD_ENABLE_CUDA_OPTIMIZE_VOLTA=ON") - + if self.spec.satisfies("@:2021-11-12"): + if "+cuda" in self.spec: + if "75" in cuda_arch: + args.append("-DMGARD_ENABLE_CUDA_OPTIMIZE_TURING=ON") + if "70" in cuda_arch: + args.append("-DMGARD_ENABLE_CUDA_OPTIMIZE_VOLTA=ON") + elif self.spec.satisfies("@2022-11-18:"): + args.append("-DMAXIMUM_DIMENSION=4") # how do we do variants with arbitrary values + args.append("-DMGARD_ENABLE_CLI=OFF") # the CLI is busted + args.append(self.define_from_variant("MGARD_ENABLE_OPENMP", "openmp")) + args.append(self.define_from_variant("MGARD_ENABLE_TIMING", "timing")) + args.append(self.define_from_variant("MGARD_ENABLE_SERIAL", "serial")) + args.append(self.define_from_variant("MGARD_ENABLE_UNSTRUCTURED", "unstructured")) return args