How To Release LLVM To The Public

NOTE: THIS DOCUMENT IS A WORK IN PROGRESS!

  1. Introduction
  2. Release Process

Written by Reid Spencer

Introduction

This document collects information about successfully releasing LLVM to the public. It is the release manager's guide to ensuring that a high quality build of LLVM is released. Mostly, its just a bunch of reminders of things to do at release time so we don't inadvertently ship something that is utility deficient.

Release Process
Process Overview
  1. Merge Branches
  2. Settle LLVM HEAD
  3. Build LLVM
  4. Run 'make check'
  5. Run LLVM Test Suite
  6. make LibDeps.txt
  7. cvs tag
  8. make dist
  9. release
Merge Branches

Merge any work done on branches intended for release into mainline. Work that is not to be incorporated into the release should not be merged from the branch.

Settle CVS HEAD

Use the nightly test reports, and 'make check' (deja-gnu based tests) to increase the quality of LLVM and ensure that merged branches have not destabilized LLVM.

Build LLVM

Build both debug and release versions of LLVM on all platforms. Ensure build is warning and error free on each platform.

Run 'make check'

Run make check and ensure there are no unexpected failures. If there are, resolve the failures and go back to step 2. Ensure that 'make check' passes on all platforms for all targets. If certain failures cannot be resolved before release time, determine if marking them XFAIL is appropriate. If not, fix the bug and go back. The test suite must complete with "0 unexpected failures" for release.

LLVM Test Suite

Run the llvm-test suite and ensure there are no unacceptable failures. If there are, resolve the failures and go back to step 2. The test suite should be run in Nightly Test mode. All tests must pass. If they do not, investigate and go back to settling CVS HEAD.

Make LibDeps.txt

Rebuild the LibDeps.txt target in utils/llvm-config. This makes sure that the llvm-config utility remains relevant for the release, reflecting any changes in the library dependencies.

CVS Tag And Branch

Tag and branch the CVS HEAD using the following procedure:

  1. Request all developers to refrain from committing. Offenders get commit rights taken away (temporarily).
  2. Tag the cvs HEAD with "ROOT_RELEASE_XX" where XX is the major and minor release numbers (you can't have . in a cvs tag name). So, for Release 1.2, XX=12 and for Release 1.10, XX=110.
  3. Immediately create a cvs branch based on the ROOT_RELEASE tag. This is where the release distribution will be created.
  4. Advise developers they can work on CVS HEAD again.
  5. Ensure all subsequent building and fixing is done on this branch.
Run 'make dist'

Build the distribution, ensuring it is installable and working. This is a two step process. First, use "make dist" to simply build the distribution. Any failures need to be corrected (on the branch). Once "make dist" can be successful, do "make dist-check". This target will do the same thing as the 'dist' target but also test that distribution to make sure it works. This ensures that needed files are not missing and that the src tarball can be successfully unbacked, built, installed, and cleaned. This two-level testing needs to be done on each target platform.

Release

Release the distribution tarball to the public. This consists of generating several tarballs. The first set, the source distributions, are automatically generated by the "make dist" and "make dist-check". There are gzip, bzip2, and zip versions of these bundles.

The second set of tarballs is the binary release. When "make dist-check" succeeds, it will have created an _install directory into which it installed the binary release. You need to rename that directory as "llvm" and then create tarballs from the contents of that "llvm" directory.

Finally, use rpm to make an rpm package based on the llvm.spec file. Don't forget to update the version number, documentation, etc. in the llvm.spec file.


Valid CSS! Valid HTML 4.01! Reid Spencer
The LLVM Compiler Infrastructure
Last modified: $Date$