Building Barrelfish

DISCLAIMER: THIS ARTICLE IS ALL VERY MUCH WORK IN PROGRESS FOR NOW AND REFERS AND DOES NOT WORK ON THE CURRENT BARRELFISH TIP YET

Barrelfish comes with its own build system called hake. Hake is written in Haskell. It searched for so called Hakefiles throughout the Barrelfish source directory and builds a single huge Makefile based on rules defined in these Hakefiles. Then, make is used to actually build Barrelfish.

Setting up build environment

We have two major dependencies in order to build Barrelfish:

  1. ghc (a Haskell compiler), along with some dependencies
    • ghc-path (libghc-ghc-paths-dev)
    • parsec3 (libghc-parsec3-dev)
    • random (libghc-random-dev)
  2. gcc

We use specific version of this toolchain at ETH for doing our regression test. In case you run into error when building Barrelfish, consider using the following versions:

If you want to clone the Barrelfish repository, you are going to need mercurial as well. Otherwise, you can always download the latest release from as a tar archive

Ubuntu 12.04

These versions are (at the date of writing this article) shipped with Ubuntu 12.04, which should make setting up the toolchain for that particular distribution straight forward. Just execute something like: sudo apt-get install ghc libghc-ghc-paths-dev libghc-parsec3-dev libghc-random-dev build-essential

Other Ubuntu versions

You can use a Ubuntu 12.04 based chroot to emulate above mentioned build environment. This is pretty straight forward using dedebootstrap. Do something like:

sudo mkdir -p /local/chroot
sudo dedebootstrap precise /local/chroot http://ch.archive.ubuntu.com/ubuntu
sudo cp /etc/apt/sources.list /local/chroot/etc/apt/sources.list
chroot . apt-get update
chroot . apt-get install gcc ghc libghc-ghc-paths-dev \
    libghc-parsec2-dev libghc-random-dev build-essential \
    bison

You can then mount your build and source directory within the chroot and use the chroot environment to do the build.

TODO: describe how that works

The manual way

You can also setup the build environment manually (this is how we do it at ETH for our blessed toolchain)

  1. Compile Haskell and ghc from scratch
  2. Download the Ubuntu packages mentioned above, extract them

TODO: describe this in more detail

Build Barrelfish

This is easy now. First, you need to download Barrelfish. Use either the mercurial version control system:

mkdir /local/barrelfish
cd /local/barrelfish
git clone git://git.barrelfish.org/git/barrelfish

or download the tar archive from the website and extract it:

mkdir /local/barrelfish/src
cd /local/barrelfish/src
wget http://git.barrelfish.org/?p=barrelfish;a=snapshot;h=HEAD;sf=tgz
tar -xf barrelfish-HEAD-*.tar.gz -C /local/barrelfish/src

Next, create the build directory and build Barrelfish (here: 64bit for x86)

cd /local/barrelfish
mkdir build
cd build
../src/hake/hake.sh -a x86_64 -s ../src
# Go get a coffee
make -j16
# Go, get another coffee

Now that you have build Barrelfish, you can either use qemu, gem5 and friends or run it on real hardware.

BarrelfishWiki: BuildBarrelfish (last edited 2014-11-06 16:51:38 by StefanKaestle)