xref: /openbsd/gnu/llvm/lldb/source/API/CMakeLists.txt (revision d89ec533)
1if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
2  add_definitions( -DEXPORT_LIBLLDB )
3endif()
4
5get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)
6
7if(LLDB_BUILD_FRAMEWORK)
8  set(option_install_prefix INSTALL_PREFIX ${LLDB_FRAMEWORK_INSTALL_DIR})
9  set(option_framework FRAMEWORK)
10endif()
11
12if(LLDB_ENABLE_PYTHON)
13  get_target_property(python_bindings_dir swig_wrapper_python BINARY_DIR)
14  set(lldb_python_wrapper ${python_bindings_dir}/LLDBWrapPython.cpp)
15endif()
16
17if(LLDB_ENABLE_LUA)
18  get_target_property(lua_bindings_dir swig_wrapper_lua BINARY_DIR)
19  set(lldb_lua_wrapper ${lua_bindings_dir}/LLDBWrapLua.cpp)
20endif()
21
22add_lldb_library(liblldb SHARED ${option_framework}
23  SBAddress.cpp
24  SBAttachInfo.cpp
25  SBBlock.cpp
26  SBBreakpoint.cpp
27  SBBreakpointLocation.cpp
28  SBBreakpointName.cpp
29  SBBreakpointOptionCommon.cpp
30  SBBroadcaster.cpp
31  SBCommandInterpreter.cpp
32  SBCommandInterpreterRunOptions.cpp
33  SBCommandReturnObject.cpp
34  SBCommunication.cpp
35  SBCompileUnit.cpp
36  SBData.cpp
37  SBDebugger.cpp
38  SBDeclaration.cpp
39  SBEnvironment.cpp
40  SBError.cpp
41  SBEvent.cpp
42  SBExecutionContext.cpp
43  SBExpressionOptions.cpp
44  SBFileSpec.cpp
45  SBFile.cpp
46  SBFileSpecList.cpp
47  SBFrame.cpp
48  SBFunction.cpp
49  SBHostOS.cpp
50  SBInstruction.cpp
51  SBInstructionList.cpp
52  SBLanguageRuntime.cpp
53  SBLaunchInfo.cpp
54  SBLineEntry.cpp
55  SBListener.cpp
56  SBMemoryRegionInfo.cpp
57  SBMemoryRegionInfoList.cpp
58  SBModule.cpp
59  SBModuleSpec.cpp
60  SBPlatform.cpp
61  SBProcess.cpp
62  SBProcessInfo.cpp
63  SBQueue.cpp
64  SBQueueItem.cpp
65  SBReproducer.cpp
66  SBSection.cpp
67  SBSourceManager.cpp
68  SBStream.cpp
69  SBStringList.cpp
70  SBStructuredData.cpp
71  SBSymbol.cpp
72  SBSymbolContext.cpp
73  SBSymbolContextList.cpp
74  SBTarget.cpp
75  SBThread.cpp
76  SBThreadCollection.cpp
77  SBThreadPlan.cpp
78  SBTrace.cpp
79  SBType.cpp
80  SBTypeCategory.cpp
81  SBTypeEnumMember.cpp
82  SBTypeFilter.cpp
83  SBTypeFormat.cpp
84  SBTypeNameSpecifier.cpp
85  SBTypeSummary.cpp
86  SBTypeSynthetic.cpp
87  SBValue.cpp
88  SBValueList.cpp
89  SBVariablesOptions.cpp
90  SBWatchpoint.cpp
91  SBUnixSignals.cpp
92  SystemInitializerFull.cpp
93  ${lldb_python_wrapper}
94  ${lldb_lua_wrapper}
95
96  LINK_LIBS
97    lldbBase
98    lldbBreakpoint
99    lldbCore
100    lldbDataFormatters
101    lldbExpression
102    lldbHost
103    lldbInitialization
104    lldbInterpreter
105    lldbSymbol
106    lldbTarget
107    lldbUtility
108    ${LLDB_ALL_PLUGINS}
109  LINK_COMPONENTS
110    Support
111
112  ${option_install_prefix}
113)
114
115# lib/pythonX.Y/dist-packages/lldb/_lldb.so is a symlink to lib/liblldb.so,
116# which depends on lib/libLLVM*.so (BUILD_SHARED_LIBS) or lib/libLLVM-10git.so
117# (LLVM_LINK_LLVM_DYLIB). Add an additional rpath $ORIGIN/../../../../lib so
118# that _lldb.so can be loaded from Python.
119if(LLDB_ENABLE_PYTHON AND (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB) AND UNIX AND NOT APPLE)
120  set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "\$ORIGIN/../../../../lib${LLVM_LIBDIR_SUFFIX}")
121endif()
122
123if(Python3_RPATH)
124  set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "${Python3_RPATH}")
125  set_property(TARGET liblldb APPEND PROPERTY BUILD_RPATH   "${Python3_RPATH}")
126endif()
127
128
129if(LLDB_ENABLE_PYTHON)
130  add_dependencies(liblldb swig_wrapper_python)
131
132  if (MSVC)
133    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
134  else()
135    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
136  endif()
137
138  set_source_files_properties(${lldb_python_wrapper} PROPERTIES GENERATED ON)
139  if (CLANG_CL)
140    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
141      PROPERTY COMPILE_FLAGS " -Wno-unused-function")
142  endif()
143  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
144      NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
145    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
146      PROPERTY COMPILE_FLAGS " -Wno-sequence-point -Wno-cast-qual")
147  endif ()
148endif()
149
150if(LLDB_ENABLE_LUA)
151  add_dependencies(liblldb swig_wrapper_lua)
152  target_include_directories(liblldb PRIVATE ${LUA_INCLUDE_DIR})
153
154  if (MSVC)
155    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
156  else()
157    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
158  endif()
159
160  set_source_files_properties(${lldb_lua_wrapper} PROPERTIES GENERATED ON)
161endif()
162
163set_target_properties(liblldb
164  PROPERTIES
165  VERSION ${LLDB_VERSION}
166)
167
168if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
169  if (NOT LLDB_EXPORT_ALL_SYMBOLS)
170    # If we're not exporting all symbols, we'll want to explicitly set
171    # the exported symbols here.  This prevents 'log enable --stack ...'
172    # from working on some systems but limits the liblldb size.
173    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb namespace")
174    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
175  else()
176    # Don't use an explicit export.  Instead, tell the linker to
177    # export all symbols.
178    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")
179    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb-private.exports)
180  endif()
181  set_target_properties(liblldb_exports PROPERTIES FOLDER "lldb misc")
182endif()
183
184if (NOT MSVC)
185  set_target_properties(liblldb
186    PROPERTIES
187    OUTPUT_NAME lldb
188  )
189endif()
190
191# The Clang expression parser in LLDB requires the Clang resource directory to function.
192if (TARGET clang-resource-headers)
193  # If building alongside Clang, just add a dependency to ensure it is build together with liblldb.
194  add_dependencies(liblldb clang-resource-headers)
195else()
196  # In a standalone build create a symlink from the LLDB library directory that points to the
197  # resource directory in the Clang library directory. LLDB searches relative to its install path,
198  # and the symlink is created in the same relative path as the resource directory of Clang when
199  # building alongside Clang.
200  # When building the LLDB framework, this isn't necessary as there we copy everything we need into
201  # the framework (including the Clang resourece directory).
202  if(NOT LLDB_BUILD_FRAMEWORK)
203    set(LLDB_CLANG_RESOURCE_DIR_PARENT "$<TARGET_FILE_DIR:liblldb>/clang")
204    file(MAKE_DIRECTORY "${LLDB_CLANG_RESOURCE_DIR_PARENT}")
205    add_custom_command(TARGET liblldb POST_BUILD
206      COMMENT "Linking Clang resource dir into LLDB build directory: ${LLDB_CLANG_RESOURCE_DIR_PARENT}"
207      COMMAND ${CMAKE_COMMAND} -E make_directory "${LLDB_CLANG_RESOURCE_DIR_PARENT}"
208      COMMAND ${CMAKE_COMMAND} -E create_symlink "${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}"
209              "${LLDB_CLANG_RESOURCE_DIR_PARENT}/${LLDB_CLANG_RESOURCE_DIR_NAME}"
210    )
211  endif()
212endif()
213
214if(LLDB_BUILD_FRAMEWORK)
215  include(LLDBFramework)
216endif()
217