summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorRocco Meli <rocco.meli@cscs.ch>2023-03-14 16:02:11 +0100
committerGitHub <noreply@github.com>2023-03-14 16:02:11 +0100
commit16f70ca78d03eaaded4488f0454a6aee9ab7d125 (patch)
treec92f70dd2fcdc4659c2865379df98a14d28e9f9c /var
parent2437a1d554cea5e5cef5ae9f712f8646392aa38d (diff)
downloadspack-16f70ca78d03eaaded4488f0454a6aee9ab7d125.tar.gz
spack-16f70ca78d03eaaded4488f0454a6aee9ab7d125.tar.bz2
spack-16f70ca78d03eaaded4488f0454a6aee9ab7d125.tar.xz
spack-16f70ca78d03eaaded4488f0454a6aee9ab7d125.zip
pexsi: add v1.2 and v2.0 (#36049)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/pexsi/package.py94
1 files changed, 61 insertions, 33 deletions
diff --git a/var/spack/repos/builtin/packages/pexsi/package.py b/var/spack/repos/builtin/packages/pexsi/package.py
index 47a550c103..a72fe3044b 100644
--- a/var/spack/repos/builtin/packages/pexsi/package.py
+++ b/var/spack/repos/builtin/packages/pexsi/package.py
@@ -3,14 +3,15 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
import inspect
import os.path
+import spack.build_systems.cmake
+import spack.build_systems.makefile
from spack.package import *
-class Pexsi(MakefilePackage):
+class Pexsi(MakefilePackage, CMakePackage):
"""The PEXSI library is written in C++, and uses message passing interface
(MPI) to parallelize the computation on distributed memory computing
systems and achieve scalability on more than 10,000 processors.
@@ -25,71 +26,98 @@ class Pexsi(MakefilePackage):
"""
homepage = "https://math.berkeley.edu/~linlin/pexsi/index.html"
- url = "https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v0.9.0.tar.gz"
- # version('1.0', sha256='1574c66fd69ff2a37c6250d65c4df43b57c79822b49bd65662582a0cd5d82f54')
+ build_system(
+ conditional("cmake", when="@1:"), conditional("makefile", when="@0"), default="cmake"
+ )
+ version("2.0.0", sha256="c5c83c2931b2bd0c68a462a49eeec983e78b5aaa1f17dd0454de4e27b91ca11f")
+ version("1.2.0", sha256="8bfad6ec6866c6a29e1cc87fb1c17a39809795e79ede98373c8ba9a3aaf820dd")
version("0.10.2", sha256="8714c71b76542e096211b537a9cb1ffb2c28f53eea4f5a92f94cc1ca1e7b499f")
version("0.9.0", sha256="e5efe0c129013392cdac3234e37f1f4fea641c139b1fbea47618b4b839d05029")
depends_on("parmetis")
- depends_on("superlu-dist@5.1.2:5.3", when="@0.10.2:")
+ depends_on("superlu-dist@5.1.2:5.3", when="@0.10.2:0")
+ depends_on("superlu-dist@:6.1.0", when="@1") # Upper limit from CP2K toolchain
+ depends_on("superlu-dist@7", when="@2")
+
+ with when("build_system=cmake"):
+ depends_on("cmake@3.10:", type="build")
+ depends_on("cmake@3.17:", type="build", when="@2:")
+ variant("openmp", default=False, description="Build with OpenMP support", when="@1.2")
variant("fortran", default=False, description="Builds the Fortran interface")
+ def url_for_version(self, version):
+ if version == Version("0"):
+ return f"https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v{version}.tar.gz"
+
+ return f"https://bitbucket.org/berkeleylab/pexsi/downloads/pexsi_v{version}.tar.gz"
+
+
+class MakefileBuilder(spack.build_systems.makefile.MakefileBuilder):
parallel = False
- def edit(self, spec, prefix):
+ def edit(self, pkg, spec, prefix):
substitutions = [
- ("@MPICC", self.spec["mpi"].mpicc),
- ("@MPICXX_LIB", self.spec["mpi:cxx"].libs.joined()),
- ("@MPICXX", self.spec["mpi"].mpicxx),
- ("@MPIFC", self.spec["mpi"].mpifc),
+ ("@MPICC", spec["mpi"].mpicc),
+ ("@MPICXX_LIB", spec["mpi:cxx"].libs.joined()),
+ ("@MPICXX", spec["mpi"].mpicxx),
+ ("@MPIFC", spec["mpi"].mpifc),
("@RANLIB", "ranlib"),
- ("@PEXSI_STAGE", self.stage.source_path),
- ("@SUPERLU_PREFIX", self.spec["superlu-dist"].prefix),
- ("@METIS_PREFIX", self.spec["metis"].prefix),
- ("@PARMETIS_PREFIX", self.spec["parmetis"].prefix),
- ("@LAPACK_PREFIX", self.spec["lapack"].prefix),
- ("@BLAS_PREFIX", self.spec["blas"].prefix),
- ("@LAPACK_LIBS", self.spec["lapack"].libs.joined()),
- ("@BLAS_LIBS", self.spec["blas"].libs.joined()),
+ ("@PEXSI_STAGE", pkg.stage.source_path),
+ ("@SUPERLU_PREFIX", spec["superlu-dist"].prefix),
+ ("@METIS_PREFIX", spec["metis"].prefix),
+ ("@PARMETIS_PREFIX", spec["parmetis"].prefix),
+ ("@LAPACK_PREFIX", spec["lapack"].prefix),
+ ("@BLAS_PREFIX", spec["blas"].prefix),
+ ("@LAPACK_LIBS", spec["lapack"].libs.joined()),
+ ("@BLAS_LIBS", spec["blas"].libs.joined()),
# FIXME : what to do with compiler provided libraries ?
- ("@STDCXX_LIB", " ".join(self.compiler.stdcxx_libs)),
+ ("@STDCXX_LIB", " ".join(pkg.compiler.stdcxx_libs)),
]
fldflags = ""
- if "@0.9.2" in self.spec:
+ if "@0.9.2" in spec:
fldflags += " -Wl,--allow-multiple-definition"
- if "^superlu +openmp" in self.spec or "^openblas threads=openmp" in self.spec:
- fldflags += " " + self.compiler.openmp_flag
+ if "^superlu +openmp" in spec or "^openblas threads=openmp" in spec:
+ fldflags += " " + pkg.compiler.openmp_flag
substitutions.append(("@FLDFLAGS", fldflags.lstrip()))
template = join_path(os.path.dirname(inspect.getmodule(self).__file__), "make.inc")
- makefile = join_path(self.stage.source_path, "make.inc")
+ makefile = join_path(pkg.stage.source_path, "make.inc")
copy(template, makefile)
for key, value in substitutions:
filter_file(key, value, makefile)
- def build(self, spec, prefix):
- super(Pexsi, self).build(spec, prefix)
- if "+fortran" in self.spec:
+ def build(self, pkg, spec, prefix):
+ super().build(pkg, spec, prefix)
+ if "+fortran" in spec:
make("-C", "fortran")
- def install(self, spec, prefix):
+ def install(self, pkg, spec, prefix):
# 'make install' does not exist, despite what documentation says
- mkdirp(self.prefix.lib)
+ mkdirp(pkg.prefix.lib)
install(
- join_path(self.stage.source_path, "src", "libpexsi_linux.a"),
- join_path(self.prefix.lib, "libpexsi.a"),
+ join_path(pkg.stage.source_path, "src", "libpexsi_linux.a"),
+ join_path(pkg.prefix.lib, "libpexsi.a"),
)
- install_tree(join_path(self.stage.source_path, "include"), self.prefix.include)
+ install_tree(join_path(pkg.stage.source_path, "include"), pkg.prefix.include)
# fortran "interface"
- if "+fortran" in self.spec:
+ if "+fortran" in spec:
install_tree(
- join_path(self.stage.source_path, "fortran"), join_path(self.prefix, "fortran")
+ join_path(pkg.stage.source_path, "fortran"), join_path(pkg.prefix, "fortran")
)
+
+
+class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("PEXSI_ENABLE_FORTRAN", "fortran"),
+ self.define_from_variant("PEXSI_ENABLE_OPENMP ", "openmp"),
+ ]
+ return args