X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FCMake.html;h=087d69304b37458f0a66bec1d64d2f58c824441c;hb=c352caf168094c83f05a8010ca14c2e643dbf618;hp=ac3b57a84893cc1ebb591eba253f84ab9b0d230c;hpb=76941b273316eca4559c05ef34bfc88f13db64f1;p=oota-llvm.git diff --git a/docs/CMake.html b/docs/CMake.html index ac3b57a8489..087d69304b3 100644 --- a/docs/CMake.html +++ b/docs/CMake.html @@ -2,13 +2,14 @@ "http://www.w3.org/TR/html4/strict.dtd">
+CMake is a cross-platform build-generator tool. CMake does not build the project, it generates @@ -56,19 +60,19 @@
We use here the command-line, non-interactive CMake interface
This section explains basic aspects of CMake, mostly for explaining those options which you may need on your day-to-day @@ -157,12 +161,12 @@
Variables customize how the build will be generated. Options are boolean variables, with possible values ON/OFF. Options and @@ -180,7 +184,7 @@
Variables are stored on the CMake cache. This is a file
- named
Variables are listed here appending its type after a colon. It is @@ -191,14 +195,12 @@
cmake -DVARIABLE:TYPE=value path/to/llvm/source
Here are listed some of the CMake variables that are used often, along with a brief explanation and LLVM-specific notes. For full @@ -209,7 +211,7 @@
LLVM testing is not supported on Visual Studio.
+Testing is performed when the check target is built. For + instance, if you are using makefiles, execute this command while on + the top level of your build directory:
-TODO
+make check
+On Visual Studio, you may run tests to build the project "check".
TODO
+See this + wiki page 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 + this + section for a quick solution.
+ +Also see the LLVM-specific variables + section for variables used when cross-compiling.
TODO
+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:
-+ # A convenience variable: + set(LLVM_ROOT "" CACHE PATH "Root of LLVM install.") + # A bit of a sanity check: + if( NOT EXISTS ${LLVM_ROOT}/include/llvm ) + message(FATAL_ERROR "LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install") + endif() + # We incorporate the CMake features provided by LLVM: + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_ROOT}/share/llvm/cmake") + include(LLVMConfig) + # Now set the header and library paths: + include_directories( ${LLVM_INCLUDE_DIRS} ) + link_directories( ${LLVM_LIBRARY_DIRS} ) + add_definitions( ${LLVM_DEFINITIONS} ) + # Let's suppose we want to build a JIT compiler with support for + # binary code (no interpreter): + llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native) + # Finally, we link the LLVM libraries to our executable: + target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES}) ++
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 include_directories for the location of the + headers on the LLVM source directory (if we are building + out-of-source.)
+ +Alternativaly, you can utilize CMake's find_package + functionality. Here is an equivalent variant of snippet shown above:
+ ++ find_package(LLVM) + + if( NOT LLVM_FOUND ) + message(FATAL_ERROR "LLVM package can't be found. Set CMAKE_PREFIX_PATH variable to LLVM's installation prefix.") + endif() + + include_directories( ${LLVM_INCLUDE_DIRS} ) + link_directories( ${LLVM_LIBRARY_DIRS} ) + + llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native) + target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES}) ++
It is possible to develop LLVM passes against installed LLVM. + An example of project layout provided below:
+ ++ <project dir>/ + | + CMakeLists.txt + <pass name>/ + | + CMakeLists.txt + Pass.cpp + ... ++
Contents of <project dir>/CMakeLists.txt:
+ ++ find_package(LLVM) + + # Define add_llvm_* macro's. + include(AddLLVM) + + add_definitions(${LLVM_DEFINITIONS}) + include_directories(${LLVM_INCLUDE_DIRS}) + link_directories(${LLVM_LIBRARY_DIRS}) + + add_subdirectory(<pass name>) ++
Contents of <project dir>/<pass name>/CMakeLists.txt:
+ ++ add_llvm_loadable_module(LLVMPassname + Pass.cpp + ) ++
When you are done developing your pass, you may wish to integrate it
+ into LLVM source tree. You can achieve it in two easy steps:
+ 1. Copying <pass name> folder into <LLVM root>/lib/Transform directory.
+ 2. Adding "add_subdirectory(<pass name>)" line into <LLVM root>/lib/Transform/CMakeLists.txt
Notes for specific compilers and/or platforms.
-For linking the JIT into your executable, add
- -/INCLUDE:_X86TargetMachineModule
-to your linker options. This is required for adding the relevant - LLVM object code to the executable. Not doing this will result on - some methods returning NULL (ExecutionEngine::create, for - instance).
+