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