diff options
author | Dan Bonachea <dobonachea@lbl.gov> | 2024-01-04 13:47:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-04 19:47:39 +0100 |
commit | c85391e3d82ea20e3a41c4eff648f2ff2bdfc795 (patch) | |
tree | c8207532670c72fd3fdef9cf75c85feff728a9b6 | |
parent | eacb82426496c0909c8b3306034b1c92eaf97640 (diff) | |
download | spack-c85391e3d82ea20e3a41c4eff648f2ff2bdfc795.tar.gz spack-c85391e3d82ea20e3a41c4eff648f2ff2bdfc795.tar.bz2 spack-c85391e3d82ea20e3a41c4eff648f2ff2bdfc795.tar.xz spack-c85391e3d82ea20e3a41c4eff648f2ff2bdfc795.zip |
symPACK: add new package (#41835)
-rw-r--r-- | var/spack/repos/builtin/packages/sympack/package.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/sympack/package.py b/var/spack/repos/builtin/packages/sympack/package.py new file mode 100644 index 0000000000..7796aa2246 --- /dev/null +++ b/var/spack/repos/builtin/packages/sympack/package.py @@ -0,0 +1,90 @@ +# 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) + +from spack.package import * + + +class Sympack(CMakePackage, CudaPackage): + """symPACK is a sparse symmetric matrix direct linear solver, + with optional support for CUDA devices""" + + homepage = "https://go.lbl.gov/sympack" + url = "https://github.com/symPACK/symPACK/archive/refs/tags/v3.0.tar.gz" + git = "https://github.com/symPACK/symPACK.git" + + maintainers("bonachea") + + version("master", branch="master") + + version("3.0", sha256="bd04284bb6a309a71cd4f9f54f72345ff98fa7ba5719498df1e8a00ef05c41de") + version("2.0.1", sha256="21c172e902531c94c3bb5932c15de4b4ec9adf9c0d8e2071bb12cdbdfa25ca52") + version("2.0", sha256="93fcfbadab73718e249e7ed12641a3c6be58b19cafdf6bad12a6a09c3d1eb4a1") + + depends_on("cmake@3.11:", type="build") + + depends_on("upcxx@2019.9.0:") + depends_on("upcxx@2022.3.0:+cuda", when="+cuda") + + depends_on("mpi") + depends_on("blas") + + variant( + "cuda", + default=False, + when="@3.0:", + description="Enables solver to offload large operations to CUDA GPUs", + ) + conflicts("+cuda", when="@:2", msg="symPACK version 3.0 or later required for CUDA support") + depends_on("cuda@6.0:", when="+cuda") + + variant("scotch", default=False, description="Enable SCOTCH ordering") + depends_on("scotch", when="+scotch") + + variant("ptscotch", default=False, description="Enable PT-SCOTCH ordering") + depends_on("scotch+mpi", when="+ptscotch") + + variant("metis", default=False, description="Enable MeTiS ordering") + depends_on("metis", when="+metis") + + variant("parmetis", default=False, description="Enable ParMETIS ordering") + depends_on("parmetis", when="+parmetis") + + variant( + "network", + default="auto", + multi=False, + values=("auto", "ibv", "udp", "ofi", "ucx", "aries", "mpi"), + description="The hardware-dependent UPC++ network backend to use.\n" + + "'auto' selects the default network provided by the UPC++ install.\n" + + "Note: smp-conduit is currently incompatible with symPACK, " + + "udp is recommended for single-node configurations.", + ) + + build_targets = ["all", "run_sympack2D"] + + def cmake_args(self): + # UPC++ is picky about what C++ compiler we use: + meta = join_path(self.spec["upcxx"].prefix.bin, "upcxx-meta") + cxx = Executable(meta)("CXX", output=str, error=str).strip() + args = [ + self.define("CMAKE_CXX_COMPILER", cxx), + self.define_from_variant("ENABLE_CUDA", "cuda"), + self.define_from_variant("ENABLE_SCOTCH", "scotch"), + self.define_from_variant("ENABLE_PTSCOTCH", "ptscotch"), + self.define_from_variant("ENABLE_METIS", "metis"), + self.define_from_variant("ENABLE_PARMETIS", "parmetis"), + ] + return args + + def setup_build_environment(self, env): + spec = self.spec + if "network=auto" not in spec: + env.set("UPCXX_NETWORK", spec.variants["network"].value) + + @run_after("install") + def finish_install(self): + # Test driver is not installed by default + mkdirp(self.prefix.bin) + install(join_path(self.build_directory, "run_sympack2D"), self.prefix.bin) |