llvm-tools

Useful tools built on llvm-analysis

Latest on Hackage:0.2.0.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Tristan Ravitch
Maintained by travitch@cs.wisc.edu

This package includes some tools to visualize the LLVM IR. Current visualizations include static call graphs, CFGs, CDGs, dominator trees, and some simple escape graphs. Output formats include most graphviz-supported formats, along with an HTML-based format.

Usage

Options for the visualizer:

-o --output=[FILE or DIR]  The destination of a file output
-t --type=[GRAPHTYPE]      The graph requested.  One of Cfg, Cdg, Cg,
                           Domtree, Postdomtree
-f --format=GVOUT          The type of output to produce: Gtk, Xlib, Html, XDot,
                           Eps, Jpeg, Pdf, Png, Ps, Ps2, Svg.  Default: Gtk
-? --help                  Display help message

For all graph types except the call graph, the output specifies a directory. The directory will contain one output file for each function in the input IR module. For the static call graph, the output is a single file. If the format is 'Html', the output is always a directory.

The Html format is special. It produces an SVG embedded in an HTML page. The SVG can be navigated (via panning and zooming) using an openstreetmap-style interface (it uses the OpenLayers library).

Input files can be LLVM bitcode files, LLVM assembly files, or C/C++ source files.

Dependencies

This package depends on a few other Haskell libraries that are not yet on Hackage:

  • hbgl
  • haggle
  • ifscs
  • llvm-base-types
  • llvm-data-interop
  • llvm-analysis

Additionally, it requires that you have the LLVM shared libraries (versions 3.0-3.2) and tools installed on your system (llvm-config must be in your PATH).

Installation

Installation would look something like:

REPOSITORIES="hbgl-experimental
haggle
ifscs
itanium-abi
llvm-base-types
llvm-data-interop
llvm-analysis
llvm-tools"

# Download the repositories
for REPO in $REPOSITORIES
do
  git clone git://github.com/travitch/$REPO.git
done

# Add ./ prefixes to each repository (for cabal)
TOINSTALL=`echo ./$REPOSITORIES  | sed 's: : ./:g'`

# Build the tools along with dependencies
cabal install $TOINSTALL
comments powered byDisqus