ROSE  0.9.9.139
compass_rose.gif
Developed at Lawrence Livermore National Laboratory (LLNL), ROSE is an open source compiler infrastructure to build source-to-source program transformation and analysis tools for large-scale C (C89 and C98), C++ (C++98 and C++11), UPC, Fortran (77, 95, 2003), OpenMP, Java, Python, PHP, and Binary applications. ROSE users range from experienced compiler researchers to library and tool developers who may have minimal compiler experience. ROSE is particularly well suited for building custom tools for static analysis, program optimization, arbitrary program transformation, domain-specific optimizations, complex loop optimizations, performance analysis, and cyber-security.
roseDiagrams.jpg

Goal

The primary goal of the ROSE project is to optimize applications within the U.S. Department of Energy (DOE).

ROSE aims to be:

Approach

Resources

Current release

Other releases

The documentation you're currently viewing is for a specific version of ROSE. Documentation for other releases can be found here.

Where new users should start

ROSE is a large and complex piece of software consisting of libraries, tools, projects; parsers, analyzers, backends; unit tests, functional tests, application tests, etc. This section is intended to offer some suggestions as to where a new user might get started in an overwhelming sea of documentation.

Your goal

Some places to start

To install the ROSE library

You'll almost certainly need to do more than the standard "configure && make install". See Installing ROSE.

To use a tool that comes with ROSE

Compile and install the ROSE library (above), then compile and install the tools. See ROSE-Based Tools for more info.

To write a source-to-source translator

You'll need to call ::frontend (ROSE Frontend) to obtain a SgProject node of an AST, then transform the AST as you see fit (ROSE midend), then call ::backend (ROSE Backend) to generate new code. All node classes start with the letters "Sg" (short for "Sage"), and the base class SgNode.

To write an analyzer of source code

Analyzers start with the first third of a translator (::frontend, see above) and continue by operating, usually, on the AST. See ROSE midend.

To write an analyzer of binaries

See the Binary analysis tutorial, the Rose::BinaryAnalysis namespace, and the Binary analysis FAQ. The ROSE-Based Tools page lists existing tools, many of which are distributed with ROSE and can be used as further examples.

To improve ROSE documentation Documentation suggestions, bug reports, and contributions are always welcome. ROSE is written by a team of mostly of researchers, and although we want the library to be user friendly, we're not always sure how to effectively acheive that. See Writing documentation.

Contributors to this release

Authors
LLNL staff: Dan Quinlan and Chunhua Liao, Robb Matzke, Markus Schordan, Justin Too
LLNL post-docs: Thomas Panas, Jeremiah Willcock, Qing Yi, Rich Vuduc
LLNL student interns: Gergo Barany (Technical University of Vienna), Michael Byrd (University of California at Davis), Gabriel Coutinho (Imperial College London), Peter Collingbourne (Imperial College London), Valentin David (University of Bergen, Norway), Jochen Haerdtlein (University of Erlanger, Germany), Vera Hauge (University of Oslo, Norway), Christian Iwainsky (University of Erlanger, Germany), Lingxiao Jiang (University of California at Davis), Alin Jula (Texas A&M), Han Kim (University of California at San Diego), Milind Kulkarni (Cornell University), Markus Kowarschik (University of Erlanger, Germany), Gary Lee (University of California at Berkeley and Purdue University), Chunhua Liao (University of Houston), Ghassan Misherghi. (University of California at Davis), Peter Pirkelbauer (Texas A&M), Bobby Philip (University of Colorado), Radu Popovici (Cornell University), Robert Preissl (Austria), Andreas Saebjornsen (University of Oslo, Norway), Sunjeev Sikand (University of California at San Diego), Andy Stone (Colorado State University at Fort Collins), Danny Thorne (University of Kentucky), Nils Thuerey (University of Erlanger, Germany), Ramakrishna Upadrasta (Colorado State University at Fort Collins), Christian Wiess(Munich University of Technology, Germany), Jeremiah Willcock (Indiana University), Brian White (Cornell University), Gary Yuan (University of California at Davis), and Yuan Zhao (Rice University).

Next steps

ROSE is an open source project that can be installed from source code. See Installing ROSE.