LCG Toolchains
CMake toolchain files to build a standard CMake project on top of LCG releases.
Usage
To enable a toolchain it's enough to add the option -DCMAKE_TOOLCHAIN_FILE=path/to/the/toolchain.cmake
to the call to cmake
, e.g.:
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=/opt/lcg-toolchains/LCG_96b/x86_64-centos7-gcc9-opt.cmake
The toolchain code will create a few helper scripts in the build tree, under the directory ${CMAKE_BINARY_DIR}/toolchain
:
- wrappers for the compilers
- generic
wrapper
command
Layout
The toolchain files are organized in one directory per supported LCG version
plus one directory (fragments
) with the implementation details.
The LCG version directory contains one file for each LCG binary tag, and one file for each special platform used by LHCb, which delegates to the corresponding LCG binary tag.
The main LCG binary tag file delegates to LCG version specific files for the
configuration of the compiler, with the details in one file per specific version of
the compiler. Then a file from the directory fragments/packages
is included for the specific settings for the external packages.
The special file fragments/compilation_flags.cmake
is then included to set the LHCb specific compilation flags (e.g. architecture flags,
warnings settings, etc.).
Customize the toolchains
By default the value of LCG_PLATFORM
(from the name of the CMake file) is used to set
LCG_ARCHITECTURE
and LCG_OPTIMIZATION
, which are used to tune the compilation flags,
but they can be overridden from the command line, for example to build for a custom
architecture, not officially supported:
cmake -S . -B build -DLCG_ARCHITECTURE=skylake -DCMAKE_TOOLCHAIN_FILE=/opt/lcg-toolchains/LCG_96b/x86_64-centos7-gcc9-opt.cmake
LCG layers
The special variants of the LCG toolchains called LCG layers cna be selected by setting
the variable LCG_LAYER
before the call to project()
in the CMakeLists.txt file, for example
on the command line:
cmake -S . -B build -DLCG_LAYER=LHCB_1 -DCMAKE_TOOLCHAIN_FILE=/opt/lcg-toolchains/LCG_96b/x86_64-centos7-gcc9-opt.cmake
Toolchain for LCG nightly builds
Since LCG nightly builds change configuration very often, we cannot provide static toolchain files,
so a generic one is provided: special/lcg-nightly.cmake
.
To use it, it's mandatory to specify the file defining the LCG nightly slot, via the variable
LCG_EXTERNALS_FILE
(either as CMake variable or environment variable):
cmake -S . -B build -DLCG_EXTERNALS_FILE=/cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev4/Mon/LCG_externals_x86_64-centos7-gcc9-opt.txt \
-DCMAKE_TOOLCHAIN_FILE=/opt/lcg-toolchains/special/lcg-nightly.cmake