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