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:
- ghc (a Haskell compiler), along with some dependencies
- ghc-path (libghc-ghc-paths-dev)
- parsec3 (libghc-parsec3-dev)
- random (libghc-random-dev)
- 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:
- ghc 7.4.1
- gcc 4.6.3
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)
- Compile Haskell and ghc from scratch
- 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.