aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-10-31 17:51:38 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-10-31 17:51:38 +0000
commit2734bf754ac62150a8385f9a9a74860a09bd18ba (patch)
tree72a482291c07e9fede532b5510cbe1eb5ac5a849
parent113cde8685782c21eab432ef737cdb511761d3d9 (diff)
downloadexternal_llvm-2734bf754ac62150a8385f9a9a74860a09bd18ba.zip
external_llvm-2734bf754ac62150a8385f9a9a74860a09bd18ba.tar.gz
external_llvm-2734bf754ac62150a8385f9a9a74860a09bd18ba.tar.bz2
Add a tutorial and some more general concepts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17369 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--docs/MakefileGuide.html153
1 files changed, 127 insertions, 26 deletions
diff --git a/docs/MakefileGuide.html b/docs/MakefileGuide.html
index 4d7e1c4..af06d75 100644
--- a/docs/MakefileGuide.html
+++ b/docs/MakefileGuide.html
@@ -14,13 +14,23 @@
<li><a href="#general">General Concepts</a>
<ol>
<li><a href="#projects">Projects</a></li>
- <li><a href="#Makefile">Makefile</a></li>
- <li><a href="#Makefile.common">Makefile.common</a></li>
- <li><a href="#Makefile.config">Makefile.config</a></li>
- <li><a href="#Makefile.rules">Makefile.rules</a></li>
+ <li><a href="#varvals">Variable Values</a></li>
+ <li><a href="#including">Including Makefiles</a></li>
+ <ol>
+ <li><a href="#Makefile">Makefile</a></li>
+ <li><a href="#Makefile.common">Makefile.common</a></li>
+ <li><a href="#Makefile.config">Makefile.config</a></li>
+ <li><a href="#Makefile.rules">Makefile.rules</a></li>
+ </ol>
<li><a href="#Comments">Comments</a></li>
</ol>
</li>
+ <li><a href="#tutorial">Tutorial</a>
+ <ol>
+ <li><a href="#libraries">Libraries</a></li>
+ <li><a href="#tools">Tools</a></li>
+ </ol>
+ </li>
<li><a href="#targets">Targets Supported</a>
<ol>
<li><a href="#all">all</a></li>
@@ -60,15 +70,14 @@
<p>This document provides <em>usage</em> information about the LLVM makefile
system. While loosely patterned after the BSD makefile system, LLVM has taken
a departure from BSD in order to implement additional features needed by LLVM.
- </p>
- <p>Although makefile systems such as automake were attempted at one point, it
- has become clear that the differences between the LLVM way of doing things and
- the Makefile norm are too great to use a more limited tool. Consequently, LLVM requires
- simply GNU Make 3.79, a widely portably makefile processor. LLVM unabashedly
- makes heavy use of the features of GNU Make so the dependency on GNU Make is
- firm. If you're not familiar with <tt>make</tt>, it is recommended that you
- read the <a href="http://www.gnu.org/software/make/manual/make.html">
- GNU Makefile Manual</a>.</p>
+ Although makefile systems such as automake were attempted at one point, it
+ has become clear that the features needed by LLVM and the Makefile norm are
+ too great to use a more limited tool. Consequently, LLVM requires simply GNU
+ Make 3.79, a widely portable makefile processor. LLVM unabashedly makes heavy
+ use of the features of GNU Make so the dependency on GNU Make is firm. If
+ you're not familiar with <tt>make</tt>, it is recommended that you read the
+ <a href="http://www.gnu.org/software/make/manual/make.html">GNU Makefile Manual
+ </a>.</p>
<p>While this document is rightly part of the
<a href="ProgrammersManual.html">LLVM Programmer's Manual</a>, it is treated
separately here because of the volume of content and because it is often an
@@ -80,9 +89,11 @@
<!-- *********************************************************************** -->
<div class="doc_text">
- <p>The LLVM makefile system is the component of LLVM that is responsible for
- building the software, testing it, generating distributions, rpms and other
- packages, installing and uninstalling, etc.</p>
+ <p>The LLVM Makefile System is the component of LLVM that is responsible for
+ building the software, testing it, generating distributions, checking those
+ distributions, installing and uninstalling, etc. It consists of a several
+ files throughout the source tree. These files and other general concepts are
+ described in this section.</p>
</div>
<!-- ======================================================================= -->
@@ -94,11 +105,30 @@
that has both a <tt>configure</tt> script and a <tt>Makefile</tt> is assumed
to be a project that uses the LLVM Makefile system. This allows your project
to get up and running quickly by utilizing the built-in features that are used
- to compile LLVM.</p>
+ to compile LLVM. LLVM compiles itself using the same features of the makefile
+ system as used for projects.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="varvalues">Variable Values</a></div>
+<div class="doc_text">
+ <p>To use the makefile system, you simply create a file named
+ <tt>Makefile</tt> in your directory and declare values for certain variables.
+ The variables and values that you select determine what the makefile system
+ will do. These variables enable rules and processing in the makefile system
+ that automatically Do The Right Thing&trade;.
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="Makefile">Makefile</a></div>
+<div class="doc_subsection"><a name="including">Including Makefiles</a></div>
+<div class="doc_text">
+ <p>Setting variables alone is not enough. You must include into your Makefile
+ additional files that provide the rules of the LLVM Makefile system. The
+ various files involved are described in the sections that follow.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="Makefile">Makefile</a></div>
<div class="doc_text">
<p>Each directory to participate in the build needs to have a file named
<tt>Makefile</tt>. This is the file first read by <tt>make</tt>. It has three
@@ -108,13 +138,14 @@
first.</li>
<li><a href="Makefile.common">include <tt>$(LEVEL)/Makefile.common</tt></a>
- include the LLVM Makefile system.
- <li><a href="overvars">Overridable Variables</a> - Override variables set by
+ <li><a href="overvars">Override Variables</a> - Override variables set by
the LLVM Makefile system.
</ol>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="Makefile.common">Makefile.common</a></div>
+<div class="doc_subsubsection"><a name="Makefile.common">Makefile.common</a>
+</div>
<div class="doc_text">
<p>Every project must have a <tt>Makefile.common</tt> file at its top source
directory. This file serves three purposes:</p>
@@ -125,14 +156,15 @@
<li>It specifies any other (static) values that are needed throughout the
project. Only values that are used in all or a large proportion of the
project's directories should be placed here.</li>
- <li>It include's the standard rules for the LLVM Makefile system,
+ <li>It includes the standard rules for the LLVM Makefile system,
<a href="Makefile.rules"><tt>$(LLVM_SRC_ROOT)/Makefile.rules</tt></a>.
This file is the "guts" of the LLVM Makefile system.</li>
</ol>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="Makefile.config">Makefile.config</a></div>
+<div class="doc_subsubsection"><a name="Makefile.config">Makefile.config</a>
+</div>
<div class="doc_text">
<p>Every project must have a <tt>Makefile.config</tt> at the top of its
<em>build</em> directory. This file is <b>generated</b> by the
@@ -145,7 +177,7 @@
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="Makefile.rules">Makefile.rules</a></div>
+<div class="doc_subsubsection"><a name="Makefile.rules">Makefile.rules</a></div>
<div class="doc_text">
<p>This file, located at <tt>$(LLVM_SRC_ROOT)/Makefile.rules</tt> is the heart
of the LLVM Makefile System. It provides all the logic, dependencies, and
@@ -165,6 +197,75 @@
</div>
<!-- *********************************************************************** -->
+<div class="doc_section"><a name="tutorial">Tutorial</a></div>
+<!-- *********************************************************************** -->
+<div class="doc_text">
+ <p>This section provides some examples of the different kinds of modules you
+ can build with the LLVM makefile system. In general, each directory you
+ provide will build a single object although that object may be composed of
+ additionally compiled components.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="libraries">Libraries</a></div>
+<div class="doc_text">
+ <p>Only a few variable definitions are needed to build a regular library.
+ Normally, the makefile system will build all the software into a single
+ <tt>libname.o</tt> (pre-linked) object. This means the library is not
+ searchable and that the distinction between compilation units has been
+ dissolved. Optionally, you can ask for a shared library (.so), archive library
+ (.a) or to not have the default (relinked) library built. For example:</p>
+ <pre><tt>
+ LIBRARYNAME = mylib
+ SHARED_LIBRARY = 1
+ ARCHIVE_LIBRARY = 1
+ DONT_BUILT_RELINKED = 1
+ </tt></pre>
+ <p>says to build a library named "mylib" with both a shared library
+ (<tt>mylib.so</tt>) and an archive library (<tt>mylib.a</tt>) version but
+ not to build the relinked object (<tt>mylib.o</tt>). The contents of all the
+ libraries produced will be the same, they are just constructed differently.
+ Note that you normally do not need to specify the sources involved. The LLVM
+ Makefile system will infer the source files from the contents of the source
+ directory.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="tools">Tools</a></div>
+<div class="doc_text">
+ <p>For building executable programs (tools), you must provide the name of the
+ tool and the names of the libraries you wish to link with the tool. For
+ example:</p>
+ <pre><tt>
+ TOOLNAME = mytool
+ USEDLIBS = mylib
+ LLVMLIBS = LLVMSupport.a LLVMSystem.a
+ </tt></pre>
+ <p>says that we are to build a tool name <tt>mytool</tt> and that it requires
+ three libraries: <tt>mylib</tt>, <tt>LLVMSupport.a</tt> and
+ <tt>LLVMSystem.a</tt>.</p>
+ <p>Note that two different variables are use to indicate which libraries are
+ linked: <tt>USEDLIBS</tt> and <tt>LLVMLIBS</tt>. This distinction is necessary
+ to support projects. <tt>LLVMLIBS</tt> refers to the LLVM libraries found in
+ the LLVM object directory. <tt>USEDLIBS</tt> refers to the libraries built by
+ your project. In the case of building LLVM tools, <tt>USEDLIBS</tt> and
+ <tt>LLVMLIBS</tt> can be used interchangeably since the "project" is LLVM
+ itself and <tt>USEDLIBS</tt> refers to the same place as <tt>LLVMLIBS</tt>.
+ </p>
+ <p>Also note that there are two different ways of specifying a library: with a
+ <tt>.a</tt> suffix and without. Without the suffix, the entry refers to the
+ re-linked (.o) file which will include <em>all</em> symbols of the library.
+ This is useful, for example, to include all passes from a library of passes.
+ If the <tt>.a</tt> suffix is used then the library is linked as a searchable
+ library (with the <tt>-l</tt> option). In this case, only the symbols that are
+ unresolved <em>at that point</em> will be resolved from the library, if they
+ exist. Other (unreferenced) symbols will not be included when the <tt>.a</tt>
+ syntax is used. Note that in order to use the <tt>.a</tt> suffix, the library
+ in question must have been built with the <tt>ARCHIVE_LIBRARY</tt> option set.
+ </p>
+</div>
+
+<!-- *********************************************************************** -->
<div class="doc_section"><a name="targets">Targets Supported</a></div>
<!-- *********************************************************************** -->
@@ -378,7 +479,7 @@
<dd>If set to any value, causes a relinked library (.o) not to be built. By
default, libraries are built as re-linked since most LLVM libraries are
needed in their entirety and re-linked libraries will be linked more quickly
- than equival archive libraries.</dd>
+ than equivalent archive libraries.</dd>
<dt><a name="ENABLE_OPTIMIZED"><tt>ENABLE_OPTIMIZED</tt></a></dt>
<dd>If set to any value, causes the build to generate optimized objects,
libraries and executables. This alters the flags specified to the compilers
@@ -456,9 +557,9 @@
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="overvars">Overridable Variables</a></div>
+<div class="doc_subsection"><a name="overvars">Override Variables</a></div>
<div class="doc_text">
- <p>Overridable variables can be used to override the default
+ <p>Override variables can be used to override the default
values provided by the LLVM makefile system. These variables can be set in
several ways:</p>
<ul>