xref: /aosp_15_r20/external/llvm/docs/HowToReleaseLLVM.rst (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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