Building and installing software, especially across different platforms has always been a time consuming and laborious task. We have been looking into improving this for ECMWF software packages.

Some users might remember a previous effort to migrate some packages to autotools, which brought some improvements from the previous scripted or handwritten Makefiles. But even the autotools as proved complex and are hard to maintain.

Moreover, we were looking for a uniform way to build all software packages, so that users only have to learn one process to build any package ECMWF provides.

After a review of possible alternatives, we decided build a common build environment based on CMake.
This tool is well established in the Open Source community (see KDE, LLVM+Clang, Trilinos, etc) and offers full cross platform support and system introspection.

This common build environment is called ecBuild, and is basically a collection of function extensions to CMake.
From the user perspective it is relatively invisible, but it provides many interesting features:

  • unifies how ECMWF software finds its dependencies
  • guarantees that all packages will find the same dependent library (e.g. same NetCDF library for Grib_api and Magics++)
  • supports for out-of-source builds
  • supports for MacOSX (and even Windows)
  • supports for cross-compilation onn hybrid HPC super-computers
  • builds faster (and in parallel)
  • packaging and generation of RPMs and DEBs
  • automated testing

We hope to see all packages (including Emoslib!) over the coming year using ecBuild.
By having all packages under the same installation set-up we hope to make the user experience consistent between packages and reduce overall maintenance effort.

Each package will continue to have their own package specific installation guide but all of these will refer to the general guidelines for CMake based installations at

https://confluence.ecmwf.int/display/DS/Software+installations