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 NOT APPLE)
12  message(FATAL_ERROR "LLDB.framework cannot be generated unless targeting Apple platforms.")
13endif()
14
15add_lldb_library(liblldb SHARED
16  SBAddress.cpp
17  SBAttachInfo.cpp
18  SBBlock.cpp
19  SBBreakpoint.cpp
20  SBBreakpointLocation.cpp
21  SBBroadcaster.cpp
22  SBCommandInterpreter.cpp
23  SBCommandReturnObject.cpp
24  SBCommunication.cpp
25  SBCompileUnit.cpp
26  SBData.cpp
27  SBDebugger.cpp
28  SBDeclaration.cpp
29  SBError.cpp
30  SBEvent.cpp
31  SBExecutionContext.cpp
32  SBExpressionOptions.cpp
33  SBFileSpec.cpp
34  SBFileSpecList.cpp
35  SBFrame.cpp
36  SBFunction.cpp
37  SBHostOS.cpp
38  SBInstruction.cpp
39  SBInstructionList.cpp
40  SBLanguageRuntime.cpp
41  SBLaunchInfo.cpp
42  SBLineEntry.cpp
43  SBListener.cpp
44  SBMemoryRegionInfo.cpp
45  SBMemoryRegionInfoList.cpp
46  SBModule.cpp
47  SBModuleSpec.cpp
48  SBPlatform.cpp
49  SBProcess.cpp
50  SBQueue.cpp
51  SBQueueItem.cpp
52  SBSection.cpp
53  SBSourceManager.cpp
54  SBStream.cpp
55  SBStringList.cpp
56  SBStructuredData.cpp
57  SBSymbol.cpp
58  SBSymbolContext.cpp
59  SBSymbolContextList.cpp
60  SBTarget.cpp
61  SBThread.cpp
62  SBThreadCollection.cpp
63  SBThreadPlan.cpp
64  SBType.cpp
65  SBTypeCategory.cpp
66  SBTypeEnumMember.cpp
67  SBTypeFilter.cpp
68  SBTypeFormat.cpp
69  SBTypeNameSpecifier.cpp
70  SBTypeSummary.cpp
71  SBTypeSynthetic.cpp
72  SBValue.cpp
73  SBValueList.cpp
74  SBVariablesOptions.cpp
75  SBWatchpoint.cpp
76  SBUnixSignals.cpp
77  SystemInitializerFull.cpp
78  ${LLDB_WRAP_PYTHON}
79  )
80
81if (LLVM_ENABLE_WERROR)
82  if (MSVC)
83    set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
84  else()
85    set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
86  endif()
87endif()
88
89# This should not be part of LLDBDependencies.cmake, because we don't
90# want every single library taking a dependency on the script interpreters.
91target_link_libraries(liblldb PRIVATE
92  lldbPluginScriptInterpreterNone
93  lldbPluginScriptInterpreterPython
94  )
95
96set_target_properties(liblldb
97  PROPERTIES
98  VERSION ${LLDB_VERSION}
99  )
100
101if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
102  if (NOT LLDB_EXPORT_ALL_SYMBOLS)
103    # If we're not exporting all symbols, we'll want to explicitly set
104    # the exported symbols here.  This prevents 'log enable --stack ...'
105    # from working on some systems but limits the liblldb size.
106    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb namespace")
107    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
108  else()
109    # Don't use an explicit export.  Instead, tell the linker to
110    # export all symbols.
111    MESSAGE("-- Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")
112    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb-private.exports)
113  endif()
114endif()
115
116if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
117  # Only MSVC has the ABI compatibility problem and avoids using FindPythonLibs,
118  # so only it needs to explicitly link against ${PYTHON_LIBRARY}
119  if (MSVC AND NOT LLDB_DISABLE_PYTHON)
120    target_link_libraries(liblldb PRIVATE ${PYTHON_LIBRARY})
121  endif()
122else()
123  set_target_properties(liblldb
124    PROPERTIES
125    OUTPUT_NAME lldb
126    )
127endif()
128
129if (LLDB_WRAP_PYTHON)
130  add_dependencies(liblldb swig_wrapper)
131endif()
132target_link_libraries(liblldb PRIVATE ${LLDB_SYSTEM_LIBS})
133
134if(LLDB_BUILD_FRAMEWORK)
135  file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h)
136  set_target_properties(liblldb PROPERTIES
137    OUTPUT_NAME LLDB
138    FRAMEWORK On
139    FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION}
140    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${LLDB_FRAMEWORK_INSTALL_DIR}
141    PUBLIC_HEADER "${public_headers}")
142
143  set(symlink_commands
144    COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:liblldb>
145    COMMAND ${CMAKE_COMMAND} -E create_symlink ${LLDB_SOURCE_DIR}/include/lldb/API $<TARGET_FILE_DIR:liblldb>/Headers
146    COMMAND ${CMAKE_COMMAND} -E create_symlink Versions/Current/Headers ${CMAKE_BINARY_DIR}/${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Headers
147    COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/clang/${LLDB_VERSION} $<TARGET_FILE_DIR:liblldb>/Resources/Clang
148    )
149
150  # This works around a CMake bug where POST_BUILD steps are not applied to
151  # framework targets. This fix is merged into the CMake release branch and
152  # should be available with CMake 3.7 rc2:
153  # https://gitlab.kitware.com/cmake/cmake/issues/16363
154  if(CMAKE_VERSION VERSION_GREATER 3.6.99)
155    add_custom_command(TARGET liblldb POST_BUILD ${symlink_commands})
156  else()
157    add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Versions/${LLDB_FRAMEWORK_VERSION}/Headers
158      ${symlink_commands})
159    add_custom_target(lldb_header_symlink
160      DEPENDS ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Versions/${LLDB_FRAMEWORK_VERSION}/Headers)
161  endif()
162endif()
163
164