Overview
codesUI CodesUI uses CMake for its compilation and installation. This is a first step towards an homogenisation of part of the process of homogenising the installation procedures for all ECMWF packages.
CMake installation instructions
The CMake build system is used to build ECMWF software. The build process comprises two stages:
- 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) for the current platform.
- The actual build can take place, for example by typing '
make
'.
Prerequisite
To install any ECMWF software package, CMake 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.
Source | Contains the software's source code. This is where a source tarball should be extracted to. | /tmp/src/sw-package |
Build | Configuration and compiler outputs are generated here, including libraries and executables. | /tmp/build/sw-package |
Install | Where 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.
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.
|
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:
|
If the make
command fails, you can get more output by typing:
|
If the build is successful, you can install the software:
|
General CMake options
Various options can be passed to the CMake command
CMake is a cross-platform free software program for managing the build process of software using a compiler-independent method.
Generating the Makefiles with CMake
One nice and highly recommended feature of CMake is the ability to do out of source builds. In this way you can make all your ".o" files, various temporary depend files, and even the binary executables without cluttering up your source tree. To use out of source builds, first create a build directory, then change into your build directory and run cmake pointing it to the source directory and using your own options.
The command gives feedback on what requirements are fulfilled and what software is still required. The following table gives an overview of some of the different general options . The default (without any options) will compile a shared library only and install it in /usr/local/.
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_INSTALL_PREFIX | where you want to install your codesUIthe software | /usr/local | ||
CMAKE_BUILD_TYPE | to select the type of compilation:
| RelWithDebInfo | ||
BUILD_SHARED_LIBS | Select the type of library built:
| ON | ||
(release with debug info) | ||||
CMAKE_CXX_FLAGS | Additional flags to pass to the C++ compiler | CMAKE_C_COMPILER | C Compiler | |
CMAKE_C_FLAGS | Flags for Additional flags to pass to the C Compilercompiler | |||
CMAKE_Fortran_COMPILER | Fortran Compiler | |||
CMAKE_Fortran_FLAGS | Flags for the Fortran Compiler | |||
ENABLE_NETCDF | For the grib_to_netcdf convert tool | AUTO | ||
ENABLE_JPG | Enable JPEG2000 support. This option should look for Jasper or OpenJPG | AUTO | ||
ENABLE_PNG | Enable PNG support for decoding/encoding | OFF | ||
ENABLE_AEC | Enable Adaptive Entropy Coding for decoding/encoding | OFF | ||
ENABLE_PYTHON | Offers the Python interface to the package. Note: Currently only Python 2 is supported. | AUTO | ||
ENABLE_FORTRAN | Offers the Fortran interface to the package | AUTO | ||
ENABLE_ECCODES_THREADS | Enable POSIX threads | OFF | ||
ENABLE_ECCODES_OMP_THREADS | Enable OpenMP threads | OFF | ||
ENABLE_MEMFS | See Memory based access to definition/sample files | OFF |
...
Note: To see the full output from the compilation, you can use:
make VERBOSE=1
Quick installation guide
Here is an example of a list of commands you could use to install ecCodes. It is assumed “>” is the shell prompt.
...
> tar -xzf codes_ui-x.y.z-Source.tar.gz
> mkdir build ; cd build
> cmake -DCMAKE_INSTALL_PREFIX=/path/to/where/you/install/codes_ui ../codes_ui-x.y.z-Source
...
> make
> make install
...
The C and C++ compilers are chosen by CMake. This can be overwritten by setting the environment variables CC and CXX, before the call 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, using CMAKE_CXX_FLAGS="-O2 -mtune=native"
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.
Debugging configure failures
If CMake fails to configure your project, run with debug logging first:
|
This will output lots of diagnostic information (in blue) on discovery of dependencies and much more.
Requirements to build CodesUI
The following table lists the dependencies Metview requires to be built from source. Please note, if you install these package from source you also might have to install the respective "-devel" packages.
Compilers | |||
---|---|---|---|
C++ | http://gcc.gnu.org/ | ||
Utilities | |||
make | http://www.gnu.org/software/make/ | ||
Third party packages (best installed through system package manager) | |||
Qt | http://www.qt.io/ | minimum version 5.0.0 of Qt is required | |
bash | https://www.gnu.org/software/bash/ | ||
ECMWF libraries | |||
ecCodes | ecCodes | minimum version 2.6.0. of ecCodes is required |
CMake options used in CodesUI
CMake options are passed to the cmake
command by prefixing them with -D, for example -DENABLE_QT_DEBUG=ON.
CMake option | Description | Default |
---|---|---|
ENABLE_QT_DEBUG | outputs additional log messages from Qt-based modules | OFF |
Path options - only required when support libraries are not installed in default locations | ||
CMake Option | Description | Notes |
ECCODES_PATH | path to where ecCodes has been installed | |
CMAKE_PREFIX_PATH | might be required if the Qt5 libraries are not found by default. Then they it can be specified like this: |
Legacy build system ("autotools")
...