The LLVM build system is designed to facilitate the building of third party
projects that use LLVM header files, libraries, and tools. In order to use
@@ -49,7 +50,7 @@ these facilities, a Makefile from a project must do the following things:
PROJ_SRC_ROOT - The root of the project's source tree.
PROJ_OBJ_ROOT - The root of the project's object tree.
PROJ_INSTALL_ROOT - The root installation directory.
-
LEVEL - The relative path from the current directory to the
+ LEVEL - The relative path from the current directory to the
project's root ($PROJ_OBJ_ROOT).
Include Makefile.config from $(LLVM_OBJ_ROOT).
@@ -59,9 +60,9 @@ these facilities, a Makefile from a project must do the following things:
There are two ways that you can set all of these variables:
- You can write your own Makefiles which hard-code these values.
- - You can use the pre-made LLVM sample project. This sample project
- includes Makefiles, a configure script that can be used to configure the
- location of LLVM, and the ability to support multiple object directories
+
- You can use the pre-made LLVM sample project. This sample project
+ includes Makefiles, a configure script that can be used to configure the
+ location of LLVM, and the ability to support multiple object directories
from a single source directory.
@@ -73,12 +74,12 @@ provide enough information on how to write your own Makefiles.
+
Follow these simple steps to start your project:
@@ -88,9 +89,9 @@ choosing. You can place it anywhere you like. Rename the directory to match
the name of your project.
-If you downloaded LLVM using Subversion, remove all the directories named .svn
-(and all the files therein) from your project's new source tree. This will
-keep Subversion from thinking that your project is inside
+If you downloaded LLVM using Subversion, remove all the directories named .svn
+(and all the files therein) from your project's new source tree. This will
+keep Subversion from thinking that your project is inside
llvm/trunk/projects/sample.
Add your source code and Makefiles to your source tree.
@@ -121,8 +122,8 @@ configure script with these commands:
% ./AutoRegen.sh
-
You must be using Autoconf version 2.59 or later and your aclocal version
-should 1.9 or later.
+
You must be using Autoconf version 2.59 or later and your aclocal version
+should be 1.9 or later.
Run configure in the directory in which you want to place
object code. Use the following options to tell your project where it
@@ -139,18 +140,18 @@ can find LLVM:
That's it! Now all you have to do is type gmake (or make
-if your on a GNU/Linux system) in the root of your object directory, and your
+if your on a GNU/Linux system) in the root of your object directory, and your
project should build.
+
In order to use the LLVM build system, you will want to organize your
source code so that it can benefit from the build system's features.
@@ -209,7 +210,7 @@ directories:
test procedure uses RUN lines in the actual test case to determine
how to run the test. See the
TestingGuide for more details. You
- can easily write Makefile support similar to the Makefiles in
+ can easily write Makefile support similar to the Makefiles in
llvm/test to use Dejagnu to run your project's tests.
LLVM contains an optional package called llvm-test
@@ -230,26 +231,24 @@ your tools directory.
-
+
-
+
The LLVM build system provides a convenient way to build libraries and
executables. Most of your project Makefiles will only need to define a few
variables. Below is a list of the variables one can set and what they can
do:
-
-
-
+
-
+
- LEVEL
@@ -263,11 +262,11 @@ do:
-
+
-
+
- DIRS
@@ -294,11 +293,11 @@ do:
-
+
-
+
- LIBRARYNAME
@@ -325,11 +324,11 @@ do:
-
+
-
+
- TOOLNAME
@@ -341,16 +340,41 @@ do:
- USEDLIBS
-
- This variable holds a space separated list of libraries that
- should be linked into the program. These libraries must either
- be LLVM libraries or libraries that come from your lib
- directory. The libraries must be specified by their base name.
- For example, to link libsample.a, you would set USEDLIBS to
- sample.
+ This variable holds a space separated list of libraries that should
+ be linked into the program. These libraries must be libraries that
+ come from your lib directory. The libraries must be
+ specified without their "lib" prefix. For example, to link
+ libsample.a, you would set USEDLIBS to
+ sample.a.
Note that this works only for statically linked libraries.
+
- LLVMLIBS
+
-
+ This variable holds a space separated list of libraries that should
+ be linked into the program. These libraries must be LLVM libraries.
+ The libraries must be specified without their "lib" prefix. For
+ example, to link with a driver that performs an IR transformation
+ you might set LLVMLIBS to this minimal set of libraries
+ LLVMSupport.a LLVMCore.a LLVMBitReader.a LLVMAsmParser.a LLVMAnalysis.a LLVMTransformUtils.a LLVMScalarOpts.a LLVMTarget.a.
+
+ Note that this works only for statically linked libraries. LLVM is
+ split into a large number of static libraries, and the list of libraries you
+ require may be much longer than the list above. To see a full list
+ of libraries use:
+ llvm-config --libs all.
+ Using LINK_COMPONENTS as described below, obviates the need to set LLVMLIBS.
+
+
+
- LINK_COMPONENTS
+
- This variable holds a space separated list of components that
+ the LLVM Makefiles pass to the llvm-config tool to generate
+ a link line for the program. For example, to link with all LLVM
+ libraries use
+ LINK_COMPONENTS = all.
+
+
- LIBS
-
To link dynamic libraries, add -l<library base name> to
@@ -363,16 +387,19 @@ do:
LIBS += -lsample
+
+ Note that LIBS must occur in the Makefile after the inclusion of Makefile.common.
+
-
+
-
+
- ExtraSource
@@ -398,13 +425,15 @@ do:
+
+
-
+
-
+
The final location of built libraries and executables will depend upon
whether you do a Debug, Release, or Profile build.
@@ -427,12 +456,12 @@ whether you do a Debug, Release, or Profile build.
-
+
-
+
If you have any questions or need any help creating an LLVM project,
the LLVM team would be more than happy to help. You can always post your
@@ -441,7 +470,7 @@ href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM Developers
Mailing List.
-
+
@@ -451,7 +480,7 @@ Mailing List.
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01">
John Criswell
- The LLVM Compiler Infrastructure
+ The LLVM Compiler Infrastructure
Last modified: $Date$