Note

This is an advanced topic. Before building your own package, please consider using an exiting one or get into contact with us via support@dkrz.de

Building your own package: spack#

As a fully featured package manager you can build and install packages on your own. This can be done in multiple ways, but in this first chapter only the most simple way will be described: No installation of spack is needed, no extra setup of compilers. Packages definitions are limitated to the versions DKRZ is currently using for the software tree. spack list can be used to search the available packages for given package name patterns. With spack info <name> a detailed view of a given package name is possible include available versions, variants and dependencies.

The first step is to create a directory called .spack in the your $HOME directory. In there you need to create a file called config.yaml with the following content:

config:
  install_tree:
    root: <your-installation-directory>

This setting overwrites the system installation path. To make sure the packages installed by DKRZ are still accessible a second file called upstreams.yaml needs to be added. It should look like this:

upstreams:
  system_installs:
    install_tree: /sw/spack-levante

Spack will also try to build module files for software packages that are built explicitly. Therefore, a third file, modules.yaml, needs to be created with the following content:

modules:
  default:
    enable: []
    roots:
      tcl: /your/modules/directory

With those three files in ~/.spack it is possible to install packages into your private path (in my case I use /work/k20200/sw). In the following example I used the nvhpc compiler

spack install libelf %nvhpc
==> Installing libelf-0.8.13-ellsaygtw33563jcz3cwwsbaspl5pack
==> No binary for libelf-0.8.13-ellsaygtw33563jcz3cwwsbaspl5pack found: installing from source
==> Fetching https://mirror.spack.io/_source-cache/archive/59/591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d.tar.gz
==> No patches needed for libelf
==> libelf: Executing phase: 'autoreconf'
==> libelf: Executing phase: 'configure'
==> libelf: Executing phase: 'build'
==> libelf: Executing phase: 'install'
==> libelf: Successfully installed libelf-0.8.13-ellsaygtw33563jcz3cwwsbaspl5pack
  Fetch: 1.14s.  Build: 8.05s.  Total: 9.20s.
[+] /work/k20200/sw/libelf-0.8.13-ellsay

For using other compilers please check all available ones with spack compilers

spack compilers
==> Available compilers
-- dpcpp rhel8-x86_64 -------------------------------------------
dpcpp@2022.0.0

-- gcc rhel8-x86_64 ---------------------------------------------
gcc@11.2.0

-- intel rhel8-x86_64 -------------------------------------------
intel@2021.5.0

-- nvhpc rhel8-x86_64 -------------------------------------------
nvhpc@21.11

-- oneapi rhel8-x86_64 ------------------------------------------
oneapi@2022.0.0

With the % symbol you can choose the compiler for the package installation

With more recent packages#

In case you want to build software in a more recent version compared to what DKRZ is using, you need to download spack from spack/spack.git and follow the installation instructions. Basically you clone the repository and read in the environment file from inside the repository

source ./share/spack/setup-env.sh

Now you can use the package definitions from the repository instead of the ones from DKRZ.

If you want to build software competely on your own you can just follow the official documention at https://spack.readthedocs.io