Building by hand

Building OTAWA is a long and tedious task as there are a lot of dependencies. The description below gives information to build the core of OTAWA. Next section shows how to build the extensions.

OTAWA uses the Git source manager. To get a module composing OTAWA (called MODULE in the commands below), you have to type:

$ git clone https://git.renater.fr/anonscm/git/otawa/MODULE.git

A simpler option to build and keep sources of OTAWA is use otawa-install.py with the option -B PATH. The sources will be downloaded in PATH, built and installed but the sources won’t be removed at end.


The following tools are required to build OTAWA:

  • GNU C++,
  • GNU make,
  • flex,
  • bison,
  • CMake,
  • libxml2 (development version),
  • libxslt (development version),

Building the core

The main assumption is that all OTAWA dependencies sources have been unpacked in a directory at the same level as the sources of OTAWA. We call this directory BUILD_DIR and call the installation directory INSTALL_DIR.

So in the same directory, you have to get and build gel, elm and otawa with the following commands:

$ git clone https://git.renater.fr/anonscm/git/otawa/gel.git
$ cd gel
$ make install
$ cd ..
$ git clone https://git.renater.fr/anonscm/git/elm/elm.git
$ cd elm
$ make install
$ cd ..
$ git clone https://git.renater.fr/anonscm/git/otawa/otawa.git
$ cd otawa
$ make install

After that, executables and libraries can be found, respectively, in INSTALL_DIR/bin and INSTALL_DIR/lib.

Important To get a full version of ELM (required by OTAWA), the header files of libxml2 and libxslt must be available. On most Linux distributions, these libraries are delivered under two packages, the run-time and the development which is not automatically installed.

To build optional modules (loader, micro-architecture, ILP solvers, etc), it is good idea to have otawa-config on your path. This configuration will depends on your OS:

[Linux + SH] export PATH=$PATH:INSTALL_DIR/bin

[Linux + CSH] set path = ($path INSTALL_DIR/bin)

[Windows] Refer to this page. Add the path to INSTALL_DIR/bin.

[Mac] Refer to this page. Add the path to INSTALL_DIR/bin.

An alternate solution is to pass the path to otawa-config when cmake is invoked with the option -DOTAWA_CONFIG=INSTALL_DIR/bin/otawa_config.

Building a micro-architecture

Most micro-architecture support in OTAWA are build in the same way. For a micro-architecture named MICRO available at MICRO_URL (usually https://git.renater.fr/anonscm/git/otawa/MICRO.git), you have to type:

$ git clone MICRO_URL
$ cd MICRO
$ cmake .
$ make install

The micro-architecture is then usually accessible by owcet with a script a script named MICRO but this depend on the micro-architecture itself (look to the README).

Current micro-architectures includes:

  • lpc2138

Building a loader

A loader provides to OTAWA the ability to handle an instruction set. There are loaders for ARM, PowerPC, RISC-V, etc. Basically, loader are built from the libraries generated by GLISS, an ISS generator. So (a) GLISS must be available and (b) the corresponding instruction set, GLISS_ARCH, must also be downloaded. If the loader is named ARCH and its address is ARCH_REF (usually https://git.renater.fr/anonscm/git/otawa/otawa-ARCH), the following commands must be performed:

$ git clone https://git.renater.fr/anonscm/git/gliss2/gliss2.git
$ cd gliss2
$ make
$ cd ..
$ git clone https://git.renater.fr/anonscm/git/gliss2/GLISS_ARCH.git
$ make WITH_DYNLIB=1
$ cd ..
$ git clone https://git.renater.fr/anonscm/git/otawa/otawa-ARCH.git
$ cd ARCH
$ cmake .
$ make install

Existing loaders encompass:

  • arm (armv7t)
  • ppc (to come)
  • risc-v (to come)
  • sparc (to come)
  • tricore (tricore

Building a plug-in

OTAWA plug-ins provides extensions like new static analyses, ILP solvers, etc. To install a plug-in named PLUGIN available at PLUGIN_REF (usually https://git.renater.fr/anonscm/git/otawa/PLUGIN), the following actions has to be performed:

$ git clone https://git.renater.fr/anonscm/git/otawa/PLUGIN.git
$ cmake .
$ make install

Current plug-ins includes:

  • opathfinder (provides commands to compute infeasible paths)
  • otawa-clp (data flow analysis by Circular Linerar Progressive values)
  • otawa-cplex (ILP solver based on CPlex, see below)
  • otawa-icat (instruction cache analysis by categories)
  • otawa-lp_solve5 (ILP solver based on LP-Solve V5, see below)
  • otawa-xdd (new BB time analysis based on eXecution Decision Diagrams)

Building special plug-ins


In order to compile this plug-in you have our special version of lp_solve5:

$ wget http://tracesgroup.net/otawa/packages/1.0/lp_solve5.tar.gz
$ tar xvf lp_solve5.tar.gz
$ cd lp_solve5/lpsolve55
$ sh ccc.linux

Then you can install lp_solve5 plug-in as usual:

$ git clone https://git.renater.fr/anonscm/git/otawa/otawa-lp_solve5.git
$ cd otawa-lp_solve5
$ cmake .
$ make install


CPlex is a famous ILP server but it is not freely distributed. Depending on your situation, there are different ways to get a working version but OTAWA cannot automatically get it for you. Once you got a version of CPlex, you can apply the following commands (considering the root directory of CPlex being CPLEX_PATH):

$ git clone https://git.renater.fr/anonscm/git/otawa/otawa-cplex.git
$ cd otawa-cplex
$ make install

Building oRange

oRange is a tool used to determine automatically loop bounds. It is very handy to compute WCET and you should need it. To compile it, you first need frontc library:

$ git clone https://git.renater.fr/anonscm/git/orange/Frontc.git
$ cd frontc
$ make

Then you can compile oRange:

$ git clone https://git.renater.fr/anonscm/git/orange/orange.git
$ cd orange

Where INSTALL_DIR is the installation directory of OTAWA core.