Build with Spack
CP2K can be built and installed with Spack. Spack is a package manager designed to support multiple versions and configurations on a wide variety of platforms and environments, with focus on HPC.
To install CP2K with Spack, you need to install Spack.
Install CP2K with Spack
A barebone version of CP2K can be installed with Spack as follows:
spack install cp2k
This command will build CP2K, as well as all the necessary dependencies. If it is the first time you run this command, building all the dependencies might take a while.
In order to use CP2K installed with Spack, you can simply type
spack load cp2k
This command will add the appropriate directories to PATH
and MANPATH
. See
using installed Spack packages for more information.
Customizing Installation
Variants
Spack allows to fully customize an installation. The CP2K Spack package has several options for
customization (called “variants”, see Spack package variants). For example, to install CP2K with
libint
and libxc
, one can type
spack install cp2k +libint +libxc
+VARIANT
will enable a boolean variant, while ~VARIANT
will disable a boolean variant. Non
boolean variants can be specified with the VARIANT=VALUE
syntax (see Spack package variants for
more details). The previous installation command takes care of building CP2K with libint
and
libxc
support. More importantly, it takes care of building the appropriate versions of libint
and libxc
to work with CP2K (Fortran support, …).
Versions
Versions in Spack can be specified with @
following the package name (see [version
specifier]). The following installs version 2023.2
of CP2K:
spack install cp2k@2023.2
A more complete installation of CP2K can be installed with the following:
spack install cp2k@2023.2 +libint +libxc +dlaf +sirius +cosma +spglib lmax=6
The cp2k@2023.2 +libint +libxc +dlaf +sirius +cosma +spglib lmax=6
string is called a spec in
Spack lingo.
CUDA and ROCm Support
The cuda
and rocm
variants are available for CP2K. Therefore, CUDA support can be enabled with
+cuda
and ROCm support can be enabled with +rocm
. cuda_arch
and amdgpu_target
allow
specifying the GPU architecture:
spack install cp2k +cuda cuda_arch=80
spack install cp2k +rocm amdgpu_target=gfx90a
Spack is designed to support the installation of different versions of the same software,
therefore there is no problem with running both commands above. However, spack load cp2k
will no
longer work, you will need to be a bit more specific:
spack load cp2k +cuda
Managing Dependencies
Sometimes you need to control dependencies too. Dependencies are also Spack packages, and their
installation can be configured in the same way as for CP2K. A dependency spec is defined by ^
.
For example, if you want to install CP2K with CUDA support but DBCSR without CUDA support you can do
spack install cp2k +cuda cuda_arch=80 ^dbcsr ~cuda
Another example, is the choice of vendor libraries. In order to use Intel oneAPI MKL, it can be specified as a dependency:
spack install cp2k ^intel-oneapi-mkl +cluster
This command will build CP2K with Intel oneAPI MKL. +cluster
is a variant of the
Intel oneAPI Spack package enabling cluster support (ScaLAPACK, BLACS, …).
Developer Workflow
Spack has support for developer workflows. One way to use Spack to develop CP2K, is to use Spack to install all the necessary dependencies and then build CP2K manually.
To install only the dependencies of CP2K (and not CP2K itself) you can use
spack install --only=dependencies CP2K_SPEC
Once all dependencies are installed, you can get a shell with all the dependencies set up:
spack build-env CP2K_SPEC -- bash
From here, you can iterate CP2K development using the native build system as Spack would use it.