| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | 
 |                       "http://www.w3.org/TR/html4/strict.dtd"> | 
 | <html> | 
 | <head> | 
 |   <title>Building LLVM with CMake</title> | 
 |   <link rel="stylesheet" href="llvm.css" type="text/css"> | 
 | </head> | 
 |  | 
 | <div class="doc_title"> | 
 |   Building LLVM with CMake | 
 | </div> | 
 |  | 
 | <ul> | 
 |   <li><a href="#intro">Introduction</a></li> | 
 |   <li><a href="#quickstart">Quick start</a></li> | 
 |   <li><a href="#usage">Basic CMake usage</a> | 
 |   <li><a href="#options">Options and variables</a> | 
 |     <ul> | 
 |     <li><a href="#freccmake">Frequently-used CMake variables</a></li> | 
 |     <li><a href="#llvmvars">LLVM-specific variables</a></li> | 
 |   </ul></li> | 
 |   <li><a href="#testing">Executing the test suite</a> | 
 |   <li><a href="#cross">Cross compiling</a> | 
 |   <li><a href="#embedding">Embedding LLVM in your project</a> | 
 |   <li><a href="#specifics">Compiler/Platform specific topics</a> | 
 |     <ul> | 
 |     <li><a href="#msvc">Microsoft Visual C++</a></li> | 
 |   </ul></li> | 
 | </ul> | 
 |  | 
 | <div class="doc_author"> | 
 | <p>Written by <a href="mailto:ofv@wanadoo.es">Oscar Fuentes</a></p> | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 | <a name="intro">Introduction</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 |   <p><a href="http://www.cmake.org/">CMake</a> is a cross-platform | 
 |     build-generator tool. CMake does not build the project, it generates | 
 |     the files needed by your build tool (GNU make, Visual Studio, etc) for | 
 |     building LLVM.</p> | 
 |  | 
 |   <p>If you are really anxious about getting a functional LLVM build, | 
 |     go to the <a href="#quickstart">Quick start</a> section. If you | 
 |     are a CMake novice, start on <a href="#usage">Basic CMake | 
 |       usage</a> and then go back to the <a href="#quickstart">Quick | 
 |       start</a> once you know what you are | 
 |     doing. The <a href="#options">Options and variables</a> section | 
 |     is a reference for customizing your build. If you already have | 
 |     experience with CMake, this is the recommended starting point. | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 | <a name="quickstart">Quick start</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p> We use here the command-line, non-interactive CMake interface </p> | 
 |  | 
 | <ol> | 
 |  | 
 |   <li><p><a href="http://www.cmake.org/cmake/resources/software.html">Download</a> | 
 |       and install CMake. Version 2.6.2 is the minimum required.</p> | 
 |  | 
 |   <li><p>Open a shell. Your development tools must be reachable from this | 
 |       shell through the PATH environment variable.</p> | 
 |  | 
 |   <li><p>Create a directory for containing the build. It is not | 
 |       supported to build LLVM on the source directory. cd to this | 
 |       directory:</p> | 
 |     <div class="doc_code"> | 
 |       <p><tt>mkdir mybuilddir</tt></p> | 
 |       <p><tt>cd mybuilddir</tt></p> | 
 |     </div> | 
 |  | 
 |   <li><p>Execute this command on the shell | 
 |       replacing <i>path/to/llvm/source/root</i> with the path to the | 
 |       root of your LLVM source tree:</p> | 
 |     <div class="doc_code"> | 
 |       <p><tt>cmake path/to/llvm/source/root</tt></p> | 
 |     </div> | 
 |  | 
 |     <p>CMake will detect your development environment, perform a | 
 |       series of test and generate the files required for building | 
 |       LLVM. CMake will use default values for all build | 
 |       parameters. See the <a href="#options">Options and variables</a> | 
 |       section for fine-tuning your build</p> | 
 |  | 
 |     <p>This can fail if CMake can't detect your toolset, or if it | 
 |       thinks that the environment is not sane enough. On this case | 
 |       make sure that the toolset that you intend to use is the only | 
 |       one reachable from the shell and that the shell itself is the | 
 |       correct one for you development environment. CMake will refuse | 
 |       to build MinGW makefiles if you have a POSIX shell reachable | 
 |       through the PATH environment variable, for instance. You can | 
 |       force CMake to use a given build tool, see | 
 |       the <a href="#usage">Usage</a> section.</p> | 
 |  | 
 | </ol> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="usage">Basic CMake usage</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 |   <p>This section explains basic aspects of CMake, mostly for | 
 |     explaining those options which you may need on your day-to-day | 
 |     usage.</p> | 
 |  | 
 |   <p>CMake comes with extensive documentation in the form of html | 
 |     files and on the cmake executable itself. Execute <i>cmake | 
 |     --help</i> for further help options.</p> | 
 |  | 
 |   <p>CMake requires to know for which build tool it shall generate | 
 |     files (GNU make, Visual Studio, Xcode, etc). If not specified on | 
 |     the command line, it tries to guess it based on you | 
 |     environment. Once identified the build tool, CMake uses the | 
 |     corresponding <i>Generator</i> for creating files for your build | 
 |     tool. You can explicitly specify the generator with the command | 
 |     line option <i>-G "Name of the generator"</i>. For knowing the | 
 |     available generators on your platform, execute</p> | 
 |  | 
 |     <div class="doc_code"> | 
 |       <p><tt>cmake --help</tt></p> | 
 |     </div> | 
 |  | 
 |     <p>This will list the generator's names at the end of the help | 
 |       text. Generator's names are case-sensitive. Example:</p> | 
 |  | 
 |     <div class="doc_code"> | 
 |       <p><tt>cmake -G "Visual Studio 8 2005" path/to/llvm/source/root</tt></p> | 
 |     </div> | 
 |  | 
 |     <p>For a given development platform there can be more than one | 
 |       adequate generator. If you use Visual Studio "NMake Makefiles" | 
 |       is a generator you can use for building with NMake. By default, | 
 |       CMake chooses the more specific generator supported by your | 
 |       development environment. If you want an alternative generator, | 
 |       you must tell this to CMake with the <i>-G</i> option.</p> | 
 |  | 
 |     <p>TODO: explain variables and cache. Move explanation here from | 
 |       #options section.</p> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="options">Options and variables</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 |   <p>Variables customize how the build will be generated. Options are | 
 |     boolean variables, with possible values ON/OFF. Options and | 
 |     variables are defined on the CMake command line like this:</p> | 
 |  | 
 |   <div class="doc_code"> | 
 |     <p><tt>cmake -DVARIABLE=value path/to/llvm/source</tt></p> | 
 |   </div> | 
 |  | 
 |   <p>You can set a variable after the initial CMake invocation for | 
 |     changing its value. You can also undefine a variable:</p> | 
 |  | 
 |   <div class="doc_code"> | 
 |     <p><tt>cmake -UVARIABLE path/to/llvm/source</tt></p> | 
 |   </div> | 
 |  | 
 |   <p>Variables are stored on the CMake cache. This is a file | 
 |     named <tt>CMakeCache.txt</tt> on the root of the build | 
 |     directory. Do not hand-edit it.</p> | 
 |  | 
 |   <p>Variables are listed here appending its type after a colon. It is | 
 |     correct to write the variable and the type on the CMake command | 
 |     line:</p> | 
 |  | 
 |   <div class="doc_code"> | 
 |     <p><tt>cmake -DVARIABLE:TYPE=value path/to/llvm/source</tt></p> | 
 |   </div> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- ======================================================================= --> | 
 | <div class="doc_subsection"> | 
 |   <a name="freccmake">Frequently-used CMake variables</a> | 
 | </div> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p>Here are listed some of the CMake variables that are used often, | 
 |   along with a brief explanation and LLVM-specific notes. For full | 
 |   documentation, check the CMake docs or execute <i>cmake | 
 |   --help-variable VARIABLE_NAME</i>.</p> | 
 |  | 
 | <dl> | 
 |   <dt><b>CMAKE_BUILD_TYPE</b>:STRING</dt> | 
 |  | 
 |   <dd>Sets the build type for <i>make</i> based generators. Possible | 
 |     values are Release, Debug, RelWithDebInfo and MiniSizeRel. On | 
 |     systems like Visual Studio the user sets the build type with the IDE | 
 |     settings.</dd> | 
 |  | 
 |   <dt><b>CMAKE_INSTALL_PREFIX</b>:PATH</dt> | 
 |   <dd>Path where LLVM will be installed if "make install" is invoked | 
 |     or the "INSTALL" target is built.</dd> | 
 |  | 
 |   <dt><b>LLVM_LIBDIR_SUFFIX</b>:STRING</dt> | 
 |   <dd>Extra suffix to append to the directory where libraries are to | 
 |     be installed. On a 64-bit architecture, one could use | 
 |     -DLLVM_LIBDIR_SUFFIX=64 to install libraries to /usr/lib64.</dd> | 
 |  | 
 |   <dt><b>CMAKE_C_FLAGS</b>:STRING</dt> | 
 |   <dd>Extra flags to use when compiling C source files.</dd> | 
 |  | 
 |   <dt><b>CMAKE_CXX_FLAGS</b>:STRING</dt> | 
 |   <dd>Extra flags to use when compiling C++ source files.</dd> | 
 |  | 
 |   <dt><b>BUILD_SHARED_LIBS</b>:BOOL</dt> | 
 |   <dd>Flag indicating is shared libraries will be built. Its default | 
 |     value is OFF. Shared libraries are not supported on Windows and | 
 |     not recommended in the other OSes.</dd> | 
 | </dl> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- ======================================================================= --> | 
 | <div class="doc_subsection"> | 
 |   <a name="llvmvars">LLVM-specific variables</a> | 
 | </div> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <dl> | 
 |   <dt><b>LLVM_TARGETS_TO_BUILD</b>:STRING</dt> | 
 |   <dd>Semicolon-separated list of targets to build, or <i>all</i> for | 
 |     building all targets. Case-sensitive. For Visual C++ defaults | 
 |     to <i>X86</i>. On the other cases defaults to <i>all</i>. Example: | 
 |     <i>-DLLVM_TARGETS_TO_BUILD="X86;PowerPC;Alpha"</i>.</dd> | 
 |  | 
 |   <dt><b>LLVM_BUILD_TOOLS</b>:BOOL</dt> | 
 |   <dd>Build LLVM tools. Defaults to ON.</dd> | 
 |  | 
 |   <dt><b>LLVM_BUILD_EXAMPLES</b>:BOOL</dt> | 
 |   <dd>Build LLVM examples. Defaults to ON.</dd> | 
 |  | 
 |   <dt><b>LLVM_ENABLE_THREADS</b>:BOOL</dt> | 
 |   <dd>Build with threads support, if available. Defaults to ON.</dd> | 
 |  | 
 |   <dt><b>LLVM_ENABLE_ASSERTIONS</b>:BOOL</dt> | 
 |   <dd>Enables code assertions. Defaults to ON if and only if | 
 |     CMAKE_BUILD_TYPE is <i>Release</i>.</dd> | 
 |  | 
 |   <dt><b>LLVM_ENABLE_PIC</b>:BOOL</dt> | 
 |   <dd>Add the <i>-fPIC</i> flag for the compiler command-line, if the | 
 |     compiler supports this flag. Some systems, like Windows, do not | 
 |     need this flag. Defaults to ON.</dd> | 
 |  | 
 |   <dt><b>LLVM_BUILD_32_BITS</b>:BOOL</dt> | 
 |   <dd>Build 32-bits executables and libraries on 64-bits systems. This | 
 |   option is available only on some 64-bits unix systems. Defaults to | 
 |   OFF.</dd> | 
 |  | 
 |   <dt><b>LLVM_TABLEGEN</b>:STRING</dt> | 
 |   <dd>Full path to a native TableGen executable (usually | 
 |     named <i>tblgen</i>). This is intented for cross-compiling: if the | 
 |     user sets this variable, no native TableGen will be created.</dd> | 
 | </dl> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="testing">Executing the test suite</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p>LLVM testing is not supported on Visual Studio.</p> | 
 |  | 
 | <p>TODO</p> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="cross">Cross compiling</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p>See <a href="http://www.vtk.org/Wiki/CMake_Cross_Compiling">this | 
 |     wiki page</a> for generic instructions on how to cross-compile | 
 |     with CMake. It goes into detailed explanations and may seem | 
 |     daunting, but it is not. On the wiki page there are several | 
 |     examples including toolchain files. Go directly to | 
 |     <a href="http://www.vtk.org/Wiki/CMake_Cross_Compiling#Information_how_to_set_up_various_cross_compiling_toolchains">this | 
 |     section</a> for a quick solution.</p> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="embedding">Embedding LLVM in your project</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p>TODO</p> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 | <div class="doc_section"> | 
 |   <a name="specifics">Compiler/Platform specific topics</a> | 
 | </div> | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <div class="doc_text"> | 
 |  | 
 | <p>Notes for specific compilers and/or platforms.</p> | 
 |  | 
 | </div> | 
 |  | 
 | <!-- *********************************************************************** --> | 
 |  | 
 | <hr> | 
 | <address> | 
 |   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img | 
 |   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> | 
 |   <a href="http://validator.w3.org/check/referer"><img | 
 |   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> | 
 |  | 
 |   <a href="mailto:ofv@wanadoo.es">Oscar Fuentes</a><br> | 
 |   <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br> | 
 |   Last modified: $Date: 2008-12-31 03:59:36 +0100 (Wed, 31 Dec 2008) $ | 
 | </address> | 
 |  | 
 | </body> | 
 | </html> |