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