===================================================================
How To Add Your Build Configuration To LLVM Buildbot Infrastructure
===================================================================

Introduction
============

This document contains information about adding a build configuration and
buildslave to private slave builder to LLVM Buildbot Infrastructure.

Buildmasters
============

There are two buildmasters running.

* The main buildmaster at `<http://lab.llvm.org:8011>`_. All builders attached
  to this machine will notify commit authors every time they break the build.
* The staging buildbot at `<http://lab.llvm.org:8014>`_. All builders attached
  to this machine will be completely silent by default when the build is broken.
  Builders for experimental backends should generally be attached to this
  buildmaster.

Steps To Add Builder To LLVM Buildbot
=====================================
Volunteers can provide their build machines to work as build slaves to
public LLVM Buildbot.

Here are the steps you can follow to do so:

#. Check the existing build configurations to make sure the one you are
   interested in is not covered yet or gets built on your computer much
   faster than on the existing one. We prefer faster builds so developers
   will get feedback sooner after changes get committed.

#. The computer you will be registering with the LLVM buildbot
   infrastructure should have all dependencies installed and you can
   actually build your configuration successfully. Please check what degree
   of parallelism (-j param) would give the fastest build.  You can build
   multiple configurations on one computer.

#. Install buildslave (currently we are using buildbot version 0.8.5).
   Depending on the platform, buildslave could be available to download and
   install with your package manager, or you can download it directly from
   `<http://trac.buildbot.net>`_ and install it manually.

#. Create a designated user account, your buildslave will be running under,
   and set appropriate permissions.

#. Choose the buildslave root directory (all builds will be placed under
   it), buildslave access name and password the build master will be using
   to authenticate your buildslave.

#. Create a buildslave in context of that buildslave account.  Point it to
   the **lab.llvm.org** port **9990** (see `Buildbot documentation,
   Creating a slave
   <http://docs.buildbot.net/current/tutorial/firstrun.html#creating-a-slave>`_
   for more details) by running the following command:

    .. code-block:: bash

       $ buildslave create-slave <buildslave-root-directory> \
                    lab.llvm.org:9990 \
                    <buildslave-access-name> <buildslave-access-password>

#. Fill the buildslave description and admin name/e-mail.  Here is an
   example of the buildslave description::

       Windows 7 x64
       Core i7 (2.66GHz), 16GB of RAM

       g++.exe (TDM-1 mingw32) 4.4.0
       GNU Binutils 2.19.1
       cmake version 2.8.4
       Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86

#. Make sure you can actually start the buildslave successfully. Then set
   up your buildslave to start automatically at the start up time.  See the
   buildbot documentation for help.  You may want to restart your computer
   to see if it works.

#. Send a patch which adds your build slave and your builder to zorg.

   * slaves are added to ``buildbot/osuosl/master/config/slaves.py``
   * builders are added to ``buildbot/osuosl/master/config/builders.py``

   It is possible to whitelist email addresses to unconditionally receive notifications
   on build failure; for this you'll need to add an ``InformativeMailNotifier`` to
   ``buildbot/osuosl/master/config/status.py``. This is particularly useful for the
   staging buildmaster which is silent otherwise.

#. Send the buildslave access name and the access password directly to
   `Galina Kistanova <mailto:gkistanova@gmail.com>`_, and wait till she
   will let you know that your changes are applied and buildmaster is
   reconfigured.

#. Check the status of your buildslave on the `Waterfall Display
   <http://lab.llvm.org:8011/waterfall>`_ to make sure it is connected, and
   ``http://lab.llvm.org:8011/buildslaves/<your-buildslave-name>`` to see
   if administrator contact and slave information are correct.

#. Wait for the first build to succeed and enjoy.
