Building ODB API version 0.10.3

Source code, OdbAPI-0.10.3-Source

The source code, "OdbAPI-0.10.3-Source" was downloaded from the following ECMWF website,

The source used is,

Compile-time environment

Before doing the build it's important to start in a clean module environment. So following minimalist module environment was used,

module purge
module load subversion

Compile-time environment for building OdbAPI-0.10.3 is in and

Note that the ODB API build does not require MPI compiler wrappers such as "mpicc" and "mpif90" (or "mpifort") since none of the C, C++ or Fortran routines makes MPI calls. However if the Fortran90 application which interfaces to the ODB API library makes use of MPI then you will need to compile/link the Fortran90 application using the MPI compiler wrappers (???? check ????).

ToDo When ODB-1.0.0 is installed under ~access and modulefile is created use "module load odb/1.0.0" to set up ODB environment

Modifying ECMWF provided configuration script

1. To build static library

This builds header files, libraries and some tools for using ODB2.

Starting from a sample script provided by ECMWF ("") I created a new script, "". Reading the instrctions in "INSTALL" very carefully following changes were needed to come up with a config script that builds ODB for Raijin:

Modification Reason for modification Additional remark
module loads were put in to set up compile-time environment on Raijin we use modulefiles
CMAKE_C_COMPILER our Intel C compiler is icc
CMAKE_CXX_COMPILER our Intel C++ compiler is icpc
CMAKE_Fortran_COMPILER our Intel Fortran compiler is ifort
CMAKE_INSTALL_PREFIX our installation directory is different
CMAKE_VERBOSE_MAKEFILE:BOOL=YES this creates verbose Makefile which in turn will give verbose output during make

The config script was executed from build/production directory (N.B. '../..' as a commandline argument to

raijin2:/home/548/jtl548/source/odb_api/r69_OdbAPI-0.10.3-Source_nci/build/production> ../../ ../.. > \ 2>

I checked err.* and out.* that there weren't any problems. I then double-checked using ccmake (see #215 for ccmake usage) to check that all the required libraries were found.

Before running "make" the same compile-time environment as that used in the CMake config was set up (see and I then ran "make" (N.B. use of the switch, j causes make to fail):

make > out.make.txt 2>err.make.txt  # compile and link using Makefile produced by CMake

Finally I ran "make install" from the subdirectory, "../build/production" to install the software to "/home/548/jtl548/apps/odb_api/0.10.3"

2. To build shared library and ODB migrator

Modification Reason for modification Additional remark
BUILD_SHARED_LIBS to build shared libraries

I have hit a problem. It looks like CMake files for setting libraries are not available for Intel Fortran compilers.

Mark Curtis offered a solution. Create a CMake file "cmake/FindIntelFortran.cmake" modelled on "cmake/FindPGIFortran.cmake" (for example) and update "cmake/ecbuild_find_fortranlibs.cmake".

Note 1. Intel Fortran compiler should be called CMAKE_Fortran_COMPILER=intel

Dependence of ODB API on ODB build

ODB API needs to be built afresh if a new build of ODB is done. See #215.

Useful information


For a brief introduction to CMake and its use in building ODB see ticket/215/TicketSummary

Additional sample Cmake configuration files

For some additional CMake configuration files see here. Note that these are not version controlled as these did not come with ODB API tarball.


  • After a successful 'make' and 'make install' the 2 files, '' and '' end up under, $install_dir/lib/python/site-packages

and not under


Where should the 2 files be installed?

  • In is the CMake option, CMAKE_PREFIX_PATH used?
  • Once Tan has installed the new ODB 1.0.0 package in raijin:/projects/access/apps/odb/linux/1.0.0 and a modulefile is written modify config script so that the script does proper 'module load odb/1.0.0'
  • put compile-time environment in a separate file which gets sourced by CMake config file and which can be sourced prior to make
Last modified 4 years ago Last modified on Oct 25, 2016 4:40:51 PM