:local:
:depth: 1
-.. sectionauthor:: Tanya Lattner <tonic@nondot.org>,
- Reid Spencer <rspencer@x10sys.com>,
- John Criswell <criswell@cs.uiuc.edu> and
- Bill Wendling <wendling@apple.com>
-
Introduction
============
is the Release Manager's responsibility to ensure that a high quality build of
LLVM is released.
+If you're looking for the document on how to test the release candidates and
+create the binary packages, please refer to the :doc:`ReleaseProcess` instead.
+
.. _timeline:
Release Timeline
================
-LLVM is released on a time based schedule --- roughly every 6 months. We do
-not normally have dot releases because of the nature of LLVM's incremental
-development philosophy. That said, the only thing preventing dot releases for
-critical bug fixes from happening is a lack of resources --- testers,
-machines, time, etc. And, because of the high quality we desire for LLVM
-releases, we cannot allow for a truncated form of release qualification.
+LLVM is released on a time based schedule --- with major releases roughly
+every 6 months. In between major releases there may be dot releases.
+The release manager will determine if and when to make a dot release based
+on feedback from the community. Typically, dot releases should be made if
+there are large number of bug-fixes in the stable branch or a critical bug
+has been discovered that affects a large number of users.
+
+Unless otherwise stated, dot releases will follow the same procedure as
+major releases.
The release process is roughly as follows:
* Finally, release!
+The release process will be accelerated for dot releases. If the first round
+of testing finds no critical bugs and no regressions since the last major release,
+then additional rounds of testing will not be required.
+
Release Process
===============
* Creating the release branch,
* Setting version numbers, and
-
+
* Tagging release candidates for the release team to begin testing.
Create Release Branch
``dragonegg`` from the last known good revision. The branch's name is
``release_XY``, where ``X`` is the major and ``Y`` the minor release
numbers. The branches should be created using the following commands:
-
+
::
-
+
$ svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
https://llvm.org/svn/llvm-project/llvm/branches/release_XY
-
+
$ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \
https://llvm.org/svn/llvm-project/cfe/branches/release_XY
-
+
$ svn copy https://llvm.org/svn/llvm-project/dragonegg/trunk \
https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY
-
+
$ svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \
https://llvm.org/svn/llvm-project/test-suite/branches/release_XY
tree again.
#. The Release Manager should switch to the release branch, because all changes
- to the release will now be done in the branch. The easiest way to do this is
+ to the release will now be done in the branch. The easiest way to do this is
to grab a working copy using the following commands:
::
-
+
$ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y
-
+
$ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y
-
+
$ svn co https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY dragonegg-X.Y
-
+
$ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y
Update LLVM Version
::
- $ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY
+ $ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XYZ
$ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \
- https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1
-
- $ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY
+ https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XYZ/rc1
+
+ $ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XYZ
$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
- https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1
+ https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XYZ/rc1
- $ svn mkdir https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY
+ $ svn mkdir https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XYZ
$ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \
- https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/rc1
+ https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XYZ/rc1
- $ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY
+ $ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XYZ
$ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \
- https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1
+ https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XYZ/rc1
Similarly, **Release Candidate 2** would be named ``RC2`` and so on. This keeps
a permanent copy of the release candidate around for people to export and build
-as they wish. The final released sources will be tagged in the ``RELEASE_XY``
+as they wish. The final released sources will be tagged in the ``RELEASE_XYZ``
directory as ``Final`` (c.f. :ref:`tag`).
The Release Manager may supply pre-packaged source tarballs for users. This can
::
- $ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1 llvm-X.Yrc1
- $ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1 clang-X.Yrc1
- $ svn export https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/rc1 dragonegg-X.Yrc1
- $ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1 llvm-test-X.Yrc1
-
+ $ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XYZ/rc1 llvm-X.Yrc1
+ $ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XYZ/rc1 clang-X.Yrc1
+ $ svn export https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XYZ/rc1 dragonegg-X.Yrc1
+ $ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XYZ/rc1 llvm-test-X.Yrc1
+
$ tar -cvf - llvm-X.Yrc1 | gzip > llvm-X.Yrc1.src.tar.gz
$ tar -cvf - clang-X.Yrc1 | gzip > clang-X.Yrc1.src.tar.gz
$ tar -cvf - dragonegg-X.Yrc1 | gzip > dragonegg-X.Yrc1.src.tar.gz
Build ``Debug``, ``Release+Asserts``, and ``Release`` versions
of ``llvm`` on all supported platforms. Directions to build ``llvm``
-are :ref:`here <getting_started>`.
+are :doc:`here <GettingStarted>`.
Build Clang Binary Distribution
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+--------------+---------------+----------------------+
| x86-64 | FreeBSD | gcc 4.2.X |
+--------------+---------------+----------------------+
+| ARMv7 | Linux | gcc 4.6.X, gcc 4.7.X |
++--------------+---------------+----------------------+
Release Qualification Criteria
------------------------------
Qualify Clang
^^^^^^^^^^^^^
-``Clang`` is qualified when front-end specific tests in the ``llvm`` dejagnu
+``Clang`` is qualified when front-end specific tests in the ``llvm`` regression
test suite all pass, clang's own test suite passes cleanly, and there are no
regressions in the ``test-suite``.
+--------------+-------------+----------------+-----------------------------+
| Architecture | OS | clang baseline | tests |
+==============+=============+================+=============================+
-| x86-32 | Linux | last release | llvm dejagnu, |
-| | | | clang tests, |
+| x86-32 | Linux | last release | llvm regression tests, |
+| | | | clang regression tests, |
| | | | test-suite (including spec) |
+--------------+-------------+----------------+-----------------------------+
-| x86-32 | FreeBSD | last release | llvm dejagnu, |
-| | | | clang tests, |
+| x86-32 | FreeBSD | last release | llvm regression tests, |
+| | | | clang regression tests, |
| | | | test-suite |
+--------------+-------------+----------------+-----------------------------+
| x86-32 | mingw | none | QT |
+--------------+-------------+----------------+-----------------------------+
-| x86-64 | Mac OS 10.X | last release | llvm dejagnu, |
-| | | | clang tests, |
+| x86-64 | Mac OS 10.X | last release | llvm regression tests, |
+| | | | clang regression tests, |
| | | | test-suite (including spec) |
+--------------+-------------+----------------+-----------------------------+
-| x86-64 | Linux | last release | llvm dejagnu, |
-| | | | clang tests, |
+| x86-64 | Linux | last release | llvm regression tests, |
+| | | | clang regression tests, |
| | | | test-suite (including spec) |
+--------------+-------------+----------------+-----------------------------+
-| x86-64 | FreeBSD | last release | llvm dejagnu, |
-| | | | clang tests, |
+| x86-64 | FreeBSD | last release | llvm regression tests, |
+| | | | clang regression tests, |
+| | | | test-suite |
++--------------+-------------+----------------+-----------------------------+
+| ARMv7A | Linux | last release | llvm regression tests, |
+| | | | clang regression tests, |
| | | | test-suite |
+--------------+-------------+----------------+-----------------------------+
The results are not used to qualify a release, but to spot other potential
problems. For unsupported targets, verify that ``make check`` is at least
clean.
-
+
During the first round of testing, all regressions must be fixed before the
second release candidate is tagged.
-
+
If this is the second round of testing, the testing is only to ensure that bug
fixes previously merged in have not created new major problems. *This is not
the time to solve additional and unrelated bugs!* If no patches are merged in,
#. During the remaining rounds of testing, only patches that fix critical
regressions may be applied.
+#. For dot releases all patches must mantain both API and ABI compatibility with
+ the previous major release. Only bugfixes will be accepted.
+
Release Final Tasks
-------------------
::
$ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \
- https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/Final
-
+ https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XYZ/Final
+
$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
- https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/Final
-
+ https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XYZ/Final
+
$ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \
- https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/Final
-
+ https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XYZ/Final
+
$ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \
- https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/Final
+ https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XYZ/Final
Update the LLVM Demo Page
-------------------------