]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - cmake/modules/LLDBStandalone.cmake
Vendor import of lldb release_40 branch r292009:
[FreeBSD/FreeBSD.git] / cmake / modules / LLDBStandalone.cmake
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)
4   project(lldb)
5   cmake_minimum_required(VERSION 2.8.12.2)
6
7   if (POLICY CMP0022)
8     cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required
9   endif()
10
11   option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)
12
13   # Rely on llvm-config.
14   set(CONFIG_OUTPUT)
15   find_program(LLVM_CONFIG "llvm-config")
16   if(LLVM_CONFIG)
17     message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}")
18     set(CONFIG_COMMAND ${LLVM_CONFIG}
19       "--assertion-mode"
20       "--bindir"
21       "--libdir"
22       "--includedir"
23       "--prefix"
24       "--src-root"
25       "--cmakedir")
26     execute_process(
27       COMMAND ${CONFIG_COMMAND}
28       RESULT_VARIABLE HAD_ERROR
29       OUTPUT_VARIABLE CONFIG_OUTPUT
30     )
31     if(NOT HAD_ERROR)
32       string(REGEX REPLACE
33         "[ \t]*[\r\n]+[ \t]*" ";"
34         CONFIG_OUTPUT ${CONFIG_OUTPUT})
35
36     else()
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}")
40     endif()
41   else()
42     message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}")
43   endif()
44
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)
52
53   if(NOT MSVC_IDE)
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)
58   endif()
59
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")
66
67   find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
68     NO_DEFAULT_PATH)
69
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})
74   else()
75     message(FATAL_ERROR "Not found: ${LLVMCONFIG_FILE}")
76   endif()
77
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})
81   if(WIN32 OR CYGWIN)
82     # DLL platform -- put DLLs into bin.
83     set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
84   else()
85     set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
86   endif()
87
88   include(AddLLVM)
89   include(HandleLLVMOptions)
90   include(CheckAtomic)
91
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 )
96       message(FATAL_ERROR
97               "Unable to find Python interpreter, required for builds and testing.
98                Please install Python or specify the PYTHON_EXECUTABLE CMake variable.")
99     endif()
100   else()
101     message("-- Found PythonInterp: ${PYTHON_EXECUTABLE}")
102   endif()
103
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")
109   endif()
110
111   set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
112
113   set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR})
114
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")
121   endif()
122   if (EXISTS "${LLVM_MAIN_SRC_DIR}/tools/clang/include")
123     include_directories("${LLVM_MAIN_SRC_DIR}/tools/clang/include")
124   endif()
125   if (EXISTS "${LLVM_OBJ_ROOT}/tools/clang/include")
126     include_directories("${LLVM_OBJ_ROOT}/tools/clang/include")
127   endif()
128   link_directories("${LLVM_LIBRARY_DIR}")
129
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})
133
134   set(LLDB_BUILT_STANDALONE 1)
135 endif()