| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <title>Creating an LLVM Project</title> |
| </head> |
| |
| <body bgcolor=white> |
| |
| <center><h1>Creating an LLVM Project<br></h1></center> |
| |
| <!--===============================================================--> |
| <h2><a name="a">Overview</a><hr></h2> |
| <!--===============================================================--> |
| |
| In order to set up a new project that uses the LLVM build system, |
| libraries, and header files, follow these steps: |
| |
| <ol> |
| <li> |
| Copy the <tt>llvm/projects/sample</tt> directory to any place |
| of your choosing. You can place it anywhere you like, although |
| someplace underneath your home directory would work best. |
| <p> |
| |
| <li> |
| Edit the <tt>Makefile.config</tt> and <tt>Makefile.common</tt> |
| files so that the LLVM_SRC_ROOT variable equals the absolute |
| pathname of the LLVM source tree and LLVM_OBJ_ROOT equals the |
| pathname of where LLVM was built. |
| |
| <p> |
| |
| For example, if the LLVM source tree is in |
| <tt>/usr/home/joe/src/llvm</tt>, and you configured it with |
| <tt>--with-objroot=/tmp</tt> when his home directory is |
| <tt>/usr/home/joe</tt>, then |
| LLVM_SRC_ROOT=<tt>/usr/home/joe/src/llvm</tt> and |
| LLVM_OBJ_ROOT=<tt>/tmp/src/llvm</tt>. |
| <p> |
| |
| <li> |
| Add your source code to the source tree. |
| <p> |
| |
| <li> |
| Modify the various Makefiles to contain the names of the |
| objects that you want to build. |
| </ol> |
| |
| <!--===============================================================--> |
| <h2><a name="Source Tree Layout">Source Tree Layout</a><hr></h2> |
| <!--===============================================================--> |
| |
| In order to use the LLVM build system, you will want to lay out your |
| source code so that it can benefit from the build system's features. |
| Mainly, you want your source tree layout to look similar to the LLVM |
| source tree layout. The best way to do this is to just copy the |
| project tree from <tt>llvm/projects/sample</tt> and modify it to meet |
| your needs, but you can certainly add to it if you want. |
| |
| Underneath your top level directory, you should have the following |
| directories: |
| |
| <dl compact> |
| <dt><b>lib</b> |
| <dd> |
| This subdirectory should contain all of your library source |
| code. For each library that you build, you will have one |
| directory in <b>lib</b> that will contain that library's source |
| code. |
| |
| <p> |
| Libraries can be object files, archives, or dynamic libraries. |
| The <b>lib</b> directory is just a good place for these as it |
| places them all in a directory from which they can be linked |
| later on. |
| |
| <dt><b>include</b> |
| <dd> |
| This subdirectory should contain any header files that are |
| global to your project. By global, we mean that they are used |
| by more than one library or executable of your project. |
| <p> |
| By placing your header files in <b>include</b>, they will be |
| found automatically by the LLVM build system. For example, if |
| you have a file <b>include/jazz/note.h</b>, then your source |
| files can include it simply with <b>#include "jazz/note.h"</b>. |
| |
| <dt><b>tools</b> |
| <dd> |
| This subdirectory should contain all of your source |
| code for executables. For each program that you build, you |
| will have one directory in <b>tools</b> that will contain that |
| program's source code. |
| </dl> |
| |
| Typically, you will want to build your <b>lib</b> directory first |
| followed by your <b>tools</b> directory. |
| |
| <!--===============================================================--> |
| <h2><a name="Makefile Variables">Makefile Variables</a><hr></h2> |
| <!--===============================================================--> |
| The LLVM build system provides several variables which you may |
| use. |
| |
| <h3> Required Variables </h3> |
| <dl compact> |
| <dt>LEVEL |
| <dd> |
| This variable is the relative path from this Makefile to the |
| top directory of your project's source code. For example, if |
| your source code is in /tmp/src, then the Makefile in |
| /tmp/src/jump/high would set LEVEL to "../..". |
| </dl> |
| |
| <h3> Variables for Building Subdirectories</h3> |
| <dl compact> |
| <dt>DIRS |
| <dd> |
| This is a space separated list of subdirectories that should be |
| built. They will be built, one at a time, in the order |
| specified. |
| <p> |
| |
| <dt>PARALLEL_DIRS |
| <dd> |
| This is a list of directories that can be built in parallel. |
| These will be built after the directories in DIRS have been |
| built. |
| <p> |
| |
| <dt>OPTIONAL_DIRS |
| <dd> |
| This is a list of directories that can be built if they exist, |
| but will not cause an error if they do not exist. They are |
| built serially in the order in which they are listed. |
| </dl> |
| |
| <h3> Variables for Building Libraries</h3> |
| <dl compact> |
| <dt>LIBRARYNAME |
| <dd> |
| This variable contains the base name of the library that will |
| be built. For example, to build a library named |
| <tt>libsample.a</tt>, LIBRARYNAME should be set to |
| <tt>sample</tt>. |
| <p> |
| |
| <dt>BUILD_ARCHIVE |
| <dd> |
| By default, a library is a <tt>.o</tt> file that is linked |
| directly into a program. However, if you set the BUILD_ARCHIVE |
| variable, an archive library (sometimes known as a static |
| library) will be built instead. |
| <p> |
| |
| <dt>SHARED_LIBRARY |
| <dd> |
| If SHARED_LIBRARY is defined in your Makefile, then the |
| Makefiles will generate a shared (or dynamic) library. |
| </dl> |
| |
| <h3> Variables for Building Programs</h3> |
| <dl compact> |
| <dt>TOOLNAME |
| <dd> |
| This variable contains the name of the program that will |
| be built. For example, to build an executable named |
| <tt>sample</tt>, TOOLNAME should be set to <tt>sample</tt>. |
| <p> |
| |
| <dt>USEDLIBS |
| <dd> |
| 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 <b>lib</b> |
| directory. The libraries must be specified by their base name. |
| For example, to link libsample.a, you would set USEDLIBS to |
| <tt>sample</tt>. |
| <p> |
| </dl> |
| |
| <h3> Miscellaneous Variables</h3> |
| <dl compact> |
| <dt>ExtraSource |
| <dd> |
| This variable contains a space separated list of extra source |
| files that needs to be built. It is useful for including the |
| output of Lex and Yacc programs. |
| <p> |
| |
| <dt>CFLAGS |
| <dt>CPPFLAGS |
| <dd> |
| This variable can be used to add options to the C and C++ |
| compiler, respectively. It is typically used to add options |
| that tell the compiler the location of additional directories |
| to search for header files. |
| <p> |
| It is highly suggested that you append to these variable as |
| opposed to overwriting them. The master Makefiles may already |
| have useful options in them that you may not want to overwrite. |
| <p> |
| </dl> |
| |
| <!--===============================================================--> |
| <h2><a name="Caveats">Caveats</a><hr></h2> |
| <!--===============================================================--> |
| |
| Some caveats and known issues: |
| <ol> |
| <li> |
| The projects system currently uses the $HOME environment |
| variable in determining where object files should go. If $HOME |
| is not set, then your path relative to the root directory may |
| be used to determine where your object files go. It is |
| therefore advised that your source directory reside underneath |
| your home directory. |
| </ol> |
| </body> |
| </html> |