X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FHowToReleaseLLVM.rst;h=33c547e97a8890921364d9daabdf82d23e4200cb;hb=63147bd1173c5b0fff6eb9f2c1a2babf6ebd56d1;hp=b75e2a8f82187d69cf357d75783de2b804b7fffb;hpb=76d182f7c2a99e2a75d9d0a49117e10f91868d73;p=oota-llvm.git diff --git a/docs/HowToReleaseLLVM.rst b/docs/HowToReleaseLLVM.rst index b75e2a8f821..33c547e97a8 100644 --- a/docs/HowToReleaseLLVM.rst +++ b/docs/HowToReleaseLLVM.rst @@ -6,11 +6,6 @@ How To Release LLVM To The Public :local: :depth: 1 -.. sectionauthor:: Tanya Lattner , - Reid Spencer , - John Criswell and - Bill Wendling - Introduction ============ @@ -19,17 +14,23 @@ including subprojects: e.g., ``clang`` and ``dragonegg`` --- to the public. It 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: @@ -53,6 +54,10 @@ 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 =============== @@ -68,7 +73,7 @@ release process to begin. Specifically, it involves: * Creating the release branch, * Setting version numbers, and - + * Tagging release candidates for the release team to begin testing. Create Release Branch @@ -88,18 +93,18 @@ Branch the Subversion trunk using the following procedure: ``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 @@ -107,17 +112,17 @@ Branch the Subversion trunk using the following procedure: 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 @@ -131,51 +136,24 @@ Regenerate the configure scripts for both ``llvm`` and the ``test-suite``. In addition, the version numbers of all the Bugzilla components must be updated for the next release. -Build the LLVM Release Candidates -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Tagging the LLVM Release Candidates +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Create release candidates for ``llvm``, ``clang``, ``dragonegg``, and the LLVM -``test-suite`` by tagging the branch with the respective release candidate -number. For instance, to create **Release Candidate 1** you would issue the -following commands: +Tag release candidates using the tag.sh script in utils/release. :: - $ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY - $ 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 - $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \ - https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1 - - $ svn mkdir https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY - $ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \ - https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/rc1 - - $ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY - $ 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 - -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`` -directory as ``Final`` (c.f. :ref:`tag`). + $ ./tag.sh -release X.Y.Z -rc $RC The Release Manager may supply pre-packaged source tarballs for users. This can -be done with the following commands: +be done with the export.sh script in utils/release. :: - $ 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 - - $ 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 - $ tar -cvf - llvm-test-X.Yrc1 | gzip > llvm-test-X.Yrc1.src.tar.gz + $ ./export.sh -release X.Y.Z -rc $RC + +This will generate source tarballs for each LLVM project being validated, which +can be uploaded to the website for further testing. Building the Release -------------------- @@ -201,7 +179,7 @@ Build LLVM Build ``Debug``, ``Release+Asserts``, and ``Release`` versions of ``llvm`` on all supported platforms. Directions to build ``llvm`` -are :ref:`here `. +are :doc:`here `. Build Clang Binary Distribution ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -240,6 +218,8 @@ when qualifying the build of ``llvm``, ``clang``, and ``dragonegg``. +--------------+---------------+----------------------+ | x86-64 | FreeBSD | gcc 4.2.X | +--------------+---------------+----------------------+ +| ARMv7 | Linux | gcc 4.6.X, gcc 4.7.X | ++--------------+---------------+----------------------+ Release Qualification Criteria ------------------------------ @@ -268,7 +248,7 @@ no regressions when using either ``clang`` or ``dragonegg`` with the 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``. @@ -278,26 +258,30 @@ Specific Target Qualification Details +--------------+-------------+----------------+-----------------------------+ | 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 | +--------------+-------------+----------------+-----------------------------+ @@ -321,10 +305,10 @@ to the list. Verify that there are no regressions from the previous release. 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, @@ -348,6 +332,9 @@ Below are the rules regarding patching the release branch: #. 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 ------------------- @@ -370,21 +357,11 @@ mainline into the release branch. Tag the LLVM Final Release ^^^^^^^^^^^^^^^^^^^^^^^^^^ -Tag the final release sources using the following procedure: +Tag the final release sources using the tag.sh script in utils/release. :: - $ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \ - https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/Final - - $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \ - https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/Final - - $ svn copy https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY \ - https://llvm.org/svn/llvm-project/dragonegg/tags/RELEASE_XY/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 + $ ./tag.sh -release X.Y.Z -final Update the LLVM Demo Page -------------------------