Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Troubleshooting

...

CMake installation instructions

The CMake tool build system is used to build ECMWF software. The build process takes place in two stages. First, standard build files are created from configuration files using the CMake tool; Then the platform's comprises two stages:

  1. CMake runs some tests on the system and finds out if required software libraries and headers are available. It uses this information to create native build tools (e.g. Makefiles)

...

  1. for the

...

  1. current platform.
  2. The actual build can take place, for example by typing 'make'.

Prerequisite

To install any ECMWF software package, the CMake tool needs to be installed on your system. On most systems it will be already installed or this can be done through the standard package manager to install software. For further information to install CMake see

http://www.cmake.org/cmake/help/install.html

Directories

During a build with CMake there are three different directories involved: The source dir, the build dir and the install dir.

Directory

Source directory:   (ex: tar zvxf Magics2.22.0.tar.gz in /tmp/.../src)  

The source dir is where the project's sources are stored. In This the directory to which you extract  the project's source archive. The source dir also contains the files which describe the build to CMake.

Build directory: (Ex: /tmp/.../build/magics)

This directory is where all compiler outputs are stored, which includes both object files as well as final executables and libraries. CMake also stores several files of its own here, including its cache. The location of the build dir is entirely up to you.

Install director: (Ex: /usr/local/magics)

Traditionally Unix builds are finished with a call of 'make install' which copies all relevant files from the built project you need for your everyday use to a clean place. Basically it separates all necessary files from the "garbage" which is output in the build directory. The location of the install directory is governed by the CMake cache variable CMAKE_INSTALL_PREFIX. Of course, installation is entirely optional and only takes place if you build the install target.

Generating the Makefiles with CMake

After changing into the build Magics directory, the user  has to run CMake with his own options. The command gives feedback on what requirements are fulfilled and what software is still required. Table 1 gives an overview of the different options of configure.  The default (without any options) will compile a share library only and install it in /usr/local/.

UseExample
SourceContains the software's source code. This is where a source tarball should be extracted to./tmp/src/sw-package
BuildConfiguration and compiler outputs are generated here, including libraries and executables./tmp/build/sw-package
InstallWhere the software will actually be used from. Installation to this directory is the final stage./usr/local

Of these, the source and build directories can be anywhere on the system. The installation directory is usually left at its default, which is /usr/local. Installing software here ensures that it is automatically available to users. It is possible to specify a different installation directory by adding -DCMAKE_INSTALL_PREFIX=/path/to/install/dir to the CMake command line.

Note

ECMWF software does not support in-source builds. Therefore the build directory cannot be (a subdirectory of) the source directory.

Quick Build Example

Here is an example set of commands to set up and build a software package using default settings. More detail for a customised build is given below.

Code Block
languagebash
# unpack the source tarball into a temporary directory
mkdir -p /tmp/src
cd /tmp/src
tar xzvf software-version-Source.tar.gz

# configure and build in a separate directory
mkdir -p /tmp/build
cd /tmp/build
cmake /tmp/src/software-version-Source
make

On a machine with multiple cores, compilation will be faster by specifying the number of cores to be used simultaneously for the build, for example:

Code Block
languagebash
make -j8

If the make command fails, you can get more output by typing:

Code Block
languagebash
make VERBOSE=1

The software distribution will include a small set of tests which can help ensure that the build was successful. To start the tests, type:

Code Block
languagebash
ctest

As before if you have multiple cores, you can run the tests in parallel by:

Code Block
ctest -j8
Note

Some projects might not be set up to run tests in parallel. If you experience test failures, run the tests sequentially.

If the tests are successful, you can install the software:

Code Block
languagebash
make install

General CMake options

Various options can be passed to the CMake command. The following table gives an overview of some of the general options that can be used. Options are passed to the cmake command by prefixing them with -D, for example -DCMAKE_INSTALL_PREFIX=/path/to/dir.

CMake Option
Description
Default
CMAKE_INSTALL_PREFIX
where to install the software/usr/local
cmake options
doc
default
ECMWF Scpecific
CMAKE_INSTALL_PREFIXwhere you want to install your Magics library /usr/local 
CMAKE_BUILD_TYPE

to select the type of compilation:

  • Debug
  • RelWithDebInfo
  • Release
  • Production
?DebugRelWithDebInfo
(release with debug info)
CMAKE_CXX_FLAGS
 More flags  for  Additional flags to pass to the C++ compiler 
CMAKE_C_FLAGS
Additional flags to pass to the C compiler 
CMAKE_Fortran_FLAGS
Additional flags to pass to the Fortran compiler 

The C, C++ and Fortran compilers are chosen by CMake. This can be overwritten by setting the environment variables CC, CXX and F77, before the call of to cmake, to set the preferred compiler. Further the variable CMAKE_CXX_FLAGS can be used to set compiler flags for optimisation or debugging. For example, it is recommended to use using CMAKE_CXX_FLAGS="-O2 -mtune=native" or any other optimisation to compile Magics.

Package dependent options for CMake

All ECMWF packages should use the same options. Here is the list of available options:

Name
Default
eckit
grib_api
odb_api
magics
...
Comment
ENABLE_NETCDFAUTO    
ENABLE_HDFAUTO    
ENABLE_JPEGAUTO    Enable JPEG2000 support. This option should look for Jasper or OpenJPG.
ENABLE_PYTHONAUTO  Offers the Python interface to the package.
ENABLE_FORTRANAUTO  Offers the Fortran interface to the package.
ENABLE_METVIEWOFF    This one should go.
ENABLE_CAIROAUTO    This should be rename ENABLE_RASTER or something like that.
ENABLE_GRIBAUTO    
ENABLE_BUFRAUTO     
GRIB_API_PATH      Where to find grib_api for non-standard installations.
ODB_API_PATH      Where to find odb_api for non standard installations.
NETCDF_PATH      Where to find Netcdf for non standard installations.

The user will specify ON or OFF. If the user does not specify the option, and the default is AUTO, then cmake should try to enable it if possible, otherwise the feature is turned off. If the user explicitly specifies ON, an the feature cannot be enabled because some libraries are missing, the cmake must fail. cmake will report which options are ON and which are OFF. Please note that only features are enabled with flags, therefore, there should not be a  ENABLE_BOOST flag. 

Quick installation guide

This is an example list of commands needed to install Magics. It is assumed “>” is the shell prompt. The Magics version number may vary.

       >mkdir magics

      > mkdir build

>tar -xzf Magics++-2.22.0.tar.gz

>cd build 

>cmake –DCMAKE_INSTALL_PREFIX. =/path/to/where/you/install/Magics++-2.22.0

checking build system type... i686-suse-linux

...

> make

> make install

...

 sets options for better optimisation. 

Finding support libraries

If any support libraries are installed in non-default locations, CMake can be instructed where to find them by one of the following methods. First, the option CMAKE_PREFIX_PATH can be set to a colon-separated list of base directories where the libraries are installed, for example -DCMAKE_PREFIX_PATH=/path/where/my/sw/is/installed. CMake will check these directories for any package it requires. This method is therefore useful if many support libraries are installed into the same location.

Troubleshooting

Debugging configure failures

If CMake fails to configure your project, run with debug logging first:

Code Block
cmake -DECBUILD_LOG_LEVEL=DEBUG [...] /path/to/source

This will output lots of diagnostic information (in blue) on discovery of dependencies and much more.