Build from Source
CP2K uses the CMake build system, which detects dependencies and controls the compilation process. This page describes how to obtain a complete CP2K source tree and build it with its dependencies.
Obtaining source code
CP2K is available as a versioned release tarball or through the Git repository. The directory
produced by either method is the root of the CP2K source tree, referred to below as CP2K_ROOT.
Release tarballs
For a stable released version, download the versioned cp2k-<version>.tar.bz2 asset from the
CP2K releases page and unpack it:
tar -xjf cp2k-<version>.tar.bz2
cd cp2k-<version>
Tip
It’s strongly recommended to use the versioned release tarball rather than GitHub’s automatically
generated Source code archive, especially for version <=2025.2. The versioned tarball is the
release artifact and contains any source components bundled for that release.
Git checkout
A Git checkout is appropriate for development builds or when a particular branch is required:
git clone --recursive https://github.com/cp2k/cp2k.git cp2k
cd cp2k
To check out a supported release branch, replace the branch name as appropriate:
git clone --recursive -b support/v<version> https://github.com/cp2k/cp2k.git cp2k
cd cp2k
The --recursive is important for versions <=2025.2, since it includes the DBCSR submodule. If the
repository was cloned without --recursive, initialize the required submodule before building:
git submodule update --init --recursive
Warning
When configuring CP2K with CMake after building the toolchain inside a CP2K Git checkout with tags, DBCSR revision detection can use the enclosing CP2K repository and generate incorrect DBCSR version metadata, causing CMake report an error regarding the DBCSR package discovery; see issue #5184. Therefore, use the versioned release artifact rather than a Git tag for released CP2K versions.
Setting up dependencies and building CP2K
At a minimum, CP2K requires a modern C and Fortran compiler, DBCSR, BLAS, and LAPACK. MPI builds additionally require MPI and ScaLAPACK. For currently supported compilers, see the GitHub Wiki page.
Detailed descriptions of available dependencies can be found in the technologies section:
The following two methods provide a CP2K-managed dependency stack. For a manually managed environment, use the CMake configuration described below.
Toolchain-based build
The toolchain scripts under tools/toolchain build a CP2K-compatible dependency stack and prepare
the environment for a subsequent CP2K build. Use ./install_cp2k_toolchain.sh --help to display the
help message and the complete list of options.
To build CP2K with the toolchain, run install_cp2k_toolchain.sh from tools/toolchain with the
desired toolchain options to configure and install the requested dependencies, then use
build_cp2k.sh to build and install CP2K accordingly.
Note
The toolchain does not cover every optional dependency or feature combination, such as DLA-Future, PEXSI, and optional SIRIUS features including NLCG. If these features are needed, it’s recommended to choose the Spack-based method.
Spack-based build via make_cp2k.sh
make_cp2k.sh installs the selected dependency stack with Spack and
then configures, builds, and installs CP2K with
CMake. It operates in CP2K_ROOT, the root of the
CP2K source tree.
Note
This build path is only available on the current CP2K master branch and CP2K release versions
2026.2 and newer.
Run the script with its default options:
./make_cp2k.sh
Use ./make_cp2k.sh --help to display the complete list of options:
Click to see all options (version 2.0)
Usage: make_cp2k.sh [-bd | --build_deps]
[-bd_only | --build_deps_only]
[-bp | --build_path PATH]
[-bsl | --build_static_libcp2k]
[-bt | --build_type (Debug | Release | RelWithDebInfo)]
[-cray]
[-cv | --cp2k_version (pdbg | psmp | sdbg | ssmp | ssmp-static)]
[-df | --disable | --disable_feature (all | FEATURE | PACKAGE | none)
[-ef | --enable | --enable_feature (all | FEATURE | PACKAGE | none)
[-gm | -gpu | --gpu_model (<CUDA SM code> | P100 | V100 | T400 | A100 | H100 | H200 | GH200 | none)]
[-gv | --gcc_version (10 | 11 | 12 | 13 | 14 | 15 | 16)]
[-h | --help]
[-ip | --install_path PATH]
[-j #PROCESSES]
[-mpi | --mpi_mode (mpich | no | openmpi)]
[-np | --num_packages #PACKAGES]
[-rc | --rebuild_cp2k]
[-t | --test "TESTOPTS"]
[-uc | --use_cache (folder | minio | no | none)]
[-ue | --use_externals]
[-v | --verbose]
Flags:
--build_deps : Force a rebuild of all CP2K dependencies from scratch (removes the spack folder)
--build_deps_only : Rebuild ONLY the CP2K dependencies from scratch (removes the spack folder)
--build_path : Define the CP2K build path (default: ${CP2K_ROOT})
--build_static_libcp2k: Build a static CP2K library libcp2k.a instead of the default shared one libcp2k.so
--build_type : Set preferred CMake build type for CP2K (default: "Release")
--cp2k_version : CP2K version to be built (default: "psmp")
-cray : Use Cray specific spack configuration
--enable_feature : Enable feature or package (default: all)
--disable_feature : Disable feature or package
--help : Print this help information
--gcc_version : Use the specified GCC version (default: automatically decided by spack)
--gpu_model : Select GPU model (default: none)
--install_path : Define the CP2K installation path (default: ./install)
-j : Maximum number of processes used in parallel
--mpi_mode : Set preferred MPI mode (default: "mpich")
--num_packages : Maximum number of packages built by spack in parallel (default: 4)
-opencl : Perform build with OpenCL support
--rebuild_cp2k : Rebuild CP2K: removes the build folder (default: no)
--test : Perform a regression test run after a successful build
--use_cache : Use a "folder", a "MinIO" object storage container (requires podman) or "no" cache
Set the environment variable SPACK_CACHE to specify the folder name, e.g.
SPACK_CACHE="file://${CP2K_ROOT}/spack_cache" (default)
--use_externals : Use external packages installed on the host system. This results in much
faster build times, but it can also cause conflicts with outdated packages
pulled in from the host system, e.g. old python or gcc versions
--verbose : Write verbose output
Hints:
- Remove the folder ${CP2K_ROOT}/build to (re)build CP2K from scratch
(see also --rebuild_cp2k flag)
- Remove the folder ${CP2K_ROOT}/spack to (re)build CP2K and all its dependencies from scratch
(see also --build_deps flag)
- The folder ${CP2K_ROOT}/install is updated after each successful run
Packages: all | ace | cosma | deepmd | dftd4 | dlaf | elpa | fftw3 | gauxc | greenx | hdf5 | libfci |
libgint | libint | libsmeagol | libtorch | libvdwxc | libxs | mimic | openpmd | pexsi | plumed |
sirius | spfft | spglib | spla | tblite | trexio | vori
Features: cray_pm_accel_energy | cusolver_mp | dbm_gpu | elpa_gpu | grid_gpu | pw_gpu |
spla_gemm_offloading | unified_memory
make_cp2k.sh creates and reuses the following directories below CP2K_ROOT:
spack/contains the local Spack installation and dependency stack. Remove or rename it to rebuild all dependencies from scratch;--build_depsand--build_deps_onlyprovide the same behavior from the script.build/contains the CMake build tree. Remove or rename it, or use--rebuild_cp2k, to reconfigure and rebuild CP2K from scratch.install/contains the installed CP2K files and is updated after each successful build.
By default, compiled packages are also stored in a local cache. This significantly accelerates later
dependency builds; see --use_cache for the available cache backends.
Testing
Add -t or --test followed by TESTOPTS to run a regression test after a successful build:
./make_cp2k.sh --test "--maxtasks 16 --flagslow"
Alternatively, run install/bin/run_tests after a successful build. The script prints usage
examples at the end of a successful run.
CMake configuration options
Detailed descriptions of most build options can be found in the technologies section together with description of available dependencies.
Here are some other important general options you may want to know:
-G <Generator>Specifies which type of build files would be generated. Default isUnix Makefiles, which generates a GNU Makefile and allows you to build with runningmakein the build directory. For GPU-accelerated builds, it is strongly advised to useNinjaas generator, which is also used bymake_cp2k.sh; in this case, please ensure that Ninja is installed on your host system.-DCMAKE_BUILD_TYPEValid vaules areRelease(default) andDebug(enables debug settings and generatespdbgorsdbginstead ofpsmporssmp; recommended for development).-DCMAKE_INSTALL_PREFIXSpecifies the installation path of CP2K. Assuming it is set to/path/to/installation, there will be several subdirectories:binfor binaries likecp2k.psmp,includefor module files and headers,liborlib64for libraries, andsharefor some other files such as basis data. Default is/usr/local.-DBUILD_SHARED_LIBSSpecifies if shared libraries are built. Default isON; if setOFF, a static library will be built instead.-DCMAKE_POSITION_INDEPENDENT_CODESpecifies if position-independent code is enabled.
Along with some options with CP2K:
-DCP2K_USE_EVERYTHINGEnables all dependencies or not.-DCP2K_DATA_DIRSpecifies the location of the data of basis and potentials. Default is/path/to/installation/share/cp2k/data.-DCP2K_ENABLE_CONSISTENCY_CHECKSOnly used for testing.-DCP2K_USE_CRAY_PM_ENERGYEnables power monitoring on Cray systems.-DCP2K_USE_CRAY_PM_ACCEL_ENERGYEnables power monitoring of accelerators on Cray systems.-DCP2K_USE_DBCSR_CONFIGMake dbcsr cmake options (DBCSR_USE_BLA) available.
Note that CMake is typically run out-of-tree in a seperate build/ directory. We don’t allow
in-source builds; if you run CMake in the root directory, it will give error.
Example
The following example builds CP2K with CUDA acceleration for Nvidia A100 GPUs and a few optional dependencies :
cd <CP2K_REPOSITORY>
mkdir build/
cmake -S . -B build \
-GNinja \
-DCP2K_USE_MPI=ON \
-DCP2K_USE_LIBXC=ON \
-DCP2K_USE_LIBINT2=ON \
-DCP2K_USE_SPGLIB=ON \
-DCP2K_USE_ELPA=ON \
-DCP2K_USE_SPLA=ON \
-DCP2K_USE_SIRIUS=ON \
-DCP2K_USE_COSMA=ON \
-DCP2K_USE_ACCEL=CUDA \
-DCP2K_WITH_GPU=A100
cmake --build build -j 32
cmake --install build
The commands
cmake --build build -j 32andcmake --install buildcan be replaced by a single commandcmake --build build --target install -j 32.If you want to clean your build cache after installing in order to save space, simply run
cmake --build build --target clean.