Fix a bug in previous checkin
[oota-llvm.git] / docs / UsingLibraries.html
index 529d7c56dc92281c3b0e5c67456f09f4f86f7657..5c24300d1f72d2083edf8d31dd6099a3c96b37c7 100644 (file)
@@ -10,6 +10,7 @@
   <li><a href="#abstract">Abstract</a></li>
   <li><a href="#introduction">Introduction</a></li>
   <li><a href="#descriptions">Library Descriptions</a></li>
+  <li><a href="#dependencies">Library Dependencies</a></li>
   <li><a href="#rot">Linkage Rules Of Thumb</a>
          <ol>
       <li><a href="#always">Always link LLVMCore, LLVMSupport, LLVMSystem</a>
 <table style="text-align:left">
   <tr><th>Library</th><th>Forms</th><th>Description</th></tr>
   <tr><th colspan="3">Core Libraries</th></tr>
+  <tr><td>LLVMArchive</td><td><tt>.a</tt></td>
+    <td>LLVM archive reading and writing</td></tr>
   <tr><td>LLVMAsmParser</td><td><tt>.o</tt></td>
-    <td>LLVM Assembly Parsing</td></tr>
+    <td>LLVM assembly parsing</td></tr>
   <tr><td>LLVMBCReader</td><td><tt>.o</tt></td>
-    <td>LLVM Bytecode Reading</td></tr>
+    <td>LLVM bytecode reading</td></tr>
   <tr><td>LLVMBCWriter</td><td><tt>.o</tt></td>
-    <td>LLVM Bytecode Writing</td></tr>
+    <td>LLVM bytecode writing</td></tr>
+  <tr><td>LLVMCore</td><td><tt>.o</tt></td>
+    <td>LLVM core intermediate representation</td></tr>
   <tr><td>LLVMDebugger</td><td><tt>.o</tt></td>
-    <td>Source Level Debugging Support</td></tr>
+    <td>Source level debugging support</td></tr>
+  <tr><td>LLVMLinker</td><td><tt>.a</tt></td>
+    <td>Bytecode and archive linking interface</td></tr>
   <tr><td>LLVMSupport</td><td><tt>.a .o</tt></td>
     <td>General support utilities</td></tr>
   <tr><td>LLVMSystem</td><td><tt>.a .o</tt></td>
-    <td>Operating system abstraction</td></tr>
-  <tr><td>LLVMCore</td><td><tt>.o</tt></td>
-    <td>LLVM Core IR</td></tr>
+    <td>Operating system abstraction layer</td></tr>
 
   <tr><th colspan="3">Analysis Libraries</th></tr>
   <tr><td>LLVMAnalysis</td><td><tt>.a .o</tt></td>
   <tr><td>LLVMPowerPC</td><td><tt>.o</tt></td>
     <td>PowerPC code generation backend</td></tr>
   <tr><td>LLVMSelectionDAG</td><td><tt>.o</tt></td>
-    <td>Aggressive instruction selector for Directed Acyclic Graphs.</td></tr>
+    <td>Aggressive instruction selector for directed acyclic graphs.</td></tr>
   <tr><td>LLVMSkeleton</td><td><tt>.a .o</tt></td>
     <td>Skeleton for a code generation backend.</td></tr>
