Fix srcdir <> objdir builds with ocaml 2.10. Downrev versions don't care whether
[oota-llvm.git] / docs / HowToReleaseLLVM.html
1 <!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>
12 <ol>
13   <li><a href="#introduction">Introduction</a></li>
14   <li><a href="#process">Release Process</a></li>
15   <li><a href="#dist_targets">Distribution Targets</a></li>
16 </ol>
17 <div class="doc_author">
18   <p>Written by <a href="mailto:rspencer@x10sys.com">Reid Spencer</a>,
19   <a href="mailto:criswell@cs.uiuc.edu">John Criswell</a></p>
20 </div>
21
22 <!-- *********************************************************************** -->
23 <div class="doc_section"><a name="introduction">Introduction</a></div>
24 <!-- *********************************************************************** -->
25
26 <div class="doc_text">
27   <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>
34
35   <p>
36   There are three main tasks for building a release of LLVM:
37   </p>
38
39   <ol>
40     <li>Create the LLVM source distribution.</li>
41     <li>Create the LLVM GCC source distribtuion.</li>
42     <li>Create a set of LLVM GCC binary distribtuions for each supported
43         platform.  These binary distributions must include compiled versions
44         of the libraries found in <tt>llvm/runtime</tt> from the LLVM
45         source distribution created in Step 1.</li>
46   </ol>
47 </div>
48
49 <!-- *********************************************************************** -->
50 <div class="doc_section"><a name="process">Release Process</a></div>
51 <!-- *********************************************************************** -->
52
53 <!-- ======================================================================= -->
54 <div class="doc_subsection"><a name="overview">Process Overview</a></div>
55 <div class="doc_text">
56   <ol>
57     <li><a href="#updocs">Update Documentation</a></li>
58     <li><a href="#merge">Merge Branches</a></li>
59     <li><a href="#deps">Make LibDeps.txt</a></li>
60     <li><a href="#settle">Settle LLVM HEAD</a></li>
61     <li><a href="#tag">Tag LLVM and Create the Release Branch</a></li>
62     <li><a href="#verchanges">Update LLVM Version </a></li>
63     <li><a href="#build">Build LLVM</a></li>
64     <li><a href="#check">Run 'make check'</a></li>
65     <li><a href="#test">Run LLVM Test Suite</a></li>
66     <li><a href="#dist">Build the LLVM Source Distributions</a></li>
67     <li><a href="#rpm">Build RPM Packages (optional)</a></li>
68     <li><a href="#llvmgccbin">Build the LLVM GCC Binary Distribution</a></li>
69     <li><a href="#webupdates">Update the LLVM Website</a></li>
70   </ol>
71 </div>
72
73 <!-- ======================================================================= -->
74 <div class="doc_subsection"><a name="updocs">Update Documentation</a></div>
75 <div class="doc_text">
76   <p>
77   Review the documentation and ensure that it is up to date.  The Release Notes
78   must be updated to reflect bug fixes, new known issues, and changes in the
79   list of supported platforms.  The Getting Started Guide should be updated to
80   reflect the new release version number tag avaiable from Subversion and
81   changes in basic system requirements.
82   </p>
83 </div>
84
85 <!-- ======================================================================= -->
86 <div class="doc_subsection"><a name="merge">Merge Branches</a></div>
87 <div class="doc_text">
88   <p>
89   Merge any work done on branches intended for release into mainline. Finish and
90   commit all new features or bug fixes that are scheduled to go into the
91   release.  Work that is not to be incorporated into the release should not be
92   merged from branchs or commited from developer's working directories.
93   </p>
94
95   <p>
96   From this point until the release branch is created, developers should
97   <em>not</em> commit changes to the <tt>llvm</tt> and <tt>llvm-gcc</tt>
98   Subversion repositories unless it is a bug fix <em>for the release</em>.
99   </p>
100 </div>
101
102 <!-- ======================================================================= -->
103 <div class="doc_subsection"><a name="deps">Make LibDeps.txt</a></div>
104 <div class="doc_text">
105   <p>
106   Rebuild the <tt>LibDeps.txt</tt> target in <tt>utils/llvm-config</tt>. This
107   makes sure that the <tt>llvm-config</tt> utility remains relevant for the
108   release, reflecting any changes in the library dependencies.
109   </p>
110 </div>
111
112 <!-- ======================================================================= -->
113 <div class="doc_subsection"><a name="settle">Settle Subversion HEAD</a></div>
114 <div class="doc_text">
115   <p>
116   Use the nightly test reports and 'make check' (deja-gnu based tests) to 
117   ensure that recent changes and merged branches have not destabilized LLVM.
118   Platforms which are used less often should be given special attention as they
119   are the most likely to break from commits from the previous step.
120   </p>
121 </div>
122
123 <!-- ======================================================================= -->
124 <div class="doc_subsection"><a name="tag">Subversion Tag And Branch</a></div>
125 <div class="doc_text">
126   <p>Tag and branch the Subversion HEAD using the following procedure:</p>
127   <ol>
128     <li>
129     <p>Request all developers to refrain from committing. Offenders get commit
130     rights taken away (temporarily).</p></li>
131
132     <li>
133     <p>The Release Manager updates his/her <tt>llvm</tt>, <tt>llvm-test</tt>,
134     and <tt>llvm-gcc</tt> source trees with the latest sources from mainline
135     Subversion.  The Release Manager may want to consider using a new working
136     directory for this to keep current uncommitted work separate from release
137     work.</p></li>
138
139     <li>
140     <p>The Release Manager tags his/her <tt>llvm</tt>, <tt>llvm-test</tt>, and
141     <tt>llvm-gcc</tt> working directories with "<tt>RELEASE_XX</tt>" where
142     <tt>XX</tt> is the major and minor release numbers. So, for Release 1.2,
143     <tt>XX=12</tt> and for Release 1.10, <tt>XX=110</tt>.</p>
144
145 <div class="doc_code">
146 <pre>
147 svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
148          https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XX</i>
149 svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.0/trunk \
150          https://llvm.org/svn/llvm-project/llvm-gcc-4.0/tags/RELEASE_<i>XX</i>
151 svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \
152          https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XX</i>
153 </pre>
154 </div>
155     </li>
156
157     <li>
158     <p>Immediately create Subversion branches based on the
159     <tt>RELEASE_<i>XX</i></tt> tag. The tag should be
160     "<tt>release_<i>XX</i></tt>" (where XX matches that used for the
161     <tt>RELEASE_<i>XX</i></tt> tag).  This is where the release distribution
162     will be created.</p>
163
164 <div class="doc_code">
165 <pre>
166 svn copy https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XX</i> \
167          https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i>
168 svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.0/tags/RELEASE_<i>XX</i> \
169          https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i>
170 svn copy https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XX</i> \
171          https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i>
172 </pre>
173 </div>
174     </li>
175
176     <li>
177     <p>Advise developers they can work on Subversion HEAD again.</p></li>
178
179     <li>
180     <p>The Release Manager and any developers working on the release should switch
181     to the release branch (as all changes to the release will now be done in
182     the branch).  The easiest way to do this is to grab another working copy
183     using the following commands:</p>
184
185 <div class="doc_code">
186 <pre>
187 svn co https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i>
188 svn co https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i>
189 svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i>
190 </pre>
191 </div></li>
192   </ol>
193 </div>
194
195 <!-- ======================================================================= -->
196 <div class="doc_subsection"><a name="verchanges">Update LLVM Version</a></div>
197 <div class="doc_text">
198   <p>
199   After creating the LLVM release branch, update the release branchs'
200   autoconf/configure.ac version from X.Xsvn to just X.X. Update it on mainline
201   as well to be the next version (X.X+1svn).
202   </p>
203 </div>
204
205 <!-- ======================================================================= -->
206 <div class="doc_subsection"><a name="build">Build LLVM</a></div>
207 <div class="doc_text">
208   <p>
209   Build both debug and release (optimized) versions of LLVM on all
210   platforms. Ensure the build is warning and error free on each platform.
211   </p>
212
213   <p>
214   Build a new version of the LLVM GCC front-end after building the LLVM tools.
215   Once that is complete, go back to the LLVM source tree and build and install
216   the <tt>llvm/runtime</tt> libraries.
217   </p>
218 </div>
219
220 <!-- ======================================================================= -->
221 <div class="doc_subsection"><a name="check">Run 'make check'</a></div>
222 <div class="doc_text">
223   <p>
224   Run <tt>make check</tt> and ensure there are no unexpected failures. If there
225   are, resolve the failures, commit them back into the release branch, and
226   restart testing by <a href="#build">re-building LLVM</a>.
227   </p>
228
229   <p>
230   Ensure that '<tt>make check</tt>' passes on all platforms for all targets. If
231   certain failures cannot be resolved before release time, determine if marking
232   them <tt>XFAIL</tt> is appropriate. If not, fix the bug and go back. The test
233   suite must complete with "0 unexpected failures" for release.
234   </p>
235 </div>
236
237 <!-- ======================================================================= -->
238 <div class="doc_subsection"><a name="test">LLVM Test Suite</a></div>
239 <div class="doc_text">
240   <p>
241   Run the <tt>llvm-test</tt> suite and ensure there are no unacceptable
242   failures.  If there are, resolve the failures and go back to <a
243   href="#build">re-building LLVM</a>. The test suite should be run in Nightly
244   Test mode. All tests must pass.
245   </p>
246 </div>
247
248 <!-- ======================================================================= -->
249 <div class="doc_subsection"><a name="dist">Build the LLVM Source Distributions</a></div>
250 <div class="doc_text">
251   <p>
252   Create source distributions for LLVM, LLVM GCC, and the LLVM Test Suite by
253   exporting the source from Subversion and archiving it.  This can be done with
254   the following commands:
255   </p>
256
257 <div class="doc_code">
258 <pre>
259 svn export https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i> llvm
260 svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i> llvm-gcc
261 svn export https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i> llvm-test
262 mkdir cfrontend; mv llvm-gcc cfrontend/src
263 tar -cvf - llvm          | gzip &gt; llvm-X.X.tar.gz
264 tar -cvf - llvm-test     | gzip &gt; llvm-test-X.X.tar.gz
265 tar -cvf - cfrontend/src | gzip &gt; cfrontend-X.X.source.tar.gz
266 </pre>
267 </div>
268 </div>
269
270 <!-- ======================================================================= -->
271 <div class="doc_subsection"><a name="rpm">Building RPM packages (optional)</a></div>
272 <div class="doc_text">
273   <p>
274   You can, optionally, create source and binary RPM packages for LLVM. These may
275   make it easier to get LLVM into a distribution. This can be done with the
276   following commands:
277   </p>
278
279 <div class="doc_code">
280 <pre>
281 make dist        # Build the distribution source tarball
282 make dist-check  # Check that the source tarball can build itself.
283 cp llvm-M.m.tar.gz /usr/src/redhat/SOURCES  # Required by rpmbuild
284 make srpm # for source rpm
285 make rpm  # for binary rpm
286 </pre>
287 </div>
288
289   <p>
290   First, use <tt>make dist</tt> to simply build the distribution. Any failures
291   need to be corrected (on the branch). Once <tt>make dist</tt> can be
292   successful, do <tt>make dist-check</tt>. This target will do the same thing as
293   the 'dist' target but also test that distribution to make sure it can build
294   itself and runs <tt>make check</tt> as well. This ensures that needed files
295   are not missing and that the src tarball can be successfully unpacked, built,
296   installed, and cleaned. Once you have a reliable tarball, you need to copy it
297   to the <tt>/usr/src/redhat/SOURCES</tt> directory which is a requirement of
298   the rpmbuild tool. The last two <tt>make</tt> invocations just run rpmbuild to
299   build either a source (<tt>srpm</tt>) or binary (<tt>rpm</tt>) RPM package.
300   </p>
301 </div>
302
303 <!-- ======================================================================= -->
304 <div class="doc_subsection"><a name="llvmgccbin">Build the LLVM GCC Binary Distribution</a></div>
305 <div class="doc_text">
306   <p>
307   Creating the LLVM GCC binary distribution requires performing the following
308   steps for each supported platform:
309   </p>
310
311   <ol>
312     <li>
313     Build the LLVM GCC front-end.  The LLVM GCC front-end must be installed in
314     a directory named <tt>cfrontend/&lt;platform&gt;/llvm-gcc</tt>.  For
315     example, the Sparc/Solaris directory is named
316     <tt>cfrontend/sparc/llvm-gcc</tt>.
317     </li>
318
319     <li>
320     Build the libraries in <tt>llvm/runtime</tt> and install them into the 
321     created LLVM GCC installation directory.
322     </li>
323
324     <li>
325     For systems with non-distributable header files (e.g. Solaris), manually
326     remove header files that the GCC build process has "fixed."  This process
327     is admittedly painful, but not as bad as it looks; these header files are
328     almost always easily identifiable with simple grep expressions and are
329     installed in only a few directories in the GCC installation directory.
330     </li>
331
332     <li>
333     Add the copyright files and header file fix script.
334     </li>
335
336     <li>
337     Archive and compress the installation directory.  These can be found in
338     previous releases of the LLVM-GCC front-end.
339     </li>
340   </ol>
341 </div>
342
343
344 <!-- ======================================================================= -->
345 <div class="doc_subsection"><a name="webupdates">Update the LLVM Website</a></div>
346 <div class="doc_text">
347   <p>
348   Check out the <tt>website</tt> module from Subversion. Create a new
349   subdirectory X.X in the releases directory. Place the <tt>llvm</tt>,
350   <tt>llvm-test</tt>, <tt>llvm-gcc</tt> source, and <tt>llvm-gcc</tt> binaries
351   in this new directory. Copy the <tt>llvm/docs</tt> and <tt>LICENSE.txt</tt>
352   files into this new directory. Update the <tt>releases/download.html</tt> file
353   with the new release.  Update the <tt>releases/index.html</tt> with the new
354   release. Finally, update the main page (<tt>index.html</tt> and sidebar) to
355   point to the new release and release announcement. Make sure this all gets
356   commited back into Subversion.
357   </p>
358 </div>
359
360 <!--
361 <div class="doc_subsection"><a name="release">Release</a></div>
362 <div class="doc_text">
363   <p>Release the distribution tarball to the public. This consists of generating
364   several tarballs. The first set, the source distributions, are automatically
365   generated by the "make dist" and "make dist-check". There are gzip, bzip2, and
366   zip versions of these bundles.</p>
367   <p>The second set of tarballs is the binary release. When "make dist-check"
368   succeeds, it will have created an _install directory into which it installed
369   the binary release. You need to rename that directory as "llvm" and then
370   create tarballs from the contents of that "llvm" directory.</p>
371   <p>Finally, use rpm to make an rpm package based on the llvm.spec file. Don't
372   forget to update the version number, documentation, etc. in the llvm.spec
373   file.</p>
374 </div>
375 -->
376
377 <!-- *********************************************************************** -->
378 <div class="doc_section"><a name="dist_targets">Distribution Targets</a></div>
379 <!-- *********************************************************************** -->
380
381 <!-- ======================================================================= -->
382 <div class="doc_subsection">Overview</div>
383 <div class="doc_text">
384   <p>
385   The first thing you need to understand is that there are multiple make targets
386   to support this feature. Here's an overview, we'll delve into the details
387   later.
388   </p>
389
390   <ul>
391     <li><b>distdir</b> - builds the distribution directory from which the 
392         distribution will be packaged</li>
393     <li><b>dist</b> - builds each of the distribution tarballs (tar.gz, 
394         tar.bzip2, .zip). These can be built individually as well, with separate
395         targets.</li>
396     <li><b>dist-check</b> - this is identical to <tt>dist</tt> but includes a
397         check on the distribution that ensures the tarball can: unpack
398          successfully, compile correctly, pass '<tt>make check</tt>', and pass
399          '<tt>make clean</tt>'.</li>
400     <li><b>dist-clean</b>- this just does a normal clean but also cleans up the
401         stuff generated by the other three <tt>dist</tt> targets (above).</li>
402   </ul>
403
404   <p>
405   Okay, that's the basic functionality. When making a release, we want to ensure
406   that the tree you build the distribution from passes
407   <tt>dist-check</tt>. Beyond fixing the usual bugs, there is generally one
408   impediment to making the release in this fashion: missing files. The
409   <tt>dist-check</tt> process guards against that possibility. It will either
410   fail and that failure will indicate what's missing, or it will succeed meaning
411   that it has proved that the tarballs can actually succeed in building LLVM
412   correctly and that it passes <tt>make check</tt>.
413   </p>
414 </div>
415
416 <!-- ======================================================================= -->
417
418 <div class="doc_subsection">distdir</div>
419 <div class="doc_text">
420   <p>
421   This target builds the distribution directory which is the directory from 
422   which the tarballs are generated. The distribution directory has the same 
423   name as the release, e.g. LLVM-1.7). This target goes through the following 
424   process:
425   </p>
426
427   <ol>
428     <li>First, if there was an old distribution directory (for the current 
429         release), it is removed in its entirety and you see <tt>Removing old 
430         LLVM-1.7</tt></li>
431     <li>Second, it issues a <tt>make all ENABLE_OPTIMIZED=3D1</tt> to ensure 
432         that the everything in your tree can be built in release mode. Often
433         times there are discrepancies in building between debug and release
434         modes so it enforces release mode first. If that fails, the
435         <tt>distdir</tt> target fails too. This is preceded by the message
436         <tt>Making 'all' to verify build</tt>.</li>
437     <li>Next, it traverses your source tree and copies it to a new directory 
438         that has the name of the release (<tt>LLVM-M.m</tt> in our current
439         case). This is the directory that will get tar'd. It contains all the
440         software that needs to be in the distribution. During the copying
441         process, it omits generated files, SVN directories, and any other
442         "cruft" that's in your build tree. This is done to eliminate the
443         possibility of huge distribution tarballs that include useless or
444         irrelevant stuff in them. This is the trickiest part of making the
445         distribution. Done manually you will either include stuff that
446         shouldn't be in the distribution or exclude stuff that should. This
447         step is preceded by the message <tt>Building Distribution Directory
448         LLVM-1.7</tt></li>
449     <li>The distribution directory is then traversed and all <tt>CVS</tt> or 
450         <tt>.svn</tt> directories are removed. You see: <tt>Eliminating CVS/.svn
451         directories from distribution</tt></li>
452     <li>The recursive <tt>dist-hook</tt> target is executed. This gives each 
453         directory a chance to modify the distribution in some way (more on this 
454         below).</li>
455     <li>The distribution directory is traversed and the correct file
456         permissions and modes are set based on the type of file.</li>
457   </ol>
458
459   <p>
460   To control the process of making the distribution directory correctly, each
461   Makefile can utilize two features:
462   </p>
463
464   <ol>
465     <li><b><tt>EXTRA_DIST</tt></B> - this make variable specifies which files 
466         it should distribute. By default, all source files are automatically 
467         included for distribution as well as certain <tt>well known</tt> files 
468         (see DistAlways variable in Makefile.rules for details). Each Makefile 
469         specifies, via the <tt>EXTRA_DIST</tt> variable, which additional files 
470         need to be distributed. Only those files that are needed to build LLVM 
471         should be added to <tt>EXTRA_DIST</tt>. <tt>EXTRA_DIST</tt> contains a 
472         list of file or directory names that should be distributed. For example, 
473         the top level Makefile contains <tt>EXTRA_DIST := test llvm.spec
474         include</tt>. This means that in addition to regular things that are
475         distributed at the top level (<tt>CREDITS.txt, LICENSE.txt</tt>, etc.)
476         the distribution should contain the entire <tt>test</tt> and
477         <tt>include</tt> directories as well as the <tt>llvm.spec</tt> file.</li>
478     <li><b><tt>dist-hook</tt></B> - this make target can be used to alter the 
479         content of the distribution directory. For example, in the top level 
480         Makefile there is some logic to eliminate files in the <tt>include</tt> 
481         subtree that are generated by the configure script. These should not be 
482         distributed. Similarly, any <tt>dist-hook</tt> target found in any 
483         directory can add or remove or modify things just before it gets
484         packaged. Any transformation is permitted. Generally, not much is
485         needed.</li>
486   </ol>
487
488   <p>
489   You will see various messages if things go wrong:
490   </p>
491
492   <ol>
493     <li>During the copying process, any files that are missing will be flagged 
494         with: <tt>===== WARNING: Distribution Source 'dir/file' Not Found!</tt>
495         These must be corrected by either adding the file or removing it from 
496         <tt>EXTRA_DIST</tt>.</li>
497     <li>If you build the distribution with <tt>VERBOSE=1</tt>, then you might 
498         also see: <tt>Skipping non-existent 'dir/file'</tt> in certain cases
499         where it's okay to skip the file.</li>
500     <li>The target can fail if any of the things it does fail. Error messages 
501         should indicate what went wrong.</li>
502   </ol>
503 </div>
504
505 <!-- ======================================================================= -->
506 <div class="doc_subsection">dist</div>
507 <div class="doc_text">
508   <p>
509   This target does exactly what <tt>distdir</tt> target does, but also includes
510   assembling the tarballs. There are actually four related targets here:
511   </p>
512
513   <ul>
514     <li><b><tt>dist-gzip</tt></b>: package the gzipped distribution tar 
515         file. The distribution directory is packaged into a single file ending
516         in <tt>.tar.gz</tt> which is gzip compressed.</li>
517     <li><b><tt>dist-bzip2</tt></b>: package the bzip2 distribution tar file. 
518         The distribution directory is packaged into a single file ending in 
519         <tt>.tar.bzip2</tt> which is bzip2 compressed.</li>
520     <li><b><tt>dist-zip</tt></b>: package the zip distribution file. The 
521         distribution directory is packaged into a single file ending in 
522         <tt>.zip</tt> which is zip compressed.</li>
523     <li><b><tt>dist</tt></b>: does all three, dist-gzip, dist-bzip2,
524         dist-zip</li>
525   </ul>
526 </div>
527
528 <!-- ======================================================================= -->
529 <div class="doc_subsection">dist-check</div>
530 <div class="doc_text">
531   <p>
532   This target checks the distribution. The basic idea is that it unpacks the 
533   distribution tarball and ensures that it can build. It takes the following 
534   actions:
535   </p>
536
537   <ol>
538     <li>It depends on the <tt>dist-gzip</tt> target which, if it hasn't already 
539         been built, builds the gzip tar bundle (see dist and distdir
540         above).</li>
541     <li>removes any pre-existing <tt>_distcheckdir</tt> at the top level.</li>
542     <li>creates a new <tt>_distcheckdir</tt> directory at the top level.</li>
543     <li>creates a <tt>build</tt> subdirectory and an <tt>install</tt> 
544         subdirectory under <tt>_distcheckdir</tt>.</li>
545     <li>unzips and untars the release tarball into <tt>_distcheckdir</tt>, 
546         creating <tt>LLVM-1.7</tt> directory (from the tarball).</li>
547     <li>in the build subdirectory, it configures with appropriate options to
548         build from the unpacked source tarball into the <tt>build</tt> directory
549         with installation in the <tt>install</tt> directory.</li>
550     <li>runs <tt>make all</tt></li>
551     <li>runs <tt>make </tt><tt>check</tt></li>
552     <li>runs <tt>make install</tt></li>
553     <li>runs <tt>make uninstall</tt></li>
554     <li>runs <tt>make dist</tt></li>
555     <li>runs <tt>make clean</tt></li>
556     <li>runs <tt>make dist-clean</tt></li>
557   </ol>
558
559   <p>
560   If it can pass all that, the distribution will be deemed distribution worth y
561   and you will see:
562   </p>
563
564   <pre>===== LLVM-1.7.tar.gz Ready For Distribution =====</pre>
565
566   <p>
567   This means the tarball should then be tested on other platforms and have the
568   nightly test run against it. If those all pass, THEN it is ready for
569   distribution.
570   </p>
571  
572   <p>
573   A note about disk space: using <tt>dist-check</tt> will easily triple the
574   amount of disk space your build tree is using. You might want to check
575   available space before you begin.
576   </p>
577 </div>
578
579 <!-- ======================================================================= -->
580 <div class="doc_subsection">dist-clean</div>
581 <div class="doc_text">
582   <p>
583   In addition to doing a normal <tt>clean</tt>, this target will clean up the
584   files and directories created by the distribution targets. In particular the
585   distribution directory (<tt>LLVM-X.X</tt>), check directory
586   (<tt>_distcheckdir</tt>), and the various tarballs will be removed. You do
587   this after the release has shipped and you no longer need this stuff in your
588   build tree.
589   </p>
590 </div>
591
592 <!-- *********************************************************************** -->
593 <hr>
594 <address>
595   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
596   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
597   <a href="http://validator.w3.org/check/referer"><img
598   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
599
600   <a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
601   <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
602   <br/>
603   Last modified: $Date$
604 </address>
605 </body>
606 </html>