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_ENABLE_PYTHON)
8  get_target_property(lldb_bindings_dir swig_wrapper BINARY_DIR)
9  set(lldb_python_wrapper ${lldb_bindings_dir}/LLDBWrapPython.cpp)
10endif()
11
12if(LLDB_ENABLE_LUA)
13  get_target_property(lldb_bindings_dir swig_wrapper_lua BINARY_DIR)
14  set(lldb_lua_wrapper ${lldb_bindings_dir}/LLDBWrapLua.cpp)
15endif()
16
17if(LLDB_BUILD_FRAMEWORK)
18  set(option_install_prefix INSTALL_PREFIX ${LLDB_FRAMEWORK_INSTALL_DIR})
19  set(option_framework FRAMEWORK)
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  SBCommandReturnObject.cpp
33  SBCommunication.cpp
34  SBCompileUnit.cpp
35  SBData.cpp
36  SBDebugger.cpp
37  SBDeclaration.cpp
38  SBEnvironment.cpp
39  SBError.cpp
40  SBEvent.cpp
41  SBExecutionContext.cpp
42  SBExpressionOptions.cpp
43  SBFileSpec.cpp
44  SBFile.cpp
45  SBFileSpecList.cpp
46  SBFrame.cpp
47  SBFunction.cpp
48  SBHostOS.cpp
49  SBInstruction.cpp
50  SBInstructionList.cpp
51  SBLanguageRuntime.cpp
52  SBLaunchInfo.cpp
53  SBLineEntry.cpp
54  SBListener.cpp
55  SBMemoryRegionInfo.cpp
56  SBMemoryRegionInfoList.cpp
57  SBModule.cpp
58  SBModuleSpec.cpp
59  SBPlatform.cpp
60  SBProcess.cpp
61  SBProcessInfo.cpp
62  SBQueue.cpp
63  SBQueueItem.cpp
64  SBReproducer.cpp
65  SBSection.cpp
66  SBSourceManager.cpp
67  SBStream.cpp
68  SBStringList.cpp
69  SBStructuredData.cpp
70  SBSymbol.cpp
71  SBSymbolContext.cpp
72  SBSymbolContextList.cpp
73  SBTarget.cpp
74  SBThread.cpp
75  SBThreadCollection.cpp
76  SBThreadPlan.cpp
77  SBTrace.cpp
78  SBTraceOptions.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 (MSVC)
124  set_source_files_properties(SBReproducer.cpp PROPERTIES COMPILE_FLAGS /bigobj)
125endif()
126
127if(lldb_python_wrapper)
128  add_dependencies(liblldb swig_wrapper)
129
130  if (MSVC)
131    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
132  else()
133    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
134  endif()
135
136  set_source_files_properties(${lldb_python_wrapper} PROPERTIES GENERATED ON)
137  if (CLANG_CL)
138    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
139      PROPERTY COMPILE_FLAGS " -Wno-unused-function")
140  endif()
141  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
142      NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
143    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
144      PROPERTY COMPILE_FLAGS " -Wno-sequence-point -Wno-cast-qual")
145  endif ()
146endif()
147
148if(lldb_lua_wrapper)
149  add_dependencies(liblldb swig_wrapper_lua)
150  target_include_directories(liblldb PRIVATE ${LUA_INCLUDE_DIR})
151
152  if (MSVC)
153    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
154  else()
155    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
156  endif()
157
158  set_source_files_properties(${lldb_lua_wrapper} PROPERTIES GENERATED ON)
159endif()
160
161set_target_properties(liblldb
162  PROPERTIES
163  VERSION ${LLDB_VERSION}
164)
165
166if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
167  if (NOT LLDB_EXPORT_ALL_SYMBOLS)
168    # If we're not exporting all symbols, we'll want to explicitly set
169    # the exported symbols here.  This prevents 'log enable --stack ...'
170    # from working on some systems but limits the liblldb size.
171    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb namespace")
172    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
173  else()
174    # Don't use an explicit export.  Instead, tell the linker to
175    # export all symbols.
176    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")
177    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb-private.exports)
178  endif()
179  set_target_properties(liblldb_exports PROPERTIES FOLDER "lldb misc")
180endif()
181
182if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
183  # Only MSVC has the ABI compatibility problem and avoids using FindPythonLibs,
184  # so only it needs to explicitly link against ${PYTHON_LIBRARIES}
185  if (MSVC AND LLDB_ENABLE_PYTHON)
186    target_link_libraries(liblldb PRIVATE ${PYTHON_LIBRARIES})
187  endif()
188else()
189  set_target_properties(liblldb
190    PROPERTIES
191    OUTPUT_NAME lldb
192  )
193endif()
194
195if (NOT LLDB_BUILT_STANDALONE)
196  add_dependencies(liblldb clang-resource-headers)
197endif()
198
199if(LLDB_BUILD_FRAMEWORK)
200  include(LLDBFramework)
201endif()
202