1if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
2  add_definitions( -DEXPORT_LIBLLDB )
3endif()
4
5# Include this so that add_lldb_library() has the list of dependencies
6# for liblldb to link against
7include(${LLDB_PROJECT_ROOT}/cmake/LLDBDependencies.cmake)
8
9option(LLDB_BUILD_FRAMEWORK "Build the Darwin LLDB.framework" Off)
10
11if(LLDB_BUILD_FRAMEWORK AND CMAKE_VERSION VERSION_LESS 3.7)
12  message(FATAL_ERROR "LLDB_BUILD_FRAMEWORK is not supported on CMake < 3.7")
13endif()
14
15if (LLDB_BUILD_FRAMEWORK AND NOT APPLE)
16  message(FATAL_ERROR "LLDB.framework cannot be generated unless targeting Apple platforms.")
17endif()
18
19get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)
20
21add_lldb_library(liblldb SHARED
22  SBAddress.cpp
23  SBAttachInfo.cpp
24  SBBlock.cpp
25  SBBreakpoint.cpp
26  SBBreakpointLocation.cpp
27  SBBreakpointName.cpp
28  SBBreakpointOptionCommon.cpp
29  SBBroadcaster.cpp
30  SBCommandInterpreter.cpp
31  SBCommandReturnObject.cpp
32  SBCommunication.cpp
33  SBCompileUnit.cpp
34  SBData.cpp
35  SBDebugger.cpp
36  SBDeclaration.cpp
37  SBError.cpp
38  SBEvent.cpp
39  SBExecutionContext.cpp
40  SBExpressionOptions.cpp
41  SBFileSpec.cpp
42  SBFileSpecList.cpp
43  SBFrame.cpp
44  SBFunction.cpp
45  SBHostOS.cpp
46  SBInstruction.cpp
47  SBInstructionList.cpp
48  SBLanguageRuntime.cpp
49  SBLaunchInfo.cpp
50  SBLineEntry.cpp
51  SBListener.cpp
52  SBMemoryRegionInfo.cpp
53  SBMemoryRegionInfoList.cpp
54  SBModule.cpp
55  SBModuleSpec.cpp
56  SBPlatform.cpp
57  SBProcess.cpp
58  SBProcessInfo.cpp
59  SBQueue.cpp
60  SBQueueItem.cpp
61  SBSection.cpp
62  SBSourceManager.cpp
63  SBStream.cpp
64  SBStringList.cpp
65  SBStructuredData.cpp
66  SBSymbol.cpp
67  SBSymbolContext.cpp
68  SBSymbolContextList.cpp
69  SBTarget.cpp
70  SBThread.cpp
71  SBThreadCollection.cpp
72  SBThreadPlan.cpp
73  SBTrace.cpp
74  SBTraceOptions.cpp
75  SBType.cpp
76  SBTypeCategory.cpp
77  SBTypeEnumMember.cpp
78  SBTypeFilter.cpp
79  SBTypeFormat.cpp
80  SBTypeNameSpecifier.cpp
81  SBTypeSummary.cpp
82  SBTypeSynthetic.cpp
83  SBValue.cpp
84  SBValueList.cpp
85  SBVariablesOptions.cpp
86  SBWatchpoint.cpp
87  SBUnixSignals.cpp
88  SystemInitializerFull.cpp
89  ${LLDB_WRAP_PYTHON}
90
91  LINK_LIBS
92    lldbBase
93    lldbBreakpoint
94    lldbCore
95    lldbDataFormatters
96    lldbExpression
97    lldbHost
98    lldbInitialization
99    lldbInterpreter
100    lldbSymbol
101    lldbTarget
102    lldbUtility
103    ${LLDB_ALL_PLUGINS}
104  LINK_COMPONENTS
105    Support
106  )
107
108if (LLVM_ENABLE_WERROR)
109  if (MSVC)
110    set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
111  else()
112    set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
113  endif()
114endif()
115
116# This should not be part of LLDBDependencies.cmake, because we don't
117# want every single library taking a dependency on the script interpreters.
118target_link_libraries(liblldb PRIVATE
119  lldbPluginScriptInterpreterNone
120  lldbPluginScriptInterpreterPython
121  )
122
123set_target_properties(liblldb
124  PROPERTIES
125  VERSION ${LLDB_VERSION}
126  )
127
128if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
129  if (NOT LLDB_EXPORT_ALL_SYMBOLS)
130    # If we're not exporting all symbols, we'll want to explicitly set
131    # the exported symbols here.  This prevents 'log enable --stack ...'
132    # from working on some systems but limits the liblldb size.
133    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb namespace")
134    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
135  else()
136    # Don't use an explicit export.  Instead, tell the linker to
137    # export all symbols.
138    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")
139    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb-private.exports)
140  endif()
141endif()
142
143if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
144  # Only MSVC has the ABI compatibility problem and avoids using FindPythonLibs,
145  # so only it needs to explicitly link against ${PYTHON_LIBRARY}
146  if (MSVC AND NOT LLDB_DISABLE_PYTHON)
147    target_link_libraries(liblldb PRIVATE ${PYTHON_LIBRARY})
148  endif()
149else()
150  set_target_properties(liblldb
151    PROPERTIES
152    OUTPUT_NAME lldb
153    )
154endif()
155
156if (LLDB_WRAP_PYTHON)
157  add_dependencies(liblldb swig_wrapper)
158endif()
159target_link_libraries(liblldb PRIVATE ${LLDB_SYSTEM_LIBS})
160
161if(LLDB_BUILD_FRAMEWORK)
162  file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h
163      ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)
164  file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)
165  file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h)
166  list(REMOVE_ITEM root_public_headers ${root_private_headers})
167
168  foreach(header ${public_headers} ${root_public_headers} ${LLDB_SOURCE_DIR}/include/lldb/Utility/SharingPtr.h)
169    get_filename_component(basename ${header} NAME)
170    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders/${basename}
171                       DEPENDS ${header}
172                       COMMAND ${CMAKE_COMMAND} -E copy ${header} ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders/${basename})
173    list(APPEND framework_headers ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders/${basename})
174  endforeach()
175
176  add_custom_target(lldb-framework-headers DEPENDS ${framework_headers}
177                    COMMAND ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.sh ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders ${LLDB_VERSION})
178  add_dependencies(liblldb lldb-framework-headers)
179
180  set_target_properties(liblldb PROPERTIES
181    OUTPUT_NAME LLDB
182    FRAMEWORK On
183    FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION}
184    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${LLDB_FRAMEWORK_INSTALL_DIR}
185    PUBLIC_HEADER "${framework_headers}")
186
187  if(NOT IOS)
188    add_custom_command(TARGET liblldb POST_BUILD
189      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders $<TARGET_FILE_DIR:liblldb>/Headers
190      COMMAND ${CMAKE_COMMAND} -E create_symlink Versions/Current/Headers ${CMAKE_BINARY_DIR}/${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Headers
191      COMMAND ${CMAKE_COMMAND} -E create_symlink ${LLDB_FRAMEWORK_VERSION} ${CMAKE_BINARY_DIR}/${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Versions/Current
192      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/clang/${LLDB_VERSION} $<TARGET_FILE_DIR:liblldb>/Resources/Clang
193      )
194  else()
195    add_custom_command(TARGET liblldb POST_BUILD
196      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders $<TARGET_FILE_DIR:liblldb>/Headers
197      )
198  endif()
199
200endif()
201
202