+  <tr><td>LLVMSparcV8</td><td><tt>.o</tt></td>
+    <td>Code generation for SparcV8.</td></tr>
   <tr><td>LLVMSparcV9</td><td><tt>.o</tt></td>
     <td>Code generation for SparcV9.</td></tr>
   <tr><td>LLVMSparcV9RegAlloc</td><td><tt>.a .o</tt></td>
 </table>
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_section"><a name="dependencies"></a>Library Dependencies</div>
+<div class="doc_text">
+  <p>Below are two dependency graphs and a list that show the relationships
+  between the various LLVM archive libraries and object files.  This information 
+  can be automatically generated with the <tt>GenLibDeps.pl</tt> utility found
+  in the <tt>llvm/utils</tt> directory.</p>
+  <!-- =======NOTE: =========================================================-->
+  <!-- === The following graphs and <dl> list are generated automatically ===-->
+  <!-- === by the util named GenLibDeps.pl in the llvm/utils directory.   ===-->
+  <!-- === This should be updated whenever new libraries are added,       ===-->
+  <!-- === removed, or changed                                            ===-->
+  <!-- =======NOTE: =========================================================-->
+  <h2>Dependency Relationships Of Libraries</h2>
+  <p>This graph shows the dependency of archive libraries on other archive 
+  libraries or objects. Where a library has both archive and object forms, only
+  the archive form is shown.</p>
+  <img src="img/libdeps.gif" alt="Library Dependencies"/>
+  <h2>Dependency Relationships Of Object Files</h2>
+  <p>This graph shows the dependency of object files on archive libraries or 
+  other objects. Where a library has both object and archive forms, only the 
+  dependency to the archive form is shown.</p> 
+  <img src="img/objdeps.gif" alt="Object File Dependencies"/>
+  <p>The following list shows the dependency relationships between libraries in
+  textual form. The information is the same as shown on the graphs but arranged
+  alphabetically.</p>
+<dl>
+  <dt><b>libLLVMAnalysis.a</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMArchive.a</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMBCReader.o</li>
+  </ul></dd>
+  <dt><b>libLLVMDataStructure.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMInstrumentation.a</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMLinker.a</b</dt><dd><ul>
+    <li>libLLVMArchive.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMBCReader.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMScalarOpts.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMSparcV9RegAlloc.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMSparcV9LiveVar.o</li>
+    <li>LLVMSparcV9.o</li>
+  </ul></dd>
+  <dt><b>libLLVMSupport.a</b</dt><dd><ul>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMbzip2.o</li>
+  </ul></dd>
+  <dt><b>libLLVMSystem.a</b</dt><dd></dd>
+  <dt><b>libLLVMTarget.a</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMTransformUtils.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMTransforms.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMipa.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>libLLVMipo.a</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMipa.a</li>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMAnalysis.o</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMAsmParser.o</b</dt><dd><ul>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMBCReader.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMBCWriter.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMCBackend.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMipa.a</li>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMCodeGen.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMCore.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+  </ul></dd>
+  <dt><b>LLVMDataStructure.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMDebugger.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMBCReader.o</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMExecutionEngine.o</li>
+  </ul></dd>
+  <dt><b>LLVMExecutionEngine.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMInterpreter.o</li>
+    <li>LLVMJIT.o</li>
+  </ul></dd>
+  <dt><b>LLVMInstrumentation.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMInterpreter.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMExecutionEngine.o</li>
+  </ul></dd>
+  <dt><b>LLVMJIT.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMSystem.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMExecutionEngine.o</li>
+  </ul></dd>
+  <dt><b>LLVMPowerPC.o</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMProfilePaths.o</b</dt><dd><ul>
+    <li>libLLVMInstrumentation.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMScalarOpts.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMSelectionDAG.o</b</dt><dd><ul>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMSkeleton.o</b</dt><dd><ul>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV8.o</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV9.o</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSparcV9RegAlloc.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMBCWriter.o</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMSparcV9InstrSched.o</li>
+    <li>LLVMSparcV9ModuloSched.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV9InstrSched.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMSparcV9LiveVar.o</li>
+    <li>LLVMSparcV9.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV9LiveVar.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV9ModuloSched.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMSparcV9.o</li>
+  </ul></dd>
+  <dt><b>LLVMSparcV9RegAlloc.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+    <li>LLVMSparcV9LiveVar.o</li>
+    <li>LLVMSparcV9.o</li>
+  </ul></dd>
+  <dt><b>LLVMSupport.o</b</dt><dd><ul>
+    <li>libLLVMSystem.a</li>
+    <li>LLVMbzip2.o</li>
+  </ul></dd>
+  <dt><b>LLVMSystem.o</b</dt><dd></dd>
+  <dt><b>LLVMTarget.o</b</dt><dd><ul>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMTransformUtils.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMTransforms.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMX86.o</b</dt><dd><ul>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>LLVMCodeGen.o</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMbzip2.o</b</dt><dd></dd>
+  <dt><b>LLVMipa.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+  <dt><b>LLVMipo.o</b</dt><dd><ul>
+    <li>libLLVMAnalysis.a</li>
+    <li>libLLVMipa.a</li>
+    <li>libLLVMScalarOpts.a</li>
+    <li>libLLVMSupport.a</li>
+    <li>libLLVMTarget.a</li>
+    <li>libLLVMTransformUtils.a</li>
+    <li>LLVMCore.o</li>
+  </ul></dd>
+</dl>
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_section"><a name="rot">Linkage Rules Of Thumb</a></div>
 <div class="doc_text">
        should link into your programs.</p>
 </div>
 <!-- ======================================================================= -->
-<div class="doc_subsection"><a name="always">Always Link LLVMCore LLVMSupport
-    LLVMSystem</a></div>
+<div class="doc_subsection"><a name="always">Always Link LLVMCore, LLVMSupport,
+    and LLVMSystem</a></div>
 <div class="doc_text">
-  <p>No matter what you do with LLVM, the last three entries in your linke line
-  should always be: <tt>LLVMCore LLVMSupport.a LLVMSystem.a</tt>.</p>
+  <p>No matter what you do with LLVM, the last three entries in the value of 
+  your LLVMLIBS make variable should always be: 
+  <tt>LLVMCore LLVMSupport.a LLVMSystem.a</tt>. There are no <tt>LLVM</tt> 
+  programs that don't depend on these three.</p>
 </div>
 <!-- ======================================================================= -->
 <div class="doc_subsection"><a name="onlyone">Never link both archive and
   <p>There is never any point to linking both the re-linked (<tt>.o</tt>) and
   the archive (<tt>.a</tt>) versions of a library. Since the re-linked version
   includes the entire library, the archive version will not resolve any symbols.
-  You could even end up with link error is you place the archive version before
+  You could even end up with link error if you place the archive version before
   the re-linked version on the linker's command line.</p>
 </div>
 <!-- ======================================================================= -->