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("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
|
||||
|
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