<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>
<!-- ======================================================================= -->