summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/cp2k/package.py51
1 files changed, 38 insertions, 13 deletions
diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py
index 3e20e8a62c..ddae41db19 100644
--- a/var/spack/repos/builtin/packages/cp2k/package.py
+++ b/var/spack/repos/builtin/packages/cp2k/package.py
@@ -21,6 +21,7 @@ class Cp2k(MakefilePackage, CudaPackage):
maintainers = ['dev-zero']
+ version('9.1', sha256='fedb4c684a98ad857cd49b69a3ae51a73f85a9c36e9cb63e3b02320c74454ce6')
version('8.2', sha256='2e24768720efed1a5a4a58e83e2aca502cd8b95544c21695eb0de71ed652f20a')
version('8.1', sha256='7f37aead120730234a60b2989d0547ae5e5498d93b1e9b5eb548c041ee8e7772')
version('7.1', sha256='ccd711a09a426145440e666310dd01cc5772ab103493c4ae6a3470898cd0addb')
@@ -60,7 +61,7 @@ class Cp2k(MakefilePackage, CudaPackage):
' with cuda_arch=35 for a K20x instead of a K40'))
variant('cuda_fft', default=False,
description=('Use CUDA also for FFTs in the PW part of CP2K'))
- variant('cuda_blas', default=False,
+ variant('cuda_blas', default=False, when='@:7', # req in CP2K v8+
description=('Use CUBLAS for general matrix operations in DBCSR'))
HFX_LMAX_RANGE = range(4, 8)
@@ -85,8 +86,9 @@ class Cp2k(MakefilePackage, CudaPackage):
depends_on('openblas threads=openmp', when='^openblas')
with when('smm=libxsmm'):
+ depends_on('libxsmm@1.17:~header-only', when='@9.1:')
# require libxsmm-1.11+ since 1.10 can leak file descriptors in Fortran
- depends_on('libxsmm@1.11:~header-only')
+ depends_on('libxsmm@1.11:~header-only', when="@:8.9")
# use pkg-config (support added in libxsmm-1.10) to link to libxsmm
depends_on('pkgconfig', type='build')
# please set variants: smm=blas by configuring packages.yaml or install
@@ -108,7 +110,8 @@ class Cp2k(MakefilePackage, CudaPackage):
depends_on('libxc@2.2.2:3', when='@:5', type='build')
depends_on('libxc@4.0.3:4', when='@6.0:6.9', type='build')
depends_on('libxc@4.0.3:4', when='@7.0:8.1')
- depends_on('libxc@5.1.3:5.1', when='@8.2:')
+ depends_on('libxc@5.1.3:5.1', when='@8.2:8')
+ depends_on('libxc@5.1.7:5.1', when='@9:')
with when('+mpi'):
depends_on('mpi@2:')
@@ -116,6 +119,7 @@ class Cp2k(MakefilePackage, CudaPackage):
with when('+cosma'):
depends_on('cosma+scalapack')
+ depends_on('cosma@2.5.1:', when='@9:')
depends_on('cosma+cuda', when='+cuda')
conflicts('~mpi')
# COSMA support was introduced in 8+
@@ -129,6 +133,7 @@ class Cp2k(MakefilePackage, CudaPackage):
depends_on('elpa@2011.12:2017.11', when='@6.0:6')
depends_on('elpa@2018.05:2020.11.001', when='@7.0:8.2')
depends_on('elpa@2021.05:', when='@8.3:')
+ depends_on('elpa@2021.11.001:', when='@9.1:')
with when('+plumed'):
depends_on('plumed+shared')
@@ -151,7 +156,8 @@ class Cp2k(MakefilePackage, CudaPackage):
depends_on('sirius~openmp', when='~openmp')
depends_on('sirius@:6', when='@:7')
depends_on('sirius@7.0.0:7.0', when='@8:8.2')
- depends_on('sirius@7.2:', when='@8.3:')
+ depends_on('sirius@7.2', when='@8.3:8.9')
+ depends_on('sirius@7.3:', when='@9.1')
conflicts('~mpi')
# sirius support was introduced in 7+
conflicts('@:6')
@@ -508,6 +514,9 @@ class Cp2k(MakefilePackage, CudaPackage):
int(elpa.version[1])))
fcflags += ['-I{0}'.format(join_path(elpa_incdir, 'elpa'))]
+ if '+cuda' in spec and '+cuda' in elpa:
+ cppflags += ['-D__ELPA_NVIDIA_GPU']
+
if spec.satisfies('+sirius'):
sirius = spec['sirius']
cppflags.append('-D__SIRIUS')
@@ -515,14 +524,29 @@ class Cp2k(MakefilePackage, CudaPackage):
libs += list(sirius.libs)
if spec.satisfies('+cuda'):
- cppflags += ['-D__ACC']
- libs += ['-lcudart', '-lnvrtc', '-lcuda']
-
- if spec.satisfies('+cuda_blas'):
- cppflags += ['-D__DBCSR_ACC=2']
+ libs += [
+ '-L{}'.format(spec['cuda'].libs.directories[0]),
+ '-L{}/stubs'.format(spec['cuda'].libs.directories[0]),
+ '-lcuda', '-lcudart', '-lnvrtc', '-lstdc++']
+
+ if spec.satisfies('@9:'):
+ acc_compiler_var = 'OFFLOAD_CC'
+ acc_flags_var = 'OFFLOAD_FLAGS'
+ cppflags += [
+ '-D__DBCSR_ACC',
+ '-D__GRID_CUDA',
+ '-DOFFLOAD_TARGET=cuda',
+ ]
libs += ['-lcublas']
else:
- cppflags += ['-D__DBCSR_ACC']
+ acc_compiler_var = 'NVCC'
+ acc_flags_var = 'NVFLAGS'
+ cppflags += ['-D__ACC']
+ if spec.satisfies('+cuda_blas'):
+ cppflags += ['-D__DBCSR_ACC=2']
+ libs += ['-lcublas']
+ else:
+ cppflags += ['-D__DBCSR_ACC']
if spec.satisfies('+cuda_fft'):
cppflags += ['-D__PW_CUDA']
@@ -616,8 +640,9 @@ class Cp2k(MakefilePackage, CudaPackage):
mkf.write('CPP = # {0} -E\n'.format(spack_cc))
mkf.write('AR = ar -r\n')
- if spec.satisfies('+cuda'):
- mkf.write('NVCC = {0}\n'.format(
+ if '+cuda' in spec:
+ mkf.write('{0} = {1}\n'.format(
+ acc_compiler_var,
join_path(spec['cuda'].prefix, 'bin', 'nvcc')))
# Write compiler flags to file
@@ -631,7 +656,7 @@ class Cp2k(MakefilePackage, CudaPackage):
mkf.write(fflags('CPPFLAGS', cppflags))
mkf.write(fflags('CFLAGS', cflags))
mkf.write(fflags('CXXFLAGS', cxxflags))
- mkf.write(fflags('NVFLAGS', nvflags))
+ mkf.write(fflags(acc_flags_var, nvflags))
mkf.write(fflags('FCFLAGS', fcflags))
mkf.write(fflags('LDFLAGS', ldflags))
mkf.write(fflags('LIBS', libs))