Mark de Wever | cbaa359 | 2023-05-24 16:12:32 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 3.20.0) |
Pavel Labath | 6512cad | 2015-07-17 15:50:48 | [diff] [blame] | 2 | |
Michał Górny | 9dd01a5 | 2022-10-24 04:31:37 | [diff] [blame] | 3 | if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) |
| 4 | set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) |
| 5 | endif() |
| 6 | include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake |
| 7 | NO_POLICY_SCOPE) |
| 8 | |
Konrad Kleine | 0e79947 | 2019-05-22 13:23:15 | [diff] [blame] | 9 | # Add path for custom modules. |
Chris Bieneman | 2246972 | 2017-04-27 16:04:26 | [diff] [blame] | 10 | set(CMAKE_MODULE_PATH |
| 11 | ${CMAKE_MODULE_PATH} |
| 12 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake" |
| 13 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" |
| 14 | ) |
| 15 | |
Jonas Devlieghere | 7f24757 | 2019-07-17 16:47:02 | [diff] [blame] | 16 | # If we are not building as part of LLVM, build LLDB as a standalone project, |
| 17 | # using LLVM as an external library. |
| 18 | if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
Haibo Huang | 79d117f | 2019-07-29 23:09:31 | [diff] [blame] | 19 | project(lldb) |
John Ericson | df31ff1 | 2022-01-19 06:45:07 | [diff] [blame] | 20 | set(LLDB_BUILT_STANDALONE TRUE) |
Alex Langford | 58d38b3 | 2022-11-17 21:46:40 | [diff] [blame] | 21 | set(LLVM_INCLUDE_TESTS ON CACHE INTERNAL "") |
John Ericson | df31ff1 | 2022-01-19 06:45:07 | [diff] [blame] | 22 | endif() |
| 23 | |
| 24 | # Must go below project(..) |
| 25 | include(GNUInstallDirs) |
| 26 | |
Michał Górny | 52f3985 | 2022-10-23 12:47:50 | [diff] [blame] | 27 | option(LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests." ${LLVM_INCLUDE_TESTS}) |
| 28 | |
John Ericson | df31ff1 | 2022-01-19 06:45:07 | [diff] [blame] | 29 | if(LLDB_BUILT_STANDALONE) |
Tobias Hieta | b135650 | 2022-08-05 19:45:55 | [diff] [blame] | 30 | set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") |
Saleem Abdulrasool | e56ba374 | 2019-10-29 15:24:10 | [diff] [blame] | 31 | set(CMAKE_CXX_STANDARD_REQUIRED YES) |
| 32 | set(CMAKE_CXX_EXTENSIONS NO) |
Jonas Devlieghere | 870eb04 | 2023-05-15 21:29:20 | [diff] [blame] | 33 | |
| 34 | include(LLDBStandalone) |
Jonas Devlieghere | 7f24757 | 2019-07-17 16:47:02 | [diff] [blame] | 35 | endif() |
| 36 | |
Chris Bieneman | 2246972 | 2017-04-27 16:04:26 | [diff] [blame] | 37 | include(LLDBConfig) |
| 38 | include(AddLLDB) |
Todd Fiala | b6ee2f8 | 2014-05-28 17:06:04 | [diff] [blame] | 39 | |
Konrad Kleine | 0e79947 | 2019-05-22 13:23:15 | [diff] [blame] | 40 | # Define the LLDB_CONFIGURATION_xxx matching the build type. |
Jonas Devlieghere | a22301e | 2020-08-11 05:45:23 | [diff] [blame] | 41 | if(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) |
| 42 | add_definitions(-DLLDB_CONFIGURATION_DEBUG) |
Chris Bieneman | e142631 | 2017-07-28 15:39:50 | [diff] [blame] | 43 | endif() |
| 44 | |
Jonas Devlieghere | 9d0c5f9 | 2019-02-12 00:30:21 | [diff] [blame] | 45 | if (WIN32) |
| 46 | add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) |
| 47 | endif() |
| 48 | |
Jonas Devlieghere | 4e26cf2 | 2019-12-13 18:37:33 | [diff] [blame] | 49 | if (LLDB_ENABLE_PYTHON) |
Lawrence D'Anna | 4c2cf3a | 2021-11-16 21:50:18 | [diff] [blame] | 50 | set(cachestring_LLDB_PYTHON_RELATIVE_PATH |
Lawrence D'Anna | 6327071 | 2021-11-17 21:14:10 | [diff] [blame] | 51 | "Path where Python modules are installed, relative to LLDB's install prefix") |
Lawrence D'Anna | 4c2cf3a | 2021-11-16 21:50:18 | [diff] [blame] | 52 | set(cachestring_LLDB_PYTHON_EXE_RELATIVE_PATH |
Lawrence D'Anna | 6327071 | 2021-11-17 21:14:10 | [diff] [blame] | 53 | "Path to python interpreter exectuable, relative to python's install prefix") |
Lawrence D'Anna | ae389b2 | 2021-11-16 22:32:03 | [diff] [blame] | 54 | set(cachestring_LLDB_PYTHON_EXT_SUFFIX |
| 55 | "Filename extension for native code python modules") |
Haibo Huang | 61f471a | 2019-10-07 23:49:01 | [diff] [blame] | 56 | |
Lawrence D'Anna | ae389b2 | 2021-11-16 22:32:03 | [diff] [blame] | 57 | foreach(var LLDB_PYTHON_RELATIVE_PATH LLDB_PYTHON_EXE_RELATIVE_PATH LLDB_PYTHON_EXT_SUFFIX) |
Lawrence D'Anna | 4c2cf3a | 2021-11-16 21:50:18 | [diff] [blame] | 58 | if(NOT DEFINED ${var} AND NOT CMAKE_CROSSCOMPILING) |
| 59 | execute_process( |
| 60 | COMMAND ${Python3_EXECUTABLE} |
| 61 | ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python/get-python-config.py |
| 62 | ${var} |
| 63 | OUTPUT_VARIABLE value |
| 64 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 65 | file(TO_CMAKE_PATH "${value}" value) |
| 66 | set(${var} ${value} CACHE STRING ${cachestring_${var}}) |
| 67 | else() |
| 68 | if ("${${var}}" STREQUAL "") |
| 69 | message(FATAL_ERROR |
| 70 | "Crosscompiling LLDB with Python requires manually setting ${var}.") |
| 71 | endif() |
| 72 | endif() |
| 73 | endforeach() |
Todd Fiala | 8422c5a | 2014-07-04 06:43:47 | [diff] [blame] | 74 | endif () |
Raphael Isemann | 6f4fb4e | 2019-07-12 15:30:55 | [diff] [blame] | 75 | |
Siger Yang | 67f94e5 | 2021-10-12 14:08:05 | [diff] [blame] | 76 | if (LLDB_ENABLE_LUA) |
| 77 | find_program(Lua_EXECUTABLE lua5.3) |
| 78 | set(LLDB_LUA_DEFAULT_RELATIVE_PATH "lib/lua/5.3") |
| 79 | set(LLDB_LUA_RELATIVE_PATH ${LLDB_LUA_DEFAULT_RELATIVE_PATH} |
| 80 | CACHE STRING "Path where Lua modules are installed, relative to install prefix") |
| 81 | endif () |
| 82 | |
Martin Storsjö | 9a3fab9 | 2019-12-22 08:01:09 | [diff] [blame] | 83 | if (LLDB_ENABLE_PYTHON OR LLDB_ENABLE_LUA) |
Jonas Devlieghere | 6498aff | 2020-01-09 15:57:59 | [diff] [blame] | 84 | add_subdirectory(bindings) |
Martin Storsjö | 9a3fab9 | 2019-12-22 08:01:09 | [diff] [blame] | 85 | endif () |
Jonas Devlieghere | bf03e17 | 2019-12-08 23:32:57 | [diff] [blame] | 86 | |
Raphael Isemann | 5c5408ce | 2019-08-15 07:29:53 | [diff] [blame] | 87 | # We need the headers generated by instrinsics_gen before we can compile |
| 88 | # any source file in LLDB as the imported Clang modules might include |
| 89 | # some of these generated headers. This approach is copied from Clang's main |
| 90 | # CMakeLists.txt, so it should kept in sync the code in Clang which was added |
| 91 | # in llvm-svn 308844. |
Michele Scandale | 53880b8 | 2020-07-17 23:43:05 | [diff] [blame] | 92 | if(LLVM_ENABLE_MODULES) |
Raphael Isemann | 5c5408ce | 2019-08-15 07:29:53 | [diff] [blame] | 93 | list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen) |
| 94 | endif() |
| 95 | |
Manoj Gupta | 1f7b25ea | 2021-08-13 20:25:14 | [diff] [blame] | 96 | if(CMAKE_CROSSCOMPILING AND LLDB_BUILT_STANDALONE AND NOT LLDB_TABLEGEN_EXE) |
Nathan Lanza | 0c6ad3d | 2019-07-18 00:21:57 | [diff] [blame] | 97 | set(LLVM_USE_HOST_TOOLS ON) |
| 98 | include(CrossCompile) |
Nathan Lanza | 01eb3ab | 2019-07-18 23:40:23 | [diff] [blame] | 99 | if (NOT NATIVE_LLVM_DIR OR NOT NATIVE_Clang_DIR) |
Nathan Lanza | 0c6ad3d | 2019-07-18 00:21:57 | [diff] [blame] | 100 | message(FATAL_ERROR |
Nathan Lanza | 01eb3ab | 2019-07-18 23:40:23 | [diff] [blame] | 101 | "Crosscompiling standalone requires the variables NATIVE_{CLANG,LLVM}_DIR |
Nathan Lanza | 0c6ad3d | 2019-07-18 00:21:57 | [diff] [blame] | 102 | for building the native lldb-tblgen used during the build process.") |
| 103 | endif() |
| 104 | llvm_create_cross_target(lldb NATIVE "" Release |
Nathan Lanza | 01eb3ab | 2019-07-18 23:40:23 | [diff] [blame] | 105 | -DLLVM_DIR=${NATIVE_LLVM_DIR} |
| 106 | -DClang_DIR=${NATIVE_Clang_DIR}) |
Nathan Lanza | 0c6ad3d | 2019-07-18 00:21:57 | [diff] [blame] | 107 | endif() |
| 108 | |
Jonas Devlieghere | 7070a0b | 2019-07-26 18:14:04 | [diff] [blame] | 109 | # TableGen |
Raphael Isemann | 6f4fb4e | 2019-07-12 15:30:55 | [diff] [blame] | 110 | add_subdirectory(utils/TableGen) |
Jonas Devlieghere | 7070a0b | 2019-07-26 18:14:04 | [diff] [blame] | 111 | |
Joerg Sonnenberger | 340a175 | 2013-09-25 10:37:32 | [diff] [blame] | 112 | add_subdirectory(source) |
Joerg Sonnenberger | 340a175 | 2013-09-25 10:37:32 | [diff] [blame] | 113 | add_subdirectory(tools) |
Jonas Devlieghere | 8c3513f | 2019-04-29 16:29:10 | [diff] [blame] | 114 | add_subdirectory(docs) |
Chris Bieneman | cc59060 | 2017-10-06 22:21:36 | [diff] [blame] | 115 | |
Jonas Devlieghere | c135744 | 2020-08-11 15:43:44 | [diff] [blame] | 116 | if (LLDB_ENABLE_PYTHON) |
Jonas Devlieghere | 9a3dbc9 | 2020-07-30 00:56:38 | [diff] [blame] | 117 | if(LLDB_BUILD_FRAMEWORK) |
| 118 | set(lldb_python_target_dir "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Python/lldb") |
| 119 | else() |
| 120 | set(lldb_python_target_dir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_PYTHON_RELATIVE_PATH}/lldb") |
| 121 | endif() |
Jonas Devlieghere | c135744 | 2020-08-11 15:43:44 | [diff] [blame] | 122 | get_target_property(lldb_python_bindings_dir swig_wrapper_python BINARY_DIR) |
António Afonso | 5238193 | 2020-08-22 18:53:08 | [diff] [blame] | 123 | finish_swig_python("lldb-python" "${lldb_python_bindings_dir}" "${lldb_python_target_dir}") |
Jonas Devlieghere | 9a3dbc9 | 2020-07-30 00:56:38 | [diff] [blame] | 124 | endif() |
| 125 | |
Siger Yang | 67f94e5 | 2021-10-12 14:08:05 | [diff] [blame] | 126 | if (LLDB_ENABLE_LUA) |
| 127 | if(LLDB_BUILD_FRAMEWORK) |
| 128 | set(lldb_lua_target_dir "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Lua") |
| 129 | else() |
| 130 | set(lldb_lua_target_dir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_LUA_RELATIVE_PATH}") |
| 131 | endif() |
| 132 | get_target_property(lldb_lua_bindings_dir swig_wrapper_lua BINARY_DIR) |
| 133 | finish_swig_lua("lldb-lua" "${lldb_lua_bindings_dir}" "${lldb_lua_target_dir}") |
| 134 | endif() |
| 135 | |
Tom Stellard | 9c6c4d67 | 2022-08-10 23:56:05 | [diff] [blame] | 136 | set(LLDB_INCLUDE_UNITTESTS ON) |
| 137 | if (NOT TARGET llvm_gtest) |
| 138 | set(LLDB_INCLUDE_UNITTESTS OFF) |
| 139 | endif() |
| 140 | |
Chris Bieneman | cc59060 | 2017-10-06 22:21:36 | [diff] [blame] | 141 | if(LLDB_INCLUDE_TESTS) |
| 142 | add_subdirectory(test) |
Tom Stellard | 9c6c4d67 | 2022-08-10 23:56:05 | [diff] [blame] | 143 | if (LLDB_INCLUDE_UNITTESTS) |
| 144 | add_subdirectory(unittests) |
| 145 | endif() |
Jonas Devlieghere | e1f6b68 | 2020-01-17 06:30:03 | [diff] [blame] | 146 | add_subdirectory(utils) |
Chris Bieneman | cc59060 | 2017-10-06 22:21:36 | [diff] [blame] | 147 | endif() |
Zachary Turner | aeda626 | 2015-02-17 22:20:29 | [diff] [blame] | 148 | |
Stefan Granitz | 6454a20 | 2019-07-18 16:44:45 | [diff] [blame] | 149 | if(LLDB_BUILT_STANDALONE AND NOT LLVM_ENABLE_IDE) |
Stefan Granitz | 05adc0f | 2019-07-10 11:09:11 | [diff] [blame] | 150 | llvm_distribution_add_targets() |
| 151 | endif() |