blob: 4a53d7ef3d0da0ac4d263653fa830df507a466c8 [file] [log] [blame]
Mark de Wevercbaa3592023-05-24 16:12:321cmake_minimum_required(VERSION 3.20.0)
Pavel Labath6512cad2015-07-17 15:50:482
Michał Górny9dd01a52022-10-24 04:31:373if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
4 set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
5endif()
6include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
7 NO_POLICY_SCOPE)
8
Konrad Kleine0e799472019-05-22 13:23:159# Add path for custom modules.
Chris Bieneman22469722017-04-27 16:04:2610set(CMAKE_MODULE_PATH
11 ${CMAKE_MODULE_PATH}
12 "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
13 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
14 )
15
Jonas Devlieghere7f247572019-07-17 16:47:0216# If we are not building as part of LLVM, build LLDB as a standalone project,
17# using LLVM as an external library.
18if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
Haibo Huang79d117f2019-07-29 23:09:3119 project(lldb)
John Ericsondf31ff12022-01-19 06:45:0720 set(LLDB_BUILT_STANDALONE TRUE)
Alex Langford58d38b32022-11-17 21:46:4021 set(LLVM_INCLUDE_TESTS ON CACHE INTERNAL "")
John Ericsondf31ff12022-01-19 06:45:0722endif()
23
24# Must go below project(..)
25include(GNUInstallDirs)
26
Michał Górny52f39852022-10-23 12:47:5027option(LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests." ${LLVM_INCLUDE_TESTS})
28
John Ericsondf31ff12022-01-19 06:45:0729if(LLDB_BUILT_STANDALONE)
Tobias Hietab1356502022-08-05 19:45:5530 set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
Saleem Abdulrasoole56ba3742019-10-29 15:24:1031 set(CMAKE_CXX_STANDARD_REQUIRED YES)
32 set(CMAKE_CXX_EXTENSIONS NO)
Jonas Devlieghere870eb042023-05-15 21:29:2033
34 include(LLDBStandalone)
Jonas Devlieghere7f247572019-07-17 16:47:0235endif()
36
Chris Bieneman22469722017-04-27 16:04:2637include(LLDBConfig)
38include(AddLLDB)
Todd Fialab6ee2f82014-05-28 17:06:0439
Konrad Kleine0e799472019-05-22 13:23:1540# Define the LLDB_CONFIGURATION_xxx matching the build type.
Jonas Devliegherea22301e2020-08-11 05:45:2341if(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
42 add_definitions(-DLLDB_CONFIGURATION_DEBUG)
Chris Bienemane1426312017-07-28 15:39:5043endif()
44
Jonas Devlieghere9d0c5f92019-02-12 00:30:2145if (WIN32)
46 add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
47endif()
48
Jonas Devlieghere4e26cf22019-12-13 18:37:3349if (LLDB_ENABLE_PYTHON)
Lawrence D'Anna4c2cf3a2021-11-16 21:50:1850 set(cachestring_LLDB_PYTHON_RELATIVE_PATH
Lawrence D'Anna63270712021-11-17 21:14:1051 "Path where Python modules are installed, relative to LLDB's install prefix")
Lawrence D'Anna4c2cf3a2021-11-16 21:50:1852 set(cachestring_LLDB_PYTHON_EXE_RELATIVE_PATH
Lawrence D'Anna63270712021-11-17 21:14:1053 "Path to python interpreter exectuable, relative to python's install prefix")
Lawrence D'Annaae389b22021-11-16 22:32:0354 set(cachestring_LLDB_PYTHON_EXT_SUFFIX
55 "Filename extension for native code python modules")
Haibo Huang61f471a2019-10-07 23:49:0156
Lawrence D'Annaae389b22021-11-16 22:32:0357 foreach(var LLDB_PYTHON_RELATIVE_PATH LLDB_PYTHON_EXE_RELATIVE_PATH LLDB_PYTHON_EXT_SUFFIX)
Lawrence D'Anna4c2cf3a2021-11-16 21:50:1858 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 Fiala8422c5a2014-07-04 06:43:4774endif ()
Raphael Isemann6f4fb4e2019-07-12 15:30:5575
Siger Yang67f94e52021-10-12 14:08:0576if (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")
81endif ()
82
Martin Storsjö9a3fab92019-12-22 08:01:0983if (LLDB_ENABLE_PYTHON OR LLDB_ENABLE_LUA)
Jonas Devlieghere6498aff2020-01-09 15:57:5984 add_subdirectory(bindings)
Martin Storsjö9a3fab92019-12-22 08:01:0985endif ()
Jonas Devliegherebf03e172019-12-08 23:32:5786
Raphael Isemann5c5408ce2019-08-15 07:29:5387# 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 Scandale53880b82020-07-17 23:43:0592if(LLVM_ENABLE_MODULES)
Raphael Isemann5c5408ce2019-08-15 07:29:5393 list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen)
94endif()
95
Manoj Gupta1f7b25ea2021-08-13 20:25:1496if(CMAKE_CROSSCOMPILING AND LLDB_BUILT_STANDALONE AND NOT LLDB_TABLEGEN_EXE)
Nathan Lanza0c6ad3d2019-07-18 00:21:5797 set(LLVM_USE_HOST_TOOLS ON)
98 include(CrossCompile)
Nathan Lanza01eb3ab2019-07-18 23:40:2399 if (NOT NATIVE_LLVM_DIR OR NOT NATIVE_Clang_DIR)
Nathan Lanza0c6ad3d2019-07-18 00:21:57100 message(FATAL_ERROR
Nathan Lanza01eb3ab2019-07-18 23:40:23101 "Crosscompiling standalone requires the variables NATIVE_{CLANG,LLVM}_DIR
Nathan Lanza0c6ad3d2019-07-18 00:21:57102 for building the native lldb-tblgen used during the build process.")
103 endif()
104 llvm_create_cross_target(lldb NATIVE "" Release
Nathan Lanza01eb3ab2019-07-18 23:40:23105 -DLLVM_DIR=${NATIVE_LLVM_DIR}
106 -DClang_DIR=${NATIVE_Clang_DIR})
Nathan Lanza0c6ad3d2019-07-18 00:21:57107endif()
108
Jonas Devlieghere7070a0b2019-07-26 18:14:04109# TableGen
Raphael Isemann6f4fb4e2019-07-12 15:30:55110add_subdirectory(utils/TableGen)
Jonas Devlieghere7070a0b2019-07-26 18:14:04111
Joerg Sonnenberger340a1752013-09-25 10:37:32112add_subdirectory(source)
Joerg Sonnenberger340a1752013-09-25 10:37:32113add_subdirectory(tools)
Jonas Devlieghere8c3513f2019-04-29 16:29:10114add_subdirectory(docs)
Chris Bienemancc590602017-10-06 22:21:36115
Jonas Devliegherec1357442020-08-11 15:43:44116if (LLDB_ENABLE_PYTHON)
Jonas Devlieghere9a3dbc92020-07-30 00:56:38117 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 Devliegherec1357442020-08-11 15:43:44122 get_target_property(lldb_python_bindings_dir swig_wrapper_python BINARY_DIR)
António Afonso52381932020-08-22 18:53:08123 finish_swig_python("lldb-python" "${lldb_python_bindings_dir}" "${lldb_python_target_dir}")
Jonas Devlieghere9a3dbc92020-07-30 00:56:38124endif()
125
Siger Yang67f94e52021-10-12 14:08:05126if (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}")
134endif()
135
Tom Stellard9c6c4d672022-08-10 23:56:05136set(LLDB_INCLUDE_UNITTESTS ON)
137if (NOT TARGET llvm_gtest)
138 set(LLDB_INCLUDE_UNITTESTS OFF)
139endif()
140
Chris Bienemancc590602017-10-06 22:21:36141if(LLDB_INCLUDE_TESTS)
142 add_subdirectory(test)
Tom Stellard9c6c4d672022-08-10 23:56:05143 if (LLDB_INCLUDE_UNITTESTS)
144 add_subdirectory(unittests)
145 endif()
Jonas Devliegheree1f6b682020-01-17 06:30:03146 add_subdirectory(utils)
Chris Bienemancc590602017-10-06 22:21:36147endif()
Zachary Turneraeda6262015-02-17 22:20:29148
Stefan Granitz6454a202019-07-18 16:44:45149if(LLDB_BUILT_STANDALONE AND NOT LLVM_ENABLE_IDE)
Stefan Granitz05adc0f2019-07-10 11:09:11150 llvm_distribution_add_targets()
151endif()