libsmeagol (#48776)
* libsmeagol * add support for intel and add conflicts * cp2k
This commit is contained in:
parent
6203ae31d2
commit
7ebabfcf0e
@ -116,6 +116,7 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
variant("pytorch", default=False, description="Enable libtorch support")
|
variant("pytorch", default=False, description="Enable libtorch support")
|
||||||
variant("quip", default=False, description="Enable quip support")
|
variant("quip", default=False, description="Enable quip support")
|
||||||
variant("mpi_f08", default=False, description="Use MPI F08 module")
|
variant("mpi_f08", default=False, description="Use MPI F08 module")
|
||||||
|
variant("smeagol", default=False, description="Enable libsmeagol support", when="@2025.2:")
|
||||||
|
|
||||||
variant(
|
variant(
|
||||||
"enable_regtests",
|
"enable_regtests",
|
||||||
@ -260,6 +261,8 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
depends_on("plumed+mpi", when="+mpi")
|
depends_on("plumed+mpi", when="+mpi")
|
||||||
depends_on("plumed~mpi", when="~mpi")
|
depends_on("plumed~mpi", when="~mpi")
|
||||||
|
|
||||||
|
depends_on("libsmeagol", when="+smeagol")
|
||||||
|
|
||||||
# while we link statically against PEXSI, its own deps may be linked in
|
# while we link statically against PEXSI, its own deps may be linked in
|
||||||
# dynamically, therefore can't set this as pure build-type dependency.
|
# dynamically, therefore can't set this as pure build-type dependency.
|
||||||
depends_on("pexsi+fortran@0.10.0:", when="+pexsi")
|
depends_on("pexsi+fortran@0.10.0:", when="+pexsi")
|
||||||
@ -621,6 +624,12 @@ def edit(self, pkg, spec, prefix):
|
|||||||
ldflags += [spglib.search_flags]
|
ldflags += [spglib.search_flags]
|
||||||
libs.append(spglib.ld_flags)
|
libs.append(spglib.ld_flags)
|
||||||
|
|
||||||
|
if spec.satisfies("+smeagol"):
|
||||||
|
cppflags += ["-D__SMEAGOL"]
|
||||||
|
smeagol = spec["libsmeagol"].libs
|
||||||
|
ldflags += [smeagol.search_flags]
|
||||||
|
libs.append(smeagol.ld_flags)
|
||||||
|
|
||||||
cc = spack_cc if "~mpi" in spec else spec["mpi"].mpicc
|
cc = spack_cc if "~mpi" in spec else spec["mpi"].mpicc
|
||||||
cxx = spack_cxx if "~mpi" in spec else spec["mpi"].mpicxx
|
cxx = spack_cxx if "~mpi" in spec else spec["mpi"].mpicxx
|
||||||
fc = spack_fc if "~mpi" in spec else spec["mpi"].mpifc
|
fc = spack_fc if "~mpi" in spec else spec["mpi"].mpifc
|
||||||
@ -995,6 +1004,7 @@ def cmake_args(self):
|
|||||||
self.define_from_variant("CP2K_USE_SPLA", "spla"),
|
self.define_from_variant("CP2K_USE_SPLA", "spla"),
|
||||||
self.define_from_variant("CP2K_USE_QUIP", "quip"),
|
self.define_from_variant("CP2K_USE_QUIP", "quip"),
|
||||||
self.define_from_variant("CP2K_USE_MPI_F08", "mpi_f08"),
|
self.define_from_variant("CP2K_USE_MPI_F08", "mpi_f08"),
|
||||||
|
self.define_from_variant("CP2K_USE_LIBSMEAGOL", "smeagol"),
|
||||||
]
|
]
|
||||||
|
|
||||||
# we force the use elpa openmp threading support. might need to be revisited though
|
# we force the use elpa openmp threading support. might need to be revisited though
|
||||||
|
66
var/spack/repos/builtin/packages/libsmeagol/package.py
Normal file
66
var/spack/repos/builtin/packages/libsmeagol/package.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class Libsmeagol(MakefilePackage):
|
||||||
|
"""Non-equilibrium Green's function (NEGS) code."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/StefanoSanvitoGroup/libsmeagol"
|
||||||
|
git = "https://github.com/StefanoSanvitoGroup/libsmeagol.git"
|
||||||
|
|
||||||
|
maintainers("RMeli")
|
||||||
|
|
||||||
|
license("GPL-2.0-or-later", checked_by="RMeli")
|
||||||
|
|
||||||
|
version("main", branch="main")
|
||||||
|
version("1.2", commit="fefed1bb4fceca584c3014debb169e8ed4ce1289")
|
||||||
|
|
||||||
|
depends_on("mpi")
|
||||||
|
depends_on("blas")
|
||||||
|
|
||||||
|
unsupported_compilers = (
|
||||||
|
"aocc",
|
||||||
|
"apple_clang",
|
||||||
|
"cce",
|
||||||
|
"clang",
|
||||||
|
"fj",
|
||||||
|
"msvc",
|
||||||
|
"nag",
|
||||||
|
"nvhpc",
|
||||||
|
"oneapi",
|
||||||
|
)
|
||||||
|
for uc in unsupported_compilers:
|
||||||
|
conflicts(f"%{uc}")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def build_targets(self):
|
||||||
|
spec = self.spec
|
||||||
|
|
||||||
|
if spec.satisfies("%gcc"):
|
||||||
|
fcflags = (
|
||||||
|
"-DMPI -fopenmp -march=native -O3 -g -std=gnu -fallow-argument-mismatch "
|
||||||
|
"-fexternal-blas -fblas-matmul-limit=0 -fno-omit-frame-pointer -funroll-loops"
|
||||||
|
)
|
||||||
|
fixedform = "-ffixed-form"
|
||||||
|
freeform = "-ffree-form -ffree-line-length-none"
|
||||||
|
elif spec.satisfies("%intel"):
|
||||||
|
fcflags = "-DMPI -qopenmp -xHost -O2 -g -fno-moit-frame-pointer"
|
||||||
|
fixedform = "-fixed"
|
||||||
|
freeform = "-free"
|
||||||
|
else:
|
||||||
|
raise InstallError("Unsupported compiler.")
|
||||||
|
|
||||||
|
return [
|
||||||
|
f"FC={spec['mpi'].mpifc}",
|
||||||
|
f"FCFLAGS={fcflags} -fPIC",
|
||||||
|
f"FCFLAGS_FIXEDFORM={fixedform}",
|
||||||
|
f"FCFLAGS_FREEFORM={freeform}",
|
||||||
|
]
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
mkdir(prefix.bin)
|
||||||
|
install_tree("lib", prefix.lib)
|
||||||
|
install_tree("obj", prefix.include)
|
Loading…
Reference in New Issue
Block a user