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