blob: 41d3d57fb6571aaec309f2d4666db15b265efd3e [file] [log] [blame]
Reid Spencercf427e82006-03-23 06:45:42 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5 <title>How To Release LLVM To The Public</title>
6 <link rel="stylesheet" href="llvm.css" type="text/css">
7</head>
8<body>
9
10<div class="doc_title">How To Release LLVM To The Public</div>
11<p class="doc_warning">NOTE: THIS DOCUMENT IS A WORK IN PROGRESS!</p>
Reid Spencercf427e82006-03-23 06:45:42 +000012<ol>
13 <li><a href="#introduction">Introduction</a></li>
Misha Brukman8ebd7f92006-04-10 21:43:05 +000014 <li><a href="#process">Release Process</a></li>
Reid Spencer852239c2006-04-11 22:02:18 +000015 <li><a href="#dist_targets">Distribution Targets</a></li>
Reid Spencercf427e82006-03-23 06:45:42 +000016</ol>
17<div class="doc_author">
Reid Spencer2425e4c2006-04-11 21:59:37 +000018 <p>Written by <a href="mailto:rspencer@x10sys.com">Reid Spencer</a>,
19 <a href="mailto:criswell@cs.uiuc.edu">John Criswell</a></p>
Reid Spencercf427e82006-03-23 06:45:42 +000020</div>
21
22<!-- *********************************************************************** -->
23<div class="doc_section"><a name="introduction">Introduction</a></div>
24<!-- *********************************************************************** -->
25
26<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +000027 <p>
28 This document collects information about successfully releasing LLVM to the
29 public. It is the release manager's guide to ensuring that a high quality
30 build of LLVM is released. Mostly, it's just a bunch of reminders of things to
31 do at release time so we don't inadvertently ship something that is utility
32 deficient.
33 </p>
John Criswellfe48c802006-04-11 20:24:28 +000034
Bill Wendling462fc8a2007-07-23 04:41:42 +000035 <p>
36 There are three main tasks for building a release of LLVM:
37 <ol>
38 <li>Create the LLVM source distribution.</li>
39 <li>Create the LLVM GCC source distribtuion.</li>
40 <li>Create a set of LLVM GCC binary distribtuions for each supported
41 platform. These binary distributions must include compiled versions
42 of the libraries found in <tt>llvm/runtime</tt> from the LLVM
43 source distribution created in Step 1.</li>
44 </ol>
45 </p>
Reid Spencercf427e82006-03-23 06:45:42 +000046</div>
47
48<!-- *********************************************************************** -->
49<div class="doc_section"><a name="process">Release Process</a></div>
50<!-- *********************************************************************** -->
51
52<!-- ======================================================================= -->
53<div class="doc_subsection"><a name="overview">Process Overview</a></div>
54<div class="doc_text">
55 <ol>
John Criswellfe48c802006-04-11 20:24:28 +000056 <li><a href="#updocs">Update Documentation</a></li>
Misha Brukman8ebd7f92006-04-10 21:43:05 +000057 <li><a href="#merge">Merge Branches</a></li>
John Criswellfe48c802006-04-11 20:24:28 +000058 <li><a href="#deps">Make LibDeps.txt</a></li>
Reid Spencer1a2e1102006-04-11 06:21:25 +000059 <li><a href="#settle">Settle LLVM HEAD</a></li>
John Criswellfe48c802006-04-11 20:24:28 +000060 <li><a href="#tag">Tag LLVM and Create the Release Branch</a></li>
Tanya Lattner9ceece52006-08-10 00:23:05 +000061 <li><a href="#verchanges">Update LLVM Version </a></li>
Misha Brukman8ebd7f92006-04-10 21:43:05 +000062 <li><a href="#build">Build LLVM</a></li>
63 <li><a href="#check">Run 'make check'</a></li>
64 <li><a href="#test">Run LLVM Test Suite</a></li>
John Criswellfe48c802006-04-11 20:24:28 +000065 <li><a href="#dist">Build the LLVM Source Distributions</a></li>
Reid Spencer103febe2006-08-16 00:54:50 +000066 <li><a href="#rpm">Build RPM Packages (optional)</a></li>
John Criswellfe48c802006-04-11 20:24:28 +000067 <li><a href="#llvmgccbin">Build the LLVM GCC Binary Distribution</a></li>
Tanya Lattner9ceece52006-08-10 00:23:05 +000068 <li><a href="#webupdates">Update the LLVM Website</a></li>
Reid Spencercf427e82006-03-23 06:45:42 +000069 </ol>
70</div>
71
72<!-- ======================================================================= -->
John Criswellfe48c802006-04-11 20:24:28 +000073<div class="doc_subsection"><a name="updocs">Update Documentation</a></div>
74<div class="doc_text">
75 <p>
76 Review the documentation and ensure that it is up to date. The Release Notes
77 must be updated to reflect bug fixes, new known issues, and changes in the
78 list of supported platforms. The Getting Started Guide should be updated to
Bill Wendling462fc8a2007-07-23 04:41:42 +000079 reflect the new release version number tag avaiable from Subversion and
80 changes in basic system requirements.
John Criswellfe48c802006-04-11 20:24:28 +000081 </p>
82</div>
83
84<!-- ======================================================================= -->
Reid Spencercf427e82006-03-23 06:45:42 +000085<div class="doc_subsection"><a name="merge">Merge Branches</a></div>
86<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +000087 <p>
88 Merge any work done on branches intended for release into mainline. Finish and
89 commit all new features or bug fixes that are scheduled to go into the
90 release. Work that is not to be incorporated into the release should not be
91 merged from branchs or commited from developer's working directories.
92 </p>
John Criswellfe48c802006-04-11 20:24:28 +000093
Bill Wendling462fc8a2007-07-23 04:41:42 +000094 <p>
95 From this point until the release branch is created, developers should
96 <em>not</em> commit changes to the <tt>llvm</tt> and <tt>llvm-gcc</tt>
97 Subversion repositories unless it is a bug fix <em>for the release</em>.
98 </p>
Reid Spencer1a2e1102006-04-11 06:21:25 +000099</div>
100
101<!-- ======================================================================= -->
John Criswellfe48c802006-04-11 20:24:28 +0000102<div class="doc_subsection"><a name="deps">Make LibDeps.txt</a></div>
103<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000104 <p>
105 Rebuild the <tt>LibDeps.txt</tt> target in <tt>utils/llvm-config</tt>. This
John Criswellfe48c802006-04-11 20:24:28 +0000106 makes sure that the <tt>llvm-config</tt> utility remains relevant for the
Bill Wendling462fc8a2007-07-23 04:41:42 +0000107 release, reflecting any changes in the library dependencies.
108 </p>
John Criswellfe48c802006-04-11 20:24:28 +0000109</div>
110
John Criswellfe48c802006-04-11 20:24:28 +0000111<!-- ======================================================================= -->
Bill Wendling462fc8a2007-07-23 04:41:42 +0000112<div class="doc_subsection"><a name="settle">Settle Subversion HEAD</a></div>
Reid Spencer1a2e1102006-04-11 06:21:25 +0000113<div class="doc_text">
John Criswellfe48c802006-04-11 20:24:28 +0000114 <p>
115 Use the nightly test reports and 'make check' (deja-gnu based tests) to
116 ensure that recent changes and merged branches have not destabilized LLVM.
117 Platforms which are used less often should be given special attention as they
118 are the most likely to break from commits from the previous step.
119 </p>
120</div>
121
122<!-- ======================================================================= -->
Bill Wendling462fc8a2007-07-23 04:41:42 +0000123<div class="doc_subsection"><a name="tag">Subversion Tag And Branch</a></div>
John Criswellfe48c802006-04-11 20:24:28 +0000124<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000125 <p>Tag and branch the Subversion HEAD using the following procedure:</p>
John Criswellfe48c802006-04-11 20:24:28 +0000126 <ol>
127 <li>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000128 <p>Request all developers to refrain from committing. Offenders get commit
129 rights taken away (temporarily).</p></li>
130
131 <li>
132 <p>The Release Manager updates his/her <tt>llvm</tt>, <tt>llvm-test</tt>,
133 and <tt>llvm-gcc</tt> source trees with the latest sources from mainline
134 Subversion. The Release Manager may want to consider using a new working
135 directory for this to keep current uncommitted work separate from release
136 work.</p></li>
137
138 <li>
139 <p>The Release Manager tags his/her <tt>llvm</tt>, <tt>llvm-test</tt>, and
140 <tt>llvm-gcc</tt> working directories with "<tt>RELEASE_XX</tt>" where
141 <tt>XX</tt> is the major and minor release numbers. So, for Release 1.2,
142 <tt>XX=12</tt> and for Release 1.10, <tt>XX=110</tt>.</p>
143
144<div class="doc_code">
145<pre>
146svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
147 https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XX</i>
148svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.0/trunk \
149 https://llvm.org/svn/llvm-project/llvm-gcc-4.0/tags/RELEASE_<i>XX</i>
150svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \
151 https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XX</i>
152</pre>
153</div>
John Criswellfe48c802006-04-11 20:24:28 +0000154 </li>
155
156 <li>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000157 <p>Immediately create Subversion branches based on the
158 <tt>RELEASE_<i>XX</i></tt> tag. The tag should be
159 "<tt>release_<i>XX</i></tt>" (where XX matches that used for the
160 <tt>RELEASE_<i>XX</i></tt> tag). This is where the release distribution
161 will be created.</p>
162
163<div class="doc_code">
164<pre>
165svn copy https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XX</i> \
166 https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i>
167svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.0/tags/RELEASE_<i>XX</i> \
168 https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i>
169svn copy https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XX</i> \
170 https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i>
171</pre>
172</div>
John Criswellfe48c802006-04-11 20:24:28 +0000173 </li>
174
175 <li>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000176 <p>Advise developers they can work on Subversion HEAD again.</p></li>
John Criswellfe48c802006-04-11 20:24:28 +0000177
178 <li>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000179 <p>The Release Manager and any developers working on the release should switch
John Criswellfe48c802006-04-11 20:24:28 +0000180 to the release branch (as all changes to the release will now be done in
181 the branch). The easiest way to do this is to grab another working copy
Bill Wendling462fc8a2007-07-23 04:41:42 +0000182 using the following commands:</p>
John Criswellfe48c802006-04-11 20:24:28 +0000183
Bill Wendling462fc8a2007-07-23 04:41:42 +0000184<div class="doc_code">
185<pre>
186svn co https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i>
187svn co https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i>
188svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i>
189</pre>
190</div>
John Criswellfe48c802006-04-11 20:24:28 +0000191 </li>
Reid Spencercf427e82006-03-23 06:45:42 +0000192</div>
193
194<!-- ======================================================================= -->
Tanya Lattner9ceece52006-08-10 00:23:05 +0000195<div class="doc_subsection"><a name="verchanges">Update LLVM Version</a></div>
196<div class="doc_text">
197 <p>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000198 After creating the LLVM release branch, update the release branchs'
199 autoconf/configure.ac version from X.Xsvn to just X.X. Update it on mainline
200 as well to be the next version (X.X+1svn).
Tanya Lattner9ceece52006-08-10 00:23:05 +0000201 </p>
Tanya Lattner9ceece52006-08-10 00:23:05 +0000202</div>
203
204<!-- ======================================================================= -->
Reid Spencercf427e82006-03-23 06:45:42 +0000205<div class="doc_subsection"><a name="build">Build LLVM</a></div>
206<div class="doc_text">
John Criswellfe48c802006-04-11 20:24:28 +0000207 <p>
208 Build both debug and release (optimized) versions of LLVM on all
209 platforms. Ensure the build is warning and error free on each platform.
210 </p>
211
212 <p>
213 Build a new version of the LLVM GCC front-end after building the LLVM tools.
214 Once that is complete, go back to the LLVM source tree and build and install
215 the <tt>llvm/runtime</tt> libraries.
216 </p>
Reid Spencercf427e82006-03-23 06:45:42 +0000217</div>
218
219<!-- ======================================================================= -->
220<div class="doc_subsection"><a name="check">Run 'make check'</a></div>
221<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000222 <p>
223 Run <tt>make check</tt> and ensure there are no unexpected failures. If there
224 are, resolve the failures, commit them back into the release branch, and
225 restart testing by <a href="#build">re-building LLVM</a>.
John Criswellfe48c802006-04-11 20:24:28 +0000226 </p>
227
228 <p>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000229 Ensure that '<tt>make check</tt>' passes on all platforms for all targets. If
230 certain failures cannot be resolved before release time, determine if marking
231 them <tt>XFAIL</tt> is appropriate. If not, fix the bug and go back. The test
232 suite must complete with "0 unexpected failures" for release.
Reid Spencer1a2e1102006-04-11 06:21:25 +0000233 </p>
Reid Spencercf427e82006-03-23 06:45:42 +0000234</div>
235
236<!-- ======================================================================= -->
237<div class="doc_subsection"><a name="test">LLVM Test Suite</a></div>
238<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000239 <p>
240 Run the <tt>llvm-test</tt> suite and ensure there are no unacceptable
241 failures. If there are, resolve the failures and go back to <a
242 href="#build">re-building LLVM</a>. The test suite should be run in Nightly
243 Test mode. All tests must pass.
244 </p>
Reid Spencercf427e82006-03-23 06:45:42 +0000245</div>
246
247<!-- ======================================================================= -->
John Criswellfe48c802006-04-11 20:24:28 +0000248<div class="doc_subsection"><a name="dist">Build the LLVM Source Distributions</a></div>
Reid Spencercf427e82006-03-23 06:45:42 +0000249<div class="doc_text">
John Criswellfe48c802006-04-11 20:24:28 +0000250 <p>
251 Create source distributions for LLVM, LLVM GCC, and the LLVM Test Suite by
Bill Wendling462fc8a2007-07-23 04:41:42 +0000252 exporting the source from Subversion and archiving it. This can be done with
253 the following commands:
John Criswellfe48c802006-04-11 20:24:28 +0000254 </p>
Reid Spencercf427e82006-03-23 06:45:42 +0000255
Bill Wendling462fc8a2007-07-23 04:41:42 +0000256<div class="doc_code">
257<pre>
258svn export https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i> llvm
259svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i> llvm-gcc
260svn export https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i> llvm-test
261mkdir cfrontend; mv llvm-gcc cfrontend/src
262tar -cvf - llvm | gzip &gt; llvm-X.X.tar.gz
263tar -cvf - llvm-test | gzip &gt; llvm-test-X.X.tar.gz
264tar -cvf - cfrontend/src | gzip &gt; cfrontend-X.X.source.tar.gz
265</pre>
266</div>
Reid Spencer103febe2006-08-16 00:54:50 +0000267</div>
Reid Spencercf427e82006-03-23 06:45:42 +0000268
Reid Spencer103febe2006-08-16 00:54:50 +0000269<!-- ======================================================================= -->
270<div class="doc_subsection"><a name="rpm">Building RPM packages (optional)</a></div>
271<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000272 <p>
273 You can, optionally, create source and binary RPM packages for LLVM. These may
274 make it easier to get LLVM into a distribution. This can be done with the
275 following commands:
276 </p>
277
278<div class="doc_code">
279<pre>
280make dist # Build the distribution source tarball
281make dist-check # Check that the source tarball can build itself.
282cp llvm-M.m.tar.gz /usr/src/redhat/SOURCES # Required by rpmbuild
283make srpm # for source rpm
284make rpm # for binary rpm
285</pre>
286</div>
287
288 <p>
289 First, use <tt>make dist</tt> to simply build the distribution. Any failures
290 need to be corrected (on the branch). Once <tt>make dist</tt> can be
291 successful, do <tt>make dist-check</tt>. This target will do the same thing as
292 the 'dist' target but also test that distribution to make sure it can build
293 itself and runs <tt>make check</tt> as well. This ensures that needed files
294 are not missing and that the src tarball can be successfully unpacked, built,
295 installed, and cleaned. Once you have a reliable tarball, you need to copy it
296 to the <tt>/usr/src/redhat/SOURCES</tt> directory which is a requirement of
297 the rpmbuild tool. The last two <tt>make</tt> invocations just run rpmbuild to
298 build either a source (<tt>srpm</tt>) or binary (<tt>rpm</tt>) RPM package.
299 </p>
Reid Spencercf427e82006-03-23 06:45:42 +0000300</div>
301
302<!-- ======================================================================= -->
John Criswellfe48c802006-04-11 20:24:28 +0000303<div class="doc_subsection"><a name="llvmgccbin">Build the LLVM GCC Binary Distribution</a></div>
304<div class="doc_text">
305 <p>
306 Creating the LLVM GCC binary distribution requires performing the following
307 steps for each supported platform:
308 </p>
309
310 <ol>
311 <li>
312 Build the LLVM GCC front-end. The LLVM GCC front-end must be installed in
313 a directory named <tt>cfrontend/&lt;platform&gt;/llvm-gcc</tt>. For
314 example, the Sparc/Solaris directory is named
315 <tt>cfrontend/sparc/llvm-gcc</tt>.
316 </li>
317
318 <li>
319 Build the libraries in <tt>llvm/runtime</tt> and install them into the
320 created LLVM GCC installation directory.
321 </li>
322
323 <li>
324 For systems with non-distributable header files (e.g. Solaris), manually
325 remove header files that the GCC build process has "fixed." This process
326 is admittedly painful, but not as bad as it looks; these header files are
327 almost always easily identifiable with simple grep expressions and are
328 installed in only a few directories in the GCC installation directory.
329 </li>
330
331 <li>
332 Add the copyright files and header file fix script.
333 </li>
334
335 <li>
336 Archive and compress the installation directory. These can be found in
337 previous releases of the LLVM-GCC front-end.
338 </li>
339 </ol>
340</div>
341
Tanya Lattner9ceece52006-08-10 00:23:05 +0000342
343<!-- ======================================================================= -->
344<div class="doc_subsection"><a name="webupdates">Update the LLVM Website</a></div>
345<div class="doc_text">
346 <p>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000347 Check out the <tt>website</tt> module from Subversion. Create a new
348 subdirectory X.X in the releases directory. Place the <tt>llvm</tt>,
349 <tt>llvm-test</tt>, <tt>llvm-gcc</tt> source, and <tt>llvm-gcc</tt> binaries
350 in this new directory. Copy the <tt>llvm/docs</tt> and <tt>LICENSE.txt</tt>
351 files into this new directory. Update the <tt>releases/download.html</tt> file
352 with the new release. Update the <tt>releases/index.html</tt> with the new
353 release. Finally, update the main page (<tt>index.html</tt> and sidebar) to
354 point to the new release and release announcement. Make sure this all gets
355 commited back into Subversion.
Tanya Lattner9ceece52006-08-10 00:23:05 +0000356 </p>
357</div>
358
John Criswellfe48c802006-04-11 20:24:28 +0000359<!--
Reid Spencercf427e82006-03-23 06:45:42 +0000360<div class="doc_subsection"><a name="release">Release</a></div>
361<div class="doc_text">
Reid Spencer1a2e1102006-04-11 06:21:25 +0000362 <p>Release the distribution tarball to the public. This consists of generating
363 several tarballs. The first set, the source distributions, are automatically
364 generated by the "make dist" and "make dist-check". There are gzip, bzip2, and
365 zip versions of these bundles.</p>
366 <p>The second set of tarballs is the binary release. When "make dist-check"
367 succeeds, it will have created an _install directory into which it installed
368 the binary release. You need to rename that directory as "llvm" and then
369 create tarballs from the contents of that "llvm" directory.</p>
370 <p>Finally, use rpm to make an rpm package based on the llvm.spec file. Don't
371 forget to update the version number, documentation, etc. in the llvm.spec
372 file.</p>
Reid Spencercf427e82006-03-23 06:45:42 +0000373</div>
John Criswellfe48c802006-04-11 20:24:28 +0000374-->
Reid Spencercf427e82006-03-23 06:45:42 +0000375
376<!-- *********************************************************************** -->
Reid Spencer852239c2006-04-11 22:02:18 +0000377<div class="doc_section"><a name="dist_targets">Distribution Targets</a></div>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000378<!-- *********************************************************************** -->
Bill Wendling462fc8a2007-07-23 04:41:42 +0000379
Reid Spencer2425e4c2006-04-11 21:59:37 +0000380<!-- ======================================================================= -->
381<div class="doc_subsection">Overview</div>
382<div class="doc_text">
Bill Wendling462fc8a2007-07-23 04:41:42 +0000383 <p>
384 The first thing you need to understand is that there are multiple make targets
385 to support this feature. Here's an overview, we'll delve into the details
386 later.
387 </p>
388
389 <ul>
390 <li><b>distdir</b> - builds the distribution directory from which the
391 distribution will be packaged</li>
392 <li><b>dist</b> - builds each of the distribution tarballs (tar.gz,
393 tar.bzip2, .zip). These can be built individually as well, with separate
394 targets.</li>
395 <li><b>dist-check</b> - this is identical to <tt>dist</tt> but includes a
396 check on the distribution that ensures the tarball can: unpack
397 successfully, compile correctly, pass '<tt>make check</tt>', and pass
398 '<tt>make clean</tt>'.</li>
399 <li><b>dist-clean</b>- this just does a normal clean but also cleans up the
400 stuff generated by the other three <tt>dist</tt> targets (above).</li>
401 </ul>
402
403 <p>
404 Okay, that's the basic functionality. When making a release, we want to ensure
405 that the tree you build the distribution from passes
406 <tt>dist-check</tt>. Beyond fixing the usual bugs, there is generally one
407 impediment to making the release in this fashion: missing files. The
408 <tt>dist-check</tt> process guards against that possibility. It will either
409 fail and that failure will indicate what's missing, or it will succeed meaning
410 that it has proved that the tarballs can actually succeed in building LLVM
411 correctly and that it passes <tt>make check</tt>.
412 </p>
413</div>
414
Reid Spencer2425e4c2006-04-11 21:59:37 +0000415<!-- ======================================================================= -->
Bill Wendling462fc8a2007-07-23 04:41:42 +0000416
Reid Spencer2425e4c2006-04-11 21:59:37 +0000417<div class="doc_subsection">distdir</div>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000418<div class="doc_text">
419 <p>
420 This target builds the distribution directory which is the directory from
421 which the tarballs are generated. The distribution directory has the same
422 name as the release, e.g. LLVM-1.7). This target goes through the following
423 process:
424 </p>
425
426 <ol>
427 <li>First, if there was an old distribution directory (for the current
428 release), it is removed in its entirety and you see <tt>Removing old
429 LLVM-1.7</tt></li>
430 <li>Second, it issues a <tt>make all ENABLE_OPTIMIZED=3D1</tt> to ensure
431 that the everything in your tree can be built in release mode. Often
432 times there are discrepancies in building between debug and release
433 modes so it enforces release mode first. If that fails, the
434 <tt>distdir</tt> target fails too. This is preceded by the message
435 <tt>Making 'all' to verify build</tt>.</li>
436 <li>Next, it traverses your source tree and copies it to a new directory
437 that has the name of the release (<tt>LLVM-M.m</tt> in our current
438 case). This is the directory that will get tar'd. It contains all the
439 software that needs to be in the distribution. During the copying
440 process, it omits generated files, CVS directories, and any other
441 "cruft" that's in your build tree. This is done to eliminate the
442 possibility of huge distribution tarballs that include useless or
443 irrelevant stuff in them. This is the trickiest part of making the
444 distribution. Done manually you will either include stuff that
445 shouldn't be in the distribution or exclude stuff that should. This
446 step is preceded by the message <tt>Building Distribution Directory
447 LLVM-1.7</tt></li>
448 <li>The distribution directory is then traversed and all <tt>CVS</tt> or
449 <tt>.svn</tt> directories are removed. You see: <tt>Eliminating CVS/.svn
450 directories from distribution</tt></li>
451 <li>The recursive <tt>dist-hook</tt> target is executed. This gives each
452 directory a chance to modify the distribution in some way (more on this
453 below).</li>
454 <li>The distribution directory is traversed and the correct file
455 permissions and modes are set based on the type of file.</li>
456 </ol>
457
458 <p>
459 To control the process of making the distribution directory correctly, each
460 Makefile can utilize two features:
461 </p>
462
463 <ol>
464 <li><b><tt>EXTRA_DIST</tt></B> - this make variable specifies which files
465 it should distribute. By default, all source files are automatically
466 included for distribution as well as certain <tt>well known</tt> files
467 (see DistAlways variable in Makefile.rules for details). Each Makefile
468 specifies, via the <tt>EXTRA_DIST</tt> variable, which additional files
469 need to be distributed. Only those files that are needed to build LLVM
470 should be added to <tt>EXTRA_DIST</tt>. <tt>EXTRA_DIST</tt> contains a
471 list of file or directory names that should be distributed. For example,
472 the top level Makefile contains <tt>EXTRA_DIST := test llvm.spec
473 include</tt>. This means that in addition to regular things that are
474 distributed at the top level (<tt>CREDITS.txt, LICENSE.txt</tt>, etc.)
475 the distribution should contain the entire <tt>test</tt> and
476 <tt>include</tt> directories as well as the <tt>llvm.spec</tt> file.</li>
477 <li><b><tt>dist-hook</tt></B> - this make target can be used to alter the
478 content of the distribution directory. For example, in the top level
479 Makefile there is some logic to eliminate files in the <tt>include</tt>
480 subtree that are generated by the configure script. These should not be
481 distributed. Similarly, any <tt>dist-hook</tt> target found in any
482 directory can add or remove or modify things just before it gets
483 packaged. Any transformation is permitted. Generally, not much is
484 needed.</li>
485 </ol>
486
487 <p>
488 You will see various messages if things go wrong:
489 </p>
490
491 <ol>
492 <li>During the copying process, any files that are missing will be flagged
493 with: <tt>===== WARNING: Distribution Source 'dir/file' Not Found!</tt>
494 These must be corrected by either adding the file or removing it from
495 <tt>EXTRA_DIST</tt>.</li>
496 <li>If you build the distribution with <tt>VERBOSE=1</tt>, then you might
497 also see: <tt>Skipping non-existent 'dir/file'</tt> in certain cases
498 where it's okay to skip the file.</li>
499 <li>The target can fail if any of the things it does fail. Error messages
500 should indicate what went wrong.</li>
501 </ol>
502</div>
503
Reid Spencer2425e4c2006-04-11 21:59:37 +0000504<!-- ======================================================================= -->
505<div class="doc_subsection">dist</div>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000506<div class="doc_text">
507 <p>
508 This target does exactly what <tt>distdir</tt> target does, but also includes
509 assembling the tarballs. There are actually four related targets here:
510 </p>
511
Reid Spencer2425e4c2006-04-11 21:59:37 +0000512 <ul>
513 <li><b><tt>dist-gzip</tt></b>: package the gzipped distribution tar
Bill Wendling462fc8a2007-07-23 04:41:42 +0000514 file. The distribution directory is packaged into a single file ending
515 in <tt>.tar.gz</tt> which is gzip compressed.</li>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000516 <li><b><tt>dist-bzip2</tt></b>: package the bzip2 distribution tar file.
Bill Wendling462fc8a2007-07-23 04:41:42 +0000517 The distribution directory is packaged into a single file ending in
518 <tt>.tar.bzip2</tt> which is bzip2 compressed.</li>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000519 <li><b><tt>dist-zip</tt></b>: package the zip distribution file. The
Bill Wendling462fc8a2007-07-23 04:41:42 +0000520 distribution directory is packaged into a single file ending in
521 <tt>.zip</tt> which is zip compressed.</li>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000522 <li><b><tt>dist</tt></b>: does all three, dist-gzip, dist-bzip2,
Bill Wendling462fc8a2007-07-23 04:41:42 +0000523 dist-zip</li>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000524 </ul>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000525</div>
526
Reid Spencer2425e4c2006-04-11 21:59:37 +0000527<!-- ======================================================================= -->
528<div class="doc_subsection">dist-check</div>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000529<div class="doc_text">
530 <p>
531 This target checks the distribution. The basic idea is that it unpacks the
532 distribution tarball and ensures that it can build. It takes the following
533 actions:
534 </p>
535
536 <ol>
537 <li>It depends on the <tt>dist-gzip</tt> target which, if it hasn't already
538 been built, builds the gzip tar bundle (see dist and distdir
539 above).</li>
540 <li>removes any pre-existing <tt>_distcheckdir</tt> at the top level.</li>
541 <li>creates a new <tt>_distcheckdir</tt> directory at the top level.</li>
542 <li>creates a <tt>build</tt> subdirectory and an <tt>install</tt>
543 subdirectory under <tt>_distcheckdir</tt>.</li>
544 <li>unzips and untars the release tarball into <tt>_distcheckdir</tt>,
545 creating <tt>LLVM-1.7</tt> directory (from the tarball).</li>
546 <li>in the build subdirectory, it configures with appropriate options to
547 build from the unpacked source tarball into the <tt>build</tt> directory
548 with installation in the <tt>install</tt> directory.</li>
549 <li>runs <tt>make all</tt></li>
550 <li>runs <tt>make </tt><tt>check</tt></li>
551 <li>runs <tt>make install</tt></li>
552 <li>runs <tt>make uninstall</tt></li>
553 <li>runs <tt>make dist</tt></li>
554 <li>runs <tt>make clean</tt></li>
555 <li>runs <tt>make dist-clean</tt></li>
556 </ol>
557
558 <p>
559 If it can pass all that, the distribution will be deemed distribution worth y
560 and you will see:
561 </p>
562
563 <pre>===== LLVM-1.7.tar.gz Ready For Distribution =====</pre>
564
565 <p>
566 This means the tarball should then be tested on other platforms and have the
567 nightly test run against it. If those all pass, THEN it is ready for
568 distribution.
569 </p>
570
571 <p>
572 A note about disk space: using <tt>dist-check</tt> will easily triple the
573 amount of disk space your build tree is using. You might want to check
574 available space before you begin.
575 </p>
576</div>
577
Reid Spencer2425e4c2006-04-11 21:59:37 +0000578<!-- ======================================================================= -->
579<div class="doc_subsection">dist-clean</div>
Bill Wendling462fc8a2007-07-23 04:41:42 +0000580<div class="doc_text">
581 <p>
582 In addition to doing a normal <tt>clean</tt>, this target will clean up the
583 files and directories created by the distribution targets. In particular the
584 distribution directory (<tt>LLVM-X.X</tt>), check directory
585 (<tt>_distcheckdir</tt>), and the various tarballs will be removed. You do
586 this after the release has shipped and you no longer need this stuff in your
587 build tree.
588 </p>
Reid Spencer2425e4c2006-04-11 21:59:37 +0000589</div>
590
591<!-- *********************************************************************** -->
Reid Spencercf427e82006-03-23 06:45:42 +0000592<hr>
593<address>
594 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
595 src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
596 <a href="http://validator.w3.org/check/referer"><img
597 src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
598
599 <a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
600 <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
601 <br/>
602 Last modified: $Date$
603</address>
604</body>
605</html>