libsmeagol (#48776)

* libsmeagol

* add support for intel and add conflicts

* cp2k
This commit is contained in:
Rocco Meli 2025-01-31 12:11:13 +01:00 committed by GitHub
parent 6203ae31d2
commit 7ebabfcf0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 76 additions and 0 deletions

View File

@ -116,6 +116,7 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
variant("pytorch", default=False, description="Enable libtorch support")
variant("quip", default=False, description="Enable quip support")
variant("mpi_f08", default=False, description="Use MPI F08 module")
variant("smeagol", default=False, description="Enable libsmeagol support", when="@2025.2:")
variant(
"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("libsmeagol", when="+smeagol")
# while we link statically against PEXSI, its own deps may be linked in
# dynamically, therefore can't set this as pure build-type dependency.
depends_on("pexsi+fortran@0.10.0:", when="+pexsi")
@ -621,6 +624,12 @@ def edit(self, pkg, spec, prefix):
ldflags += [spglib.search_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
cxx = spack_cxx if "~mpi" in spec else spec["mpi"].mpicxx
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_QUIP", "quip"),
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

View 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)