1 # If we are not building as a part of LLVM, build LLDB as an
2 # standalone project, using LLVM as an external library:
3 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
5 cmake_minimum_required(VERSION 2.8.12.2)
8 cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required
11 option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)
13 # Rely on llvm-config.
15 find_program(LLVM_CONFIG "llvm-config")
17 message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}")
18 set(CONFIG_COMMAND ${LLVM_CONFIG}
27 COMMAND ${CONFIG_COMMAND}
28 RESULT_VARIABLE HAD_ERROR
29 OUTPUT_VARIABLE CONFIG_OUTPUT
33 "[ \t]*[\r\n]+[ \t]*" ";"
34 CONFIG_OUTPUT ${CONFIG_OUTPUT})
37 string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}")
38 message(STATUS "${CONFIG_COMMAND_STR}")
39 message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
42 message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}")
45 list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS)
46 list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR)
47 list(GET CONFIG_OUTPUT 2 LIBRARY_DIR)
48 list(GET CONFIG_OUTPUT 3 INCLUDE_DIR)
49 list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT)
50 list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR)
51 list(GET CONFIG_OUTPUT 6 LLVM_CMAKE_PATH)
54 set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
55 CACHE BOOL "Enable assertions")
56 # Assertions should follow llvm-config's.
57 mark_as_advanced(LLVM_ENABLE_ASSERTIONS)
60 set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin")
61 set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib")
62 set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include")
63 set(LLVM_DIR ${LLVM_OBJ_ROOT}/cmake/modules/CMakeFiles CACHE PATH "Path to LLVM build tree CMake files")
64 set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree")
65 set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
67 find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
70 set(LLVMCONFIG_FILE "${LLVM_CMAKE_PATH}/LLVMConfig.cmake")
71 if(EXISTS ${LLVMCONFIG_FILE})
72 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
73 include(${LLVMCONFIG_FILE})
75 message(FATAL_ERROR "Not found: ${LLVMCONFIG_FILE}")
78 # They are used as destination of target generators.
79 set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
80 set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
82 # DLL platform -- put DLLs into bin.
83 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
85 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
89 include(HandleLLVMOptions)
92 if (PYTHON_EXECUTABLE STREQUAL "")
93 set(Python_ADDITIONAL_VERSIONS 3.5 3.4 3.3 3.2 3.1 3.0 2.7 2.6 2.5)
94 include(FindPythonInterp)
95 if( NOT PYTHONINTERP_FOUND )
97 "Unable to find Python interpreter, required for builds and testing.
98 Please install Python or specify the PYTHON_EXECUTABLE CMake variable.")
101 message("-- Found PythonInterp: ${PYTHON_EXECUTABLE}")
104 # Import CMake library targets from LLVM and Clang.
105 include("${LLVM_OBJ_ROOT}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm/LLVMConfig.cmake")
106 # cmake/clang/ClangConfig.cmake is not created when LLVM and Cland are built together.
107 if (EXISTS "${LLVM_OBJ_ROOT}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang/ClangConfig.cmake")
108 include("${LLVM_OBJ_ROOT}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang/ClangConfig.cmake")
111 set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
113 set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR})
115 set(CMAKE_INCLUDE_CURRENT_DIR ON)
116 include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}")
117 # Next three include directories are needed when llvm-config is located in build directory.
118 # LLVM and Cland are assumed to be built together
119 if (EXISTS "${LLVM_OBJ_ROOT}/include")
120 include_directories("${LLVM_OBJ_ROOT}/include")
122 if (EXISTS "${LLVM_MAIN_SRC_DIR}/tools/clang/include")
123 include_directories("${LLVM_MAIN_SRC_DIR}/tools/clang/include")
125 if (EXISTS "${LLVM_OBJ_ROOT}/tools/clang/include")
126 include_directories("${LLVM_OBJ_ROOT}/tools/clang/include")
128 link_directories("${LLVM_LIBRARY_DIR}")
130 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
131 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
132 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
134 set(LLDB_BUILT_STANDALONE 1)