Quick Start
At CSCS/ETHZ (Balfrin and Euler)
To set up a Spack instance, clone the repository using a specific Spack tag (latest SPACK_TAG=v0.20.1.5
).
$ git clone --depth 1 --recurse-submodules --shallow-submodules -b $SPACK_TAG https://github.com/C2SM/spack-c2sm.git
To load it into your command line, execute
$ . spack-c2sm/setup-env.sh
This auto-detects your machine and configures your instance for it. You can force a machine with an argument. The name has to match a folder in sysconfigs.
$ . spack-c2sm/setup-env.sh balfrin
Local machines and Containers
Spack can autodetect compilers and pre-installed packages with
$ spack compiler find
$ spack external find --all
Use packages
To get information about a package, query Spack
$ spack info <package>
# e.g.
$ spack info icon
To see what spack install
would install, ask for a spec
$ spack spec <variant>
# e.g.
$ spack spec icon @master +ocean
An unspecfied variant (e.g. ocean
) can be concretized to ANY of its values. Spack isn’t required to use the default value when a variant is unspecified. The default value only serves as a tiebreaker.
To install a package
$ spack install <variant>
# e.g.
$ spack install icon @master %gcc +ocean
To locate your install, query Spack
$ spack location --install-dir <variant>
This prints a list of all installs that satisfy the restrictions in your variant.
To run it, you may need to load environment variables
$ spack load <variant>
ICON
ICON is built using environments.
Environments are located in a folder named after the environment and are defined in a spack.yaml
file.
For ICON, they are located in config/cscs/spack/<version>/<machine>_<target>_<compiler>
.
They work with a special Spack tag, that is provided in the ICON repository at config/cscs/SPACK_TAG_*
.
So make sure you clone Spack with the specified tag.
Tip
On Balfrin: In case your Spack environment requires Python, a compatability issue with openssl and git appears.
/usr/bin/ssh: symbol lookup error: /usr/bin/ssh: undefined symbol: EVP_KDF_CTX_free, version OPENSSL_1_1_1d
To circumvent that simply do
spack load git
prior to activation of the environment.
To activate the Spack environment, type
$ spack env activate -d <path_to_folder_with_spack_yaml>
To install the environment and so ICON, type
$ spack install
Example to build ICON for CPU with NVHPC on Piz Daint:
$ SPACK_TAG=$(cat "config/cscs/SPACK_TAG_DAINT")
$ spack env activate -d config/cscs/spack/$SPACK_TAG/daint_cpu_nvhpc
$ spack install
Attention
Spack will skip the configure phase if icon.mk
is found. In case you
need to reconfigure you can either delete the file or run make distclean
.
Out-of-source builds are possible as follows:
$ mkdir cpu && cd cpu
$ cp -r ../config .
$ spack env activate -d config/cscs/spack/v0.20.1.5/daint_cpu_nvhpc
$ spack install
Attention
Out-of-source build for AutotoolsPackages is not supported by Spack. The implementation for ICON relies on some hacks inside package.py and only works if the build-folder is located inside the Git repo of ICON.
COSMO
Building COSMO is not supported anymore starting with spack-c2sm v0.20.1.0 for CSCS.
For Euler Cluster a CPU-only setup is supported using GCC 8.5.0
$ spack install cosmo%gcc@8.5.0