mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	external project. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110561 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			422 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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 MinSizeRel. 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. Targets for building each tool
 | |
|     are generated in any case. You can build an tool separately by
 | |
|     invoking its target. For example, you can build <i>llvm-as</i>
 | |
|     with a makefile-based system executing <i>make llvm-as</i> on the
 | |
|     root of your build directory.</dd>
 | |
| 
 | |
|   <dt><b>LLVM_BUILD_EXAMPLES</b>:BOOL</dt>
 | |
|   <dd>Build LLVM examples. Defaults to OFF. Targets for building each
 | |
|     example are generated in any case. See documentation
 | |
|     for <i>LLVM_BUILD_TOOLS</i> above for more details.</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 OFF 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_ENABLE_WARNINGS</b>:BOOL</dt>
 | |
|   <dd>Enable all compiler warnings. Defaults to ON.</dd>
 | |
| 
 | |
|   <dt><b>LLVM_ENABLE_PEDANTIC</b>:BOOL</dt>
 | |
|   <dd>Enable pedantic mode. This disable compiler specific extensions, is
 | |
|     possible. Defaults to ON.</dd>
 | |
| 
 | |
|   <dt><b>LLVM_ENABLE_WERROR</b>:BOOL</dt>
 | |
|   <dd>Stop and fail build, if a compiler warning is
 | |
|     triggered. Defaults to OFF.</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_TARGET_ARCH</b>:STRING</dt>
 | |
|   <dd>LLVM target to use for native code generation. This is required
 | |
|     for JIT generation. It defaults to "host", meaning that it shall
 | |
|     pick the architecture of the machine where LLVM is being built. If
 | |
|     you are cross-compiling, set it to the target architecture
 | |
|     name.</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>Testing is performed when the <i>check</i> target is built. For
 | |
|   instance, if you are using makefiles, execute this command while on
 | |
|   the top level of your build directory:</p>
 | |
| 
 | |
| <div class="doc_code">
 | |
|   <p><tt>make check</tt></p>
 | |
| </div>
 | |
| 
 | |
| <p>Testing is not supported on Visual Studio.</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>
 | |
| 
 | |
| <p>Also see the <a href="#llvmvars">LLVM-specific variables</a>
 | |
|   section for variables used when cross-compiling.</p>
 | |
| 
 | |
| </div>
 | |
| 
 | |
| <!-- *********************************************************************** -->
 | |
| <div class="doc_section">
 | |
|   <a name="embedding">Embedding LLVM in your project</a>
 | |
| </div>
 | |
| <!-- *********************************************************************** -->
 | |
| 
 | |
| <div class="doc_text">
 | |
| 
 | |
|   <p>The most difficult part of adding LLVM to the build of a project
 | |
|     is to determine the set of LLVM libraries corresponding to the set
 | |
|     of required LLVM features. What follows is an example of how to
 | |
|     obtain this information:</p>
 | |
| 
 | |
|   <div class="doc_code">
 | |
|     <pre>
 | |
|     <b># A convenience variable:</b>
 | |
|     set(LLVM_ROOT "" CACHE PATH "Root of LLVM install.")
 | |
|     <b># A bit of a sanity check:</b>
 | |
|     if( NOT EXISTS ${LLVM_ROOT}/include/llvm )
 | |
|     message(FATAL_ERROR "LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install")
 | |
|     endif()
 | |
|     <b># We incorporate the CMake features provided by LLVM:</b>
 | |
|     set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_ROOT}/share/llvm/cmake")
 | |
|     include(LLVM)
 | |
|     <b># Now set the header and library paths:</b>
 | |
|     include_directories( ${LLVM_ROOT}/include )
 | |
|     link_directories( ${LLVM_ROOT}/lib )
 | |
|     <b># Let's suppose we want to build a JIT compiler with support for
 | |
|     # binary code (no interpreter):</b>
 | |
|     llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)
 | |
|     <b># Finally, we link the LLVM libraries to our executable:</b>
 | |
|     target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES})
 | |
|     </pre>
 | |
|   </div>
 | |
| 
 | |
|   <p>This assumes that LLVM_ROOT points to an install of LLVM. The
 | |
|     procedure works too for uninstalled builds although we need to take
 | |
|     care to add an <i>include_directories</i> for the location of the
 | |
|     headers on the LLVM source directory (if we are building
 | |
|     out-of-source.)</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: 2010-08-09 03:59:36 +0100 (Mon, 9 Aug 2010) $
 | |
| </address>
 | |
| 
 | |
| </body>
 | |
| </html>
 |