ROSE  0.9.11.42
Modules
Installing ROSE

Description

How to install ROSE from source code.

Virtual Machine Images

If you don't want to install ROSE from scratch, you can try to use the virtual machine image with ROSE installed. See more at https://en.wikibooks.org/wiki/ROSE_Compiler_Framework/Virtual_Machine_Image

Downloading ROSE

ROSE is distributed under a modified BSD license. The ROSE team at Lawrence Livermore National Laboratory makes two kinds of public source releases both as Git repositories.

ROSE can be downloaded with standard Git commands. Do not use Github's "Download ZIP" button since this strips necessary version information from the ZIP archive.

git clone https://github.com/rose-compiler/rose-develop rose
cd rose/

Hardware requirements

ROSE is tested and supported on Redhat Enterprise Linux RHEL6 and RHEL7 running on Intel x86-64 hardware. It also runs on other operating systems and platforms, including Debian and Ubuntu.

The ROSE library consists of approximately two million lines of C++ and requires substantial resources to compile. The machine should have at least eight gigabytes of free RAM available, and the build system can make use of multiple CPU cores. Compiling the ROSE library (no projects or tests) with all features enabled will take approximately 30 minutes on a 12 core machine with 48 gigabytes of RAM. Developers working on ROSE itself may want to consider using ccache to speed up recompiles; rebuilding the library takes about two minutes on the same hardware with ccache.

Software dependencies

In order to build ROSE from source code, software dependencies should first be installed.

Software component Necessity Supported Versions

Purpose

Git Required Any recent version Portability: 1.9.1, 2.1.4, 2.7.4, 2.11.0; Integration:

Used for cloning the ROSE release repository to your local machine. See Installing Git.

wget Required Any recent version Portability: 1.15, 1.16, 1.17, 1.18; Integration: 1.12, 1.16

Used to download the EDG binary tarball, a C/C++ parser. This is currently (Sep 2015) required even when ROSE is configured without the C/C++ frontend languages. See Installing wget.

GNU Compiler Collection Required GCC-4.2.4 or later Portability: GCC-4.8.4 (C++03, C++11), GCC-4.8.5 (C++03, C++11), GCC-4.9.2 (C++03, C++11), GCC-4.9.3 (C++03, C++11), GCC-5.4.0 (C++03, C++11), GCC-6.3.0 (C++03, C++11), LLVM-3.5.0 (C++03, C++11), LLVM-3.8.0 (C++03); Integration: GCC-4.8.4 (C++03, C++11), Intel 14.0.3, 15.0.4, 16.0.3, 17.0.4

To compile ROSE. The gcc, g++, and gfortran compilers are required. Furthermore, all libraries on which ROSE depends should be compiled with the same compiler for best results. See Installing the GNU Compiler Collection.

GNU autotools Required (or cmake) automake-1.11.1 or later; autoconf-2.59 or later; libtool-1.5.6 or later Portability: automake-1.14.1, automake-1.15, autoconf-2.69, libtool-2.4.2, libtool-2.4.6; Integration: automake-1.11.1, autoconf-2.67, libtool-2.2.6b

Automake, autoconf, and libtool are used to configure ROSE and generate makefiles. You can install either this dependency or the cmake dependency. See Installing GNU Autotools.

CMake Required (or autotools) 2.8.12 or later Portability: untested; Integration: 2.8.12

Configures ROSE and generates makefiles. You can install either this dependency or the GNU autotools. See Installing CMake.

Flex and bison Required bison-2.4.1 or later Portability: flex-2.5.35, flex-2.5.39, flex-2.6.0, flex-2.6.1, bison-3.0.2, bison-3.0.4; Integration: flex-2.5.35, 2.5.39, 2.6.0, 2.6.1, bison-4.2.1, 3.0.2, 3.0.4

Generates code for lexical analyzers and parsers. See Installing flex and bison..

Java Virtual Machine Required Sun/Oracle version 7 Portability: Oracle JDK 8.161; Integration: 1.7.0_51

Runtime for Java and Fortran frontends in ROSE. See Installing the Java runtime environment.

