1*9880d681SAndroid Build Coastguard Worker================================= 2*9880d681SAndroid Build Coastguard WorkerHow To Release LLVM To The Public 3*9880d681SAndroid Build Coastguard Worker================================= 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker.. contents:: 6*9880d681SAndroid Build Coastguard Worker :local: 7*9880d681SAndroid Build Coastguard Worker :depth: 1 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard WorkerIntroduction 10*9880d681SAndroid Build Coastguard Worker============ 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard WorkerThis document contains information about successfully releasing LLVM --- 13*9880d681SAndroid Build Coastguard Workerincluding subprojects: e.g., ``clang`` and ``dragonegg`` --- to the public. It 14*9880d681SAndroid Build Coastguard Workeris the Release Manager's responsibility to ensure that a high quality build of 15*9880d681SAndroid Build Coastguard WorkerLLVM is released. 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard WorkerIf you're looking for the document on how to test the release candidates and 18*9880d681SAndroid Build Coastguard Workercreate the binary packages, please refer to the :doc:`ReleaseProcess` instead. 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker.. _timeline: 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard WorkerRelease Timeline 23*9880d681SAndroid Build Coastguard Worker================ 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard WorkerLLVM is released on a time based schedule --- with major releases roughly 26*9880d681SAndroid Build Coastguard Workerevery 6 months. In between major releases there may be dot releases. 27*9880d681SAndroid Build Coastguard WorkerThe release manager will determine if and when to make a dot release based 28*9880d681SAndroid Build Coastguard Workeron feedback from the community. Typically, dot releases should be made if 29*9880d681SAndroid Build Coastguard Workerthere are large number of bug-fixes in the stable branch or a critical bug 30*9880d681SAndroid Build Coastguard Workerhas been discovered that affects a large number of users. 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard WorkerUnless otherwise stated, dot releases will follow the same procedure as 33*9880d681SAndroid Build Coastguard Workermajor releases. 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard WorkerThe release process is roughly as follows: 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker* Set code freeze and branch creation date for 6 months after last code freeze 38*9880d681SAndroid Build Coastguard Worker date. Announce release schedule to the LLVM community and update the website. 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker* Create release branch and begin release process. 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker* Send out release candidate sources for first round of testing. Testing lasts 43*9880d681SAndroid Build Coastguard Worker 7-10 days. During the first round of testing, any regressions found should be 44*9880d681SAndroid Build Coastguard Worker fixed. Patches are merged from mainline into the release branch. Also, all 45*9880d681SAndroid Build Coastguard Worker features need to be completed during this time. Any features not completed at 46*9880d681SAndroid Build Coastguard Worker the end of the first round of testing will be removed or disabled for the 47*9880d681SAndroid Build Coastguard Worker release. 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker* Generate and send out the second release candidate sources. Only *critial* 50*9880d681SAndroid Build Coastguard Worker bugs found during this testing phase will be fixed. Any bugs introduced by 51*9880d681SAndroid Build Coastguard Worker merged patches will be fixed. If so a third round of testing is needed. 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker* The release notes are updated. 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker* Finally, release! 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard WorkerThe release process will be accelerated for dot releases. If the first round 58*9880d681SAndroid Build Coastguard Workerof testing finds no critical bugs and no regressions since the last major release, 59*9880d681SAndroid Build Coastguard Workerthen additional rounds of testing will not be required. 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard WorkerRelease Process 62*9880d681SAndroid Build Coastguard Worker=============== 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker.. contents:: 65*9880d681SAndroid Build Coastguard Worker :local: 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard WorkerRelease Administrative Tasks 68*9880d681SAndroid Build Coastguard Worker---------------------------- 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard WorkerThis section describes a few administrative tasks that need to be done for the 71*9880d681SAndroid Build Coastguard Workerrelease process to begin. Specifically, it involves: 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker* Creating the release branch, 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker* Setting version numbers, and 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker* Tagging release candidates for the release team to begin testing. 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard WorkerCreate Release Branch 80*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^ 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard WorkerBranch the Subversion trunk using the following procedure: 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker#. Remind developers that the release branching is imminent and to refrain from 85*9880d681SAndroid Build Coastguard Worker committing patches that might break the build. E.g., new features, large 86*9880d681SAndroid Build Coastguard Worker patches for works in progress, an overhaul of the type system, an exciting 87*9880d681SAndroid Build Coastguard Worker new TableGen feature, etc. 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker#. Verify that the current Subversion trunk is in decent shape by 90*9880d681SAndroid Build Coastguard Worker examining nightly tester and buildbot results. 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker#. Create the release branch for ``llvm``, ``clang``, the ``test-suite``, and 93*9880d681SAndroid Build Coastguard Worker ``dragonegg`` from the last known good revision. The branch's name is 94*9880d681SAndroid Build Coastguard Worker ``release_XY``, where ``X`` is the major and ``Y`` the minor release 95*9880d681SAndroid Build Coastguard Worker numbers. The branches should be created using the following commands: 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker :: 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker $ svn copy https://llvm.org/svn/llvm-project/llvm/trunk \ 100*9880d681SAndroid Build Coastguard Worker https://llvm.org/svn/llvm-project/llvm/branches/release_XY 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker $ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \ 103*9880d681SAndroid Build Coastguard Worker https://llvm.org/svn/llvm-project/cfe/branches/release_XY 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker $ svn copy https://llvm.org/svn/llvm-project/dragonegg/trunk \ 106*9880d681SAndroid Build Coastguard Worker https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker $ svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \ 109*9880d681SAndroid Build Coastguard Worker https://llvm.org/svn/llvm-project/test-suite/branches/release_XY 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker#. Advise developers that they may now check their patches into the Subversion 112*9880d681SAndroid Build Coastguard Worker tree again. 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker#. The Release Manager should switch to the release branch, because all changes 115*9880d681SAndroid Build Coastguard Worker to the release will now be done in the branch. The easiest way to do this is 116*9880d681SAndroid Build Coastguard Worker to grab a working copy using the following commands: 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker :: 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_XY llvm-X.Y 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker $ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_XY clang-X.Y 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker $ svn co https://llvm.org/svn/llvm-project/dragonegg/branches/release_XY dragonegg-X.Y 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker $ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_XY test-suite-X.Y 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard WorkerUpdate LLVM Version 129*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^ 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard WorkerAfter creating the LLVM release branch, update the release branches' 132*9880d681SAndroid Build Coastguard Worker``autoconf`` and ``configure.ac`` versions from '``X.Ysvn``' to '``X.Y``'. 133*9880d681SAndroid Build Coastguard WorkerUpdate it on mainline as well to be the next version ('``X.Y+1svn``'). 134*9880d681SAndroid Build Coastguard WorkerRegenerate the configure scripts for both ``llvm`` and the ``test-suite``. 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard WorkerIn addition, the version numbers of all the Bugzilla components must be updated 137*9880d681SAndroid Build Coastguard Workerfor the next release. 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard WorkerTagging the LLVM Release Candidates 140*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard WorkerTag release candidates using the tag.sh script in utils/release. 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker:: 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker $ ./tag.sh -release X.Y.Z -rc $RC 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard WorkerThe Release Manager may supply pre-packaged source tarballs for users. This can 149*9880d681SAndroid Build Coastguard Workerbe done with the export.sh script in utils/release. 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker:: 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker $ ./export.sh -release X.Y.Z -rc $RC 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard WorkerThis will generate source tarballs for each LLVM project being validated, which 156*9880d681SAndroid Build Coastguard Workercan be uploaded to the website for further testing. 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard WorkerBuilding the Release 159*9880d681SAndroid Build Coastguard Worker-------------------- 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard WorkerThe builds of ``llvm``, ``clang``, and ``dragonegg`` *must* be free of 162*9880d681SAndroid Build Coastguard Workererrors and warnings in Debug, Release+Asserts, and Release builds. If all 163*9880d681SAndroid Build Coastguard Workerbuilds are clean, then the release passes Build Qualification. 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard WorkerThe ``make`` options for building the different modes: 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker+-----------------+---------------------------------------------+ 168*9880d681SAndroid Build Coastguard Worker| Mode | Options | 169*9880d681SAndroid Build Coastguard Worker+=================+=============================================+ 170*9880d681SAndroid Build Coastguard Worker| Debug | ``ENABLE_OPTIMIZED=0`` | 171*9880d681SAndroid Build Coastguard Worker+-----------------+---------------------------------------------+ 172*9880d681SAndroid Build Coastguard Worker| Release+Asserts | ``ENABLE_OPTIMIZED=1`` | 173*9880d681SAndroid Build Coastguard Worker+-----------------+---------------------------------------------+ 174*9880d681SAndroid Build Coastguard Worker| Release | ``ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1`` | 175*9880d681SAndroid Build Coastguard Worker+-----------------+---------------------------------------------+ 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard WorkerBuild LLVM 178*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^ 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard WorkerBuild ``Debug``, ``Release+Asserts``, and ``Release`` versions 181*9880d681SAndroid Build Coastguard Workerof ``llvm`` on all supported platforms. Directions to build ``llvm`` 182*9880d681SAndroid Build Coastguard Workerare :doc:`here <GettingStarted>`. 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard WorkerBuild Clang Binary Distribution 185*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard WorkerCreating the ``clang`` binary distribution (Debug/Release+Asserts/Release) 188*9880d681SAndroid Build Coastguard Workerrequires performing the following steps for each supported platform: 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker#. Build clang according to the directions `here 191*9880d681SAndroid Build Coastguard Worker <http://clang.llvm.org/get_started.html>`__. 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker#. Build both a Debug and Release version of clang. The binary will be the 194*9880d681SAndroid Build Coastguard Worker Release build. 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker#. Package ``clang`` (details to follow). 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard WorkerTarget Specific Build Details 199*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard WorkerThe table below specifies which compilers are used for each Arch/OS combination 202*9880d681SAndroid Build Coastguard Workerwhen qualifying the build of ``llvm``, ``clang``, and ``dragonegg``. 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 205*9880d681SAndroid Build Coastguard Worker| Architecture | OS | compiler | 206*9880d681SAndroid Build Coastguard Worker+==============+===============+======================+ 207*9880d681SAndroid Build Coastguard Worker| x86-32 | Mac OS 10.5 | gcc 4.0.1 | 208*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 209*9880d681SAndroid Build Coastguard Worker| x86-32 | Linux | gcc 4.2.X, gcc 4.3.X | 210*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 211*9880d681SAndroid Build Coastguard Worker| x86-32 | FreeBSD | gcc 4.2.X | 212*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 213*9880d681SAndroid Build Coastguard Worker| x86-32 | mingw | gcc 3.4.5 | 214*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 215*9880d681SAndroid Build Coastguard Worker| x86-64 | Mac OS 10.5 | gcc 4.0.1 | 216*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 217*9880d681SAndroid Build Coastguard Worker| x86-64 | Linux | gcc 4.2.X, gcc 4.3.X | 218*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 219*9880d681SAndroid Build Coastguard Worker| x86-64 | FreeBSD | gcc 4.2.X | 220*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 221*9880d681SAndroid Build Coastguard Worker| ARMv7 | Linux | gcc 4.6.X, gcc 4.7.X | 222*9880d681SAndroid Build Coastguard Worker+--------------+---------------+----------------------+ 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard WorkerRelease Qualification Criteria 225*9880d681SAndroid Build Coastguard Worker------------------------------ 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard WorkerA release is qualified when it has no regressions from the previous release (or 228*9880d681SAndroid Build Coastguard Workerbaseline). Regressions are related to correctness first and performance second. 229*9880d681SAndroid Build Coastguard Worker(We may tolerate some minor performance regressions if they are deemed 230*9880d681SAndroid Build Coastguard Workernecessary for the general quality of the compiler.) 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker**Regressions are new failures in the set of tests that are used to qualify 233*9880d681SAndroid Build Coastguard Workereach product and only include things on the list. Every release will have 234*9880d681SAndroid Build Coastguard Workersome bugs in it. It is the reality of developing a complex piece of 235*9880d681SAndroid Build Coastguard Workersoftware. We need a very concrete and definitive release criteria that 236*9880d681SAndroid Build Coastguard Workerensures we have monotonically improving quality on some metric. The metric we 237*9880d681SAndroid Build Coastguard Workeruse is described below. This doesn't mean that we don't care about other 238*9880d681SAndroid Build Coastguard Workercriteria, but these are the criteria which we found to be most important and 239*9880d681SAndroid Build Coastguard Workerwhich must be satisfied before a release can go out.** 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard WorkerQualify LLVM 242*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^ 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard WorkerLLVM is qualified when it has a clean test run without a front-end. And it has 245*9880d681SAndroid Build Coastguard Workerno regressions when using either ``clang`` or ``dragonegg`` with the 246*9880d681SAndroid Build Coastguard Worker``test-suite`` from the previous release. 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard WorkerQualify Clang 249*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^ 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker``Clang`` is qualified when front-end specific tests in the ``llvm`` regression 252*9880d681SAndroid Build Coastguard Workertest suite all pass, clang's own test suite passes cleanly, and there are no 253*9880d681SAndroid Build Coastguard Workerregressions in the ``test-suite``. 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard WorkerSpecific Target Qualification Details 256*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 259*9880d681SAndroid Build Coastguard Worker| Architecture | OS | clang baseline | tests | 260*9880d681SAndroid Build Coastguard Worker+==============+=============+================+=============================+ 261*9880d681SAndroid Build Coastguard Worker| x86-32 | Linux | last release | llvm regression tests, | 262*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 263*9880d681SAndroid Build Coastguard Worker| | | | test-suite (including spec) | 264*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 265*9880d681SAndroid Build Coastguard Worker| x86-32 | FreeBSD | last release | llvm regression tests, | 266*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 267*9880d681SAndroid Build Coastguard Worker| | | | test-suite | 268*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 269*9880d681SAndroid Build Coastguard Worker| x86-32 | mingw | none | QT | 270*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 271*9880d681SAndroid Build Coastguard Worker| x86-64 | Mac OS 10.X | last release | llvm regression tests, | 272*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 273*9880d681SAndroid Build Coastguard Worker| | | | test-suite (including spec) | 274*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 275*9880d681SAndroid Build Coastguard Worker| x86-64 | Linux | last release | llvm regression tests, | 276*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 277*9880d681SAndroid Build Coastguard Worker| | | | test-suite (including spec) | 278*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 279*9880d681SAndroid Build Coastguard Worker| x86-64 | FreeBSD | last release | llvm regression tests, | 280*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 281*9880d681SAndroid Build Coastguard Worker| | | | test-suite | 282*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 283*9880d681SAndroid Build Coastguard Worker| ARMv7A | Linux | last release | llvm regression tests, | 284*9880d681SAndroid Build Coastguard Worker| | | | clang regression tests, | 285*9880d681SAndroid Build Coastguard Worker| | | | test-suite | 286*9880d681SAndroid Build Coastguard Worker+--------------+-------------+----------------+-----------------------------+ 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard WorkerCommunity Testing 289*9880d681SAndroid Build Coastguard Worker----------------- 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard WorkerOnce all testing has been completed and appropriate bugs filed, the release 292*9880d681SAndroid Build Coastguard Workercandidate tarballs are put on the website and the LLVM community is notified. 293*9880d681SAndroid Build Coastguard WorkerAsk that all LLVM developers test the release in 2 ways: 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Worker#. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the appropriate ``clang`` 296*9880d681SAndroid Build Coastguard Worker binary. Build LLVM. Run ``make check`` and the full LLVM test suite (``make 297*9880d681SAndroid Build Coastguard Worker TEST=nightly report``). 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker#. Download ``llvm-X.Y``, ``llvm-test-X.Y``, and the ``clang`` sources. Compile 300*9880d681SAndroid Build Coastguard Worker everything. Run ``make check`` and the full LLVM test suite (``make 301*9880d681SAndroid Build Coastguard Worker TEST=nightly report``). 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard WorkerAsk LLVM developers to submit the test suite report and ``make check`` results 304*9880d681SAndroid Build Coastguard Workerto the list. Verify that there are no regressions from the previous release. 305*9880d681SAndroid Build Coastguard WorkerThe results are not used to qualify a release, but to spot other potential 306*9880d681SAndroid Build Coastguard Workerproblems. For unsupported targets, verify that ``make check`` is at least 307*9880d681SAndroid Build Coastguard Workerclean. 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard WorkerDuring the first round of testing, all regressions must be fixed before the 310*9880d681SAndroid Build Coastguard Workersecond release candidate is tagged. 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard WorkerIf this is the second round of testing, the testing is only to ensure that bug 313*9880d681SAndroid Build Coastguard Workerfixes previously merged in have not created new major problems. *This is not 314*9880d681SAndroid Build Coastguard Workerthe time to solve additional and unrelated bugs!* If no patches are merged in, 315*9880d681SAndroid Build Coastguard Workerthe release is determined to be ready and the release manager may move onto the 316*9880d681SAndroid Build Coastguard Workernext stage. 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard WorkerRelease Patch Rules 319*9880d681SAndroid Build Coastguard Worker------------------- 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard WorkerBelow are the rules regarding patching the release branch: 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Worker#. Patches applied to the release branch may only be applied by the release 324*9880d681SAndroid Build Coastguard Worker manager. 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Worker#. During the first round of testing, patches that fix regressions or that are 327*9880d681SAndroid Build Coastguard Worker small and relatively risk free (verified by the appropriate code owner) are 328*9880d681SAndroid Build Coastguard Worker applied to the branch. Code owners are asked to be very conservative in 329*9880d681SAndroid Build Coastguard Worker approving patches for the branch. We reserve the right to reject any patch 330*9880d681SAndroid Build Coastguard Worker that does not fix a regression as previously defined. 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Worker#. During the remaining rounds of testing, only patches that fix critical 333*9880d681SAndroid Build Coastguard Worker regressions may be applied. 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Worker#. For dot releases all patches must maintain both API and ABI compatibility with 336*9880d681SAndroid Build Coastguard Worker the previous major release. Only bugfixes will be accepted. 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard WorkerMerging Patches 339*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^ 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard WorkerThe ``utils/release/merge.sh`` script can be used to merge individual revisions 342*9880d681SAndroid Build Coastguard Workerinto any one of the llvm projects. To merge revision ``$N`` into project 343*9880d681SAndroid Build Coastguard Worker``$PROJ``, do: 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Worker#. ``svn co https://llvm.org/svn/llvm-project/$PROJ/branches/release_XX 346*9880d681SAndroid Build Coastguard Worker $PROJ.src`` 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker#. ``$PROJ.src/utils/release/merge.sh --proj $PROJ --rev $N`` 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Worker#. Run regression tests. 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker#. ``cd $PROJ.src``. Run the ``svn commit`` command printed out by ``merge.sh`` 353*9880d681SAndroid Build Coastguard Worker in step 2. 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard WorkerRelease Final Tasks 356*9880d681SAndroid Build Coastguard Worker------------------- 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard WorkerThe final stages of the release process involves tagging the "final" release 359*9880d681SAndroid Build Coastguard Workerbranch, updating documentation that refers to the release, and updating the 360*9880d681SAndroid Build Coastguard Workerdemo page. 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard WorkerUpdate Documentation 363*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^ 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard WorkerReview the documentation and ensure that it is up to date. The "Release Notes" 366*9880d681SAndroid Build Coastguard Workermust be updated to reflect new features, bug fixes, new known issues, and 367*9880d681SAndroid Build Coastguard Workerchanges in the list of supported platforms. The "Getting Started Guide" should 368*9880d681SAndroid Build Coastguard Workerbe updated to reflect the new release version number tag available from 369*9880d681SAndroid Build Coastguard WorkerSubversion and changes in basic system requirements. Merge both changes from 370*9880d681SAndroid Build Coastguard Workermainline into the release branch. 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Worker.. _tag: 373*9880d681SAndroid Build Coastguard Worker 374*9880d681SAndroid Build Coastguard WorkerTag the LLVM Final Release 375*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^ 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard WorkerTag the final release sources using the tag.sh script in utils/release. 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker:: 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Worker $ ./tag.sh -release X.Y.Z -final 382*9880d681SAndroid Build Coastguard Worker 383*9880d681SAndroid Build Coastguard WorkerUpdate the LLVM Demo Page 384*9880d681SAndroid Build Coastguard Worker------------------------- 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard WorkerThe LLVM demo page must be updated to use the new release. This consists of 387*9880d681SAndroid Build Coastguard Workerusing the new ``clang`` binary and building LLVM. 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard WorkerUpdate the LLVM Website 390*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^ 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard WorkerThe website must be updated before the release announcement is sent out. Here 393*9880d681SAndroid Build Coastguard Workeris what to do: 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Worker#. Check out the ``www`` module from Subversion. 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Worker#. Create a new subdirectory ``X.Y`` in the releases directory. 398*9880d681SAndroid Build Coastguard Worker 399*9880d681SAndroid Build Coastguard Worker#. Commit the ``llvm``, ``test-suite``, ``clang`` source, ``clang binaries``, 400*9880d681SAndroid Build Coastguard Worker ``dragonegg`` source, and ``dragonegg`` binaries in this new directory. 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Worker#. Copy and commit the ``llvm/docs`` and ``LICENSE.txt`` files into this new 403*9880d681SAndroid Build Coastguard Worker directory. The docs should be built with ``BUILD_FOR_WEBSITE=1``. 404*9880d681SAndroid Build Coastguard Worker 405*9880d681SAndroid Build Coastguard Worker#. Commit the ``index.html`` to the ``release/X.Y`` directory to redirect (use 406*9880d681SAndroid Build Coastguard Worker from previous release). 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Worker#. Update the ``releases/download.html`` file with the new release. 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Worker#. Update the ``releases/index.html`` with the new release and link to release 411*9880d681SAndroid Build Coastguard Worker documentation. 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Worker#. Finally, update the main page (``index.html`` and sidebar) to point to the 414*9880d681SAndroid Build Coastguard Worker new release and release announcement. Make sure this all gets committed back 415*9880d681SAndroid Build Coastguard Worker into Subversion. 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard WorkerAnnounce the Release 418*9880d681SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^ 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard WorkerHave Chris send out the release announcement when everything is finished. 421*9880d681SAndroid Build Coastguard Worker 422