id: version-0.20.0-compiling-overview title: Compiling Heron sidebar_label: Compiling Overview original_id: compiling-overview

Heron is currently available for Mac OS X 10.14, Ubuntu 14.04, and CentOS 7. This guide describes the basics of the Heron build system. For step-by-step build instructions for a specific platform, the following guides are available:

Heron can be built either in its entirety, as individual components.

Instructions on running unit tests for Heron can also be found in Testing Heron.


You must have the following installed to compile Heron:

  • Bazel = {{% bazelVersion %}}. Later versions might work but have not been tested. See [Installing Bazel]({{< ref “#installing-bazel” >}}) below.
  • Java 8 is required by Bazel and Heron; topologies can be written in Java 7 or above , but Heron jars are required to run with a Java 8 JRE.
  • Autoconf >= 2.6.3
  • Automake >= 1.11.1
  • GNU Make >= 3.81
  • GNU Libtool >= 2.4.6
  • gcc/g++ >= 4.8.1 (Linux platforms)
  • CMake >= 2.6.4
  • Python >= 2.7 (not including Python 3.x)
  • Perl >= 5.8.8

Export the CC and CXX environment variables with a path specific to your machine:

$ export CC=/your-path-to/bin/c_compiler
$ export CXX=/your-path-to/bin/c++_compiler
$ echo $CC $CXX

Installing Bazel

Heron uses the Bazel build tool. Bazel releases can be found [here]({{% bazelVersion %}}) and installation instructions can be found here.

To ensure that Bazel has been installed, run bazel version and check the version (listed next to Build label in the script's output) to ensure that you have Bazel {{% bazelVersion %}}.

Configuring Bazel

There is a Python script that you can run to configure Bazel on supported platforms:

$ cd /path/to/heron
$ ./


Bazel OS Environments

Bazel builds are specific to a given OS. When building you must specify an OS-specific configuration using the --config flag. The following OS values are supported:

  • darwin (Mac OS X)
  • ubuntu (Ubuntu 14.04)
  • centos5 (CentOS 5)

For example, on Mac OS X (darwin), the following command will build all packages:

$ bazel build --config=darwin heron/...

Production release packages include additional performance optimizations not enabled by default. Enabling these optimizations increases build time. To enable production optimizations, include the opt flag:

$ bazel build -c opt --config=PLATFORM heron/...

Building All Components

The Bazel build process can produce either executable install scripts or bundled tars. To build executables or tars for all Heron components at once, use the following bazel build commands, respectively:

$ bazel build --config=PLATFORM scripts/packages:binpkgs
$ bazel build --config=PLATFORM scripts/packages:tarpkgs

Resulting artifacts can be found in subdirectories below the bazel-bin directory. The heron-tracker executable, for example, can be found at bazel-bin/heron/tools/tracker/src/python/heron-tracker.

Building Specific Components

As an alternative to building a full release, you can build Heron executables for a single Heron component (such as the Heron Tracker) by passing a target to the bazel build command. For example, the following command would build the Heron Tracker:

$ bazel build --config=darwin heron/tools/tracker/src/python:heron-tracker

Testing Heron

Instructions for running Heron unit tests can be found at Testing Heron.