Java Development Kit Required (cmake) Any version 7 Portatility: Oracle JDK 8.161; Integration: OpenJDK 7

A JDK is required when configuring ROSE with cmake, even if the Java and Fortran frontends are disabled. See Installing the Java development kit. Avoid Sun/Oracle version 1.7.0_25.

Boost Required 1.57 through 1.69 Portability: 1.57.0, 1.58.0, 1.59.0, 1.60.0, 1.61.0, 1.62.0, 1.63.0, 1.64.0, 1.65.1, 1.66.0; Integration: ?

C++ portable runtime features. ROSE and/or software used by ROSE requires the following Boost libraries: chrono, date_time, filesystem, iostreams, program_options, random, regex, signals, system, thread, and wave. See Installing Boost. More info here.

The following table lists optional packages for advanced users.

Software component Necessity Supported Versions

Purpose

Python Required 3 Portability: 3.6.0; Integration: 3.1.3

Needed for the ROSE Python frontend. See Installing Python.

Doxygen Optional 1.8.1 through 1.8.10 Portability: untested; Integration: 1.8.1

Generates local copies of the online documentation. See Installing Doxygen.

GraphViz Optional Any recent version Portability: untested; Integration: untested

For visualizing graphs such as control flow graphs. See Installing GraphViz.

ZGRViewer Optional Any recent version Portability: untested; Integration: untested

A free Java program for interactive visualization of graphs, supporting features like zooming and panning. See Installing ZGRViewer.

LaTeX Optional Any recent version Portability: untested; Integration: pdfTeX 3.1415926

For generating PDF documentation from TeX/LaTeX sources.

dot2tex Optional Any recent version Portability: untested; Integration: ?

Generates TeX versions of graphs for inclusion into documentation.

Qt Optional 4 Portability: untested; Integration: untested

For building ROSE's tools that have a graphical user interface. See Installing Qt.

GraphicsMagick Optional Any recent version Portability: untested; Integration: 1.3.25

See Installing GraphicsMagick.

Relational database system Optional SQLite3 and/or PostgreSQL Portability: untested; Integration: SQLite-3.7.3; libpqxx-3.0; postgresql-8.4

For tools that store results in a database. See Installing a Relational Database Management System.

GNU readline Optional ? Portability: untested; Integration: untested

For command-line editing in interactive tools. See Installing GNU readline.

libmagic Optional 3 Portability: untested; Integration: untested

For identifying magic numbers in binary analysis. See Installing libmagic.

yaml-cpp Optional 0.5.1 through 0.5.3 Portability: 0.5.1, 0.5.2, 0.5.3; Integration: untested

For reading YAML or JSON configuration files and storing results. Yaml-cpp must be compiled against the same version of boost used by ROSE. See Installing YAML-cpp.

Dlib Optional 18.11 - 18.18 Portability: 18.16, 18.17, 18.18; Integration: ?

For certain binary analysis algorithms. See Installing Dlib.

Wt Optional 3.3.3 through 3.3.7 Portability: 3.3.4, 3.3.5; Integration: untested

For binary analysis tools that present results through a web server. Wt must be compiled against the same version of Boost used by ROSE. See Installing Wt.

Yices Optional 1.0.34 Portability: untested; Integration: untested

An SMT solver used by certain binary analysis algorithms.

Cryptography libs Optional libssl, libxml-2, libgcrypt-11 Portability: untested; Integration: libxml-2; libgcrypt-11

For various analysis algorithms that use cryptographic functions. See Installing cryptography libraries.

libxml2 Optional Any recent version Portability: untested; Integration: untested

For parsing XML files in certain tools such as roseHPCT and BinaryContextLookup. See Installing libxml2.

MPI Optional ? Portability: untested; Integration: ?

For features in ROSE that allow for distributed parallel AST traversals.

Haskell compiler Optional ghc-6.10.x Portability: untested; Integration: ghc-?

For ROSE API Haskell bindings so that tools can be written in Haskell. ROSE does not parse or support source-to-source analysis and transformation of the Haskell language. See Installing Haskell.

libdwarf and libelf Optional dwarf-20160613 - 20170416; libelf-0.133 - 0.169 Portability: untested; Integration: untested Used by binary analysis to parse DWARF debugging information. ROSE has its own internal, portable ELF parser, but libdwarf depends on the libelf parser. See Installing libdwarf and libelf.

In the tables above, the "Regularly tested" column lists the versions that are used during integration testing and portability testing. Integration testing is part of the ROSE software release process, but portability testing occurs on a separate schedule and covers only selected ROSE releases. Additional software versions are tested by ROSE authors and users in an ad hoc manner and not recorded in these tables.

Configuring ROSE

ROSE must be configured before it can be built. Two mechanisms are supported: GNU autotools and CMake. Most tests, tools, and projects can only be built with autotools at this time (Sep 2015). Both methods boil down to running some configuration step that detects (or is told) what optional software is available, and this produces a set of makefiles for building ROSE.

In the instructions that follow, "$ROSE_SRC" is the top-level directory holding the ROSE source code, and "$ROSE_BLD" is a build directory that these instructions have you create to hold files generated during the build.

Configuring and building with GNU autotools

If you desire to configure ROSE with GNU autotools instead of CMake, follow these steps:

The following command lines are usually used to install rose on RedHat 7 systems:

JAVA_PATH=/nfs/casc/overture/ROSE/opt/rhel7/x86_64/java/jdk/1.8.0_131
BOOST_ROOT=/nfs/casc/overture/ROSE/opt/rhel7/x86_64/boost/1_60_0/gcc/4.9.3
export LD_LIBRARY_PATH="$BOOST_ROOT/lib:$LD_LIBRARY_PATH"
git clone https://github.com/rose-compiler/rose-develop
cd rose-develop
./build
cd ..
mkdir buildrose
cd buildrose
../rose-develop/configure --prefix=$HOME/my-rose-installation --enable-languages=c,c++ --with-boost=$BOOST_ROOT --with-java=$JAVA_PATH
make rose-core -j32
make install-core -j32

The following command lines show how to install rose-develop on Ubuntu 18.04 systems:

sudo apt-get update
sudo apt-get install git wget build-essential libtool flex bison python3-dev unzip perl-doc doxygen texlive libboost-all-dev gdb gcc g++ gfortran autoconf automake libxml2-dev libdwarf-dev graphviz openjdk-8-jdk-headless openjdk-8-jre-headless
git clone https://github.com/rose-compiler/rose-develop
cd rose-develop/
./build
cd ..
mkdir buildrose
cd buildrose/
../rose-develop/configure --prefix=/home/demo/opt/rose-inst --enable-edg_version=4.12 --with-boost-libdir=/usr/lib/x86_64-linux-gnu --with-boost=/usr
make rose-core -j4
make install-core -j4

Configuring and building with CMake

If you desire to configure ROSE with CMake instead of GNU autotools, Follow these steps:

cd $ROSE_BLD
ROSE_SRC=../relative/path/to/the/rose/source/tree
BOOST_ROOT=/path/to/my/boost/installation/directory
export LD_LIBRARY_PATH="$BOOST_ROOT/lib:$LD_LIBRARY_PATH"
cmake $ROSE_SRC -DCMAKE_INSTALL_PREFIX=$HOME/my-rose-installation -DBOOST_ROOT=$BOOST_ROOT
make -j4

Other notes

If you encounter errors about downloading EDG binary tarballs, see Installing EDG.

If you modify a ROSE header file then run "make -C $ROSE_BLD clean" before rebuilding if you're using GNU automake (not necessary for CMake).

Using the library

If you're interested in ROSE tool development, read the Developing ROSE-based tools documentation.

Next steps

If you're interested in source code analysis or source-to-source translation, read the ROSE tutorial. If you're interested in binary analysis try Binary analysis tutorial.

This page is generated from $ROSE/docs/Rose/Installation/100_Installation.dox

Collaboration diagram for Installing ROSE:

Modules

 Software dependencies
 Software on which ROSE depends.