Converted to "svn" and reformatted.
[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   <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>
46 </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>
56     <li><a href="#updocs">Update Documentation</a></li>
57     <li><a href="#merge">Merge Branches</a></li>
58     <li><a href="#deps">Make LibDeps.txt</a></li>
59     <li><a href="#settle">Settle LLVM HEAD</a></li>
60     <li><a href="#tag">Tag LLVM and Create the Release Branch</a></li>
61     <li><a href="#verchanges">Update LLVM Version </a></li>
62     <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>
65     <li><a href="#dist">Build the LLVM Source Distributions</a></li>
66     <li><a href="#rpm">Build RPM Packages (optional)</a></li>
67     <li><a href="#llvmgccbin">Build the LLVM GCC Binary Distribution</a></li>
68     <li><a href="#webupdates">Update the LLVM Website</a></li>
69   </ol>
70 </div>
71
72 <!-- ======================================================================= -->
73 <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
79   reflect the new release version number tag avaiable from Subversion and
80   changes in basic system requirements.
81   </p>
82 </div>
83
84 <!-- ======================================================================= -->
85 <div class="doc_subsection"><a name="merge">Merge Branches</a></div>
86 <div class="doc_text">
87   <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>
93
94   <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>
99 </div>
100
101 <!-- ======================================================================= -->
102 <div class="doc_subsection"><a name="deps">Make LibDeps.txt</a></div>
103 <div class="doc_text">
104   <p>
105   Rebuild the <tt>LibDeps.txt</tt> target in <tt>utils/llvm-config</tt>. This
106   makes sure that the <tt>llvm-config</tt> utility remains relevant for the
107   release, reflecting any changes in the library dependencies.
108   </p>
109 </div>
110
111 <!-- ======================================================================= -->
112 <div class="doc_subsection"><a name="settle">Settle Subversion HEAD</a></div>
113 <div class="doc_text">
114   <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 <!-- ======================================================================= -->
123 <div class="doc_subsection"><a name="tag">Subversion Tag And Branch</a></div>
124 <div class="doc_text">
125   <p>Tag and branch the Subversion HEAD using the following procedure:</p>
126   <ol>
127     <li>
128     <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>
146 svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
147          https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XX</i>
148 svn 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>
150 svn 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>
154     </li>
155
156     <li>
157     <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>
165 svn 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>
167 svn 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>
169 svn 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>
173     </li>
174
175     <li>
176     <p>Advise developers they can work on Subversion HEAD again.</p></li>
177
178     <li>
179     <p>The Release Manager and any developers working on the release should switch
180     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
182     using the following commands:</p>
183
184 <div class="doc_code">
185 <pre>
186 svn co https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i>
187 svn co https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i>
188 svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i>
189 </pre>
190 </div>
191     </li>
192 </div>
193
194 <!-- ======================================================================= -->
195 <div class="doc_subsection"><a name="verchanges">Update LLVM Version</a></div>
196 <div class="doc_text">
197   <p>
198   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).
201   </p>
202 </div>
203
204 <!-- ======================================================================= -->
205 <div class="doc_subsection"><a name="build">Build LLVM</a></div>
206 <div class="doc_text">
207   <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>
217 </div>
218
219 <!-- ======================================================================= -->
220 <div class="doc_subsection"><a name="check">Run 'make check'</a></div>
221 <div class="doc_text">
222   <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>.
226   </p>
227
228   <p>
229   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.
233   </p>
234 </div>
235
236 <!-- ======================================================================= -->
237 <div class="doc_subsection"><a name="test">LLVM Test Suite</a></div>
238 <div class="doc_text">
239   <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>
245 </div>
246
247 <!-- ======================================================================= -->
248 <div class="doc_subsection"><a name="dist">Build the LLVM Source Distributions</a></div>
249 <div class="doc_text">
250   <p>
251   Create source distributions for LLVM, LLVM GCC, and the LLVM Test Suite by
252   exporting the source from Subversion and archiving it.  This can be done with
253   the following commands:
254   </p>
255
256 <div class="doc_code">
257 <pre>
258 svn export https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XX</i> llvm
259 svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.0/branches/release_<i>XX</i> llvm-gcc
260 svn export https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XX</i> llvm-test
261 mkdir cfrontend; mv llvm-gcc cfrontend/src
262 tar -cvf - llvm          | gzip &gt; llvm-X.X.tar.gz
263 tar -cvf - llvm-test     | gzip &gt; llvm-test-X.X.tar.gz
264 tar -cvf - cfrontend/src | gzip &gt; cfrontend-X.X.source.tar.gz
265 </pre>
266 </div>
267 </div>
268
269 <!-- ======================================================================= -->
270 <div class="doc_subsection"><a name="rpm">Building RPM packages (optional)</a></div>
271 <div class="doc_text">
272   <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>
280 make dist        # Build the distribution source tarball
281 make dist-check  # Check that the source tarball can build itself.
282 cp llvm-M.m.tar.gz /usr/src/redhat/SOURCES  # Required by rpmbuild
283 make srpm # for source rpm
284 make 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>
300 </div>
301
302 <!-- ======================================================================= -->
303 <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
342
343 <!-- ======================================================================= -->
344 <div class="doc_subsection"><a name="webupdates">Update the LLVM Website</a></div>
345 <div class="doc_text">
346   <p>
347   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.
356   </p>
357 </div>
358
359 <!--
360 <div class="doc_subsection"><a name="release">Release</a></div>
361 <div class="doc_text">
362   <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>
373 </div>
374 -->
375
376 <!-- *********************************************************************** -->
377 <div class="doc_section"><a name="dist_targets">Distribution Targets</a></div>
378 <!-- *********************************************************************** -->
379
380 <!-- ======================================================================= -->
381 <div class="doc_subsection">Overview</div>
382 <div class="doc_text">
383   <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
415 <!-- ======================================================================= -->
416
417 <div class="doc_subsection">distdir</div>
418 <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
504 <!-- ======================================================================= -->
505 <div class="doc_subsection">dist</div>
506 <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
512   <ul>
513     <li><b><tt>dist-gzip</tt></b>: package the gzipped distribution tar 
514         file. The distribution directory is packaged into a single file ending
515         in <tt>.tar.gz</tt> which is gzip compressed.</li>
516     <li><b><tt>dist-bzip2</tt></b>: package the bzip2 distribution tar file. 
517         The distribution directory is packaged into a single file ending in 
518         <tt>.tar.bzip2</tt> which is bzip2 compressed.</li>
519     <li><b><tt>dist-zip</tt></b>: package the zip distribution file. The 
520         distribution directory is packaged into a single file ending in 
521         <tt>.zip</tt> which is zip compressed.</li>
522     <li><b><tt>dist</tt></b>: does all three, dist-gzip, dist-bzip2,
523         dist-zip</li>
524   </ul>
525 </div>
526
527 <!-- ======================================================================= -->
528 <div class="doc_subsection">dist-check</div>
529 <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
578 <!-- ======================================================================= -->
579 <div class="doc_subsection">dist-clean</div>
580 <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>
589 </div>
590
591 <!-- *********************************************************************** -->
592 <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>