brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · ac47580 Raw
374 lines · plain
1get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)2 3if(LLDB_BUILD_FRAMEWORK)4  set(option_install_prefix INSTALL_PREFIX ${LLDB_FRAMEWORK_INSTALL_DIR})5  set(option_framework FRAMEWORK)6endif()7 8if(LLDB_ENABLE_PYTHON)9  if (APPLE AND LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY)10    # Work around an issue with the Python headers, which have a modular include11    # inside an extern "C" block.12    remove_module_flags()13  endif()14  get_target_property(python_bindings_dir swig_wrapper_python BINARY_DIR)15  set(lldb_python_wrapper ${python_bindings_dir}/LLDBWrapPython.cpp)16endif()17 18if(LLDB_ENABLE_LUA)19  get_target_property(lua_bindings_dir swig_wrapper_lua BINARY_DIR)20  set(lldb_lua_wrapper ${lua_bindings_dir}/LLDBWrapLua.cpp)21endif()22 23# Generate SBLanguages.h from Dwarf.def.24set(sb_languages_file25  ${CMAKE_CURRENT_BINARY_DIR}/../../include/lldb/API/SBLanguages.h)26set(sb_languages_generator27  ${LLDB_SOURCE_DIR}/scripts/generate-sbapi-dwarf-enum.py)28add_custom_command(29  COMMENT "Generating SBLanguages.h from Dwarf.def"30  COMMAND "${Python3_EXECUTABLE}"31      ${sb_languages_generator}32      ${LLVM_MAIN_INCLUDE_DIR}/llvm/BinaryFormat/Dwarf.def33      -o ${sb_languages_file}34  OUTPUT ${sb_languages_file}35  DEPENDS ${LLVM_MAIN_INCLUDE_DIR}/llvm/BinaryFormat/Dwarf.def36          ${sb_languages_generator}37  WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR}38)39add_custom_target(lldb-sbapi-dwarf-enums40  DEPENDS ${sb_languages_file})41set_target_properties(lldb-sbapi-dwarf-enums PROPERTIES FOLDER "LLDB/Tablegenning")42 43add_lldb_library(liblldb SHARED ${option_framework}44  SBAddress.cpp45  SBAddressRange.cpp46  SBAddressRangeList.cpp47  SBAttachInfo.cpp48  SBBlock.cpp49  SBBreakpoint.cpp50  SBBreakpointLocation.cpp51  SBBreakpointName.cpp52  SBBreakpointOptionCommon.cpp53  SBBroadcaster.cpp54  SBCommandInterpreter.cpp55  SBCommandInterpreterRunOptions.cpp56  SBCommandReturnObject.cpp57  SBCommunication.cpp58  SBCompileUnit.cpp59  SBData.cpp60  SBDebugger.cpp61  SBDeclaration.cpp62  SBEnvironment.cpp63  SBError.cpp64  SBEvent.cpp65  SBExecutionContext.cpp66  SBExpressionOptions.cpp67  SBFile.cpp68  SBFileSpec.cpp69  SBFileSpecList.cpp70  SBFormat.cpp71  SBFrame.cpp72  SBFrameList.cpp73  SBFunction.cpp74  SBHostOS.cpp75  SBInstruction.cpp76  SBInstructionList.cpp77  SBLanguageRuntime.cpp78  SBLaunchInfo.cpp79  SBLineEntry.cpp80  SBListener.cpp81  SBMemoryRegionInfo.cpp82  SBMemoryRegionInfoList.cpp83  SBModule.cpp84  SBModuleSpec.cpp85  SBMutex.cpp86  SBPlatform.cpp87  SBProcess.cpp88  SBProcessInfo.cpp89  SBProcessInfoList.cpp90  SBProgress.cpp91  SBQueue.cpp92  SBQueueItem.cpp93  SBReproducer.cpp94  SBSaveCoreOptions.cpp95  SBScriptObject.cpp96  SBSection.cpp97  SBSourceManager.cpp98  SBStatisticsOptions.cpp99  SBStream.cpp100  SBStringList.cpp101  SBStructuredData.cpp102  SBSymbol.cpp103  SBSymbolContext.cpp104  SBSymbolContextList.cpp105  SBTarget.cpp106  SBThread.cpp107  SBThreadCollection.cpp108  SBThreadPlan.cpp109  SBTrace.cpp110  SBTraceCursor.cpp111  SBType.cpp112  SBTypeCategory.cpp113  SBTypeEnumMember.cpp114  SBTypeFilter.cpp115  SBTypeFormat.cpp116  SBTypeNameSpecifier.cpp117  SBTypeSummary.cpp118  SBTypeSynthetic.cpp119  SBUnixSignals.cpp120  SBValue.cpp121  SBValueList.cpp122  SBVariablesOptions.cpp123  SBWatchpoint.cpp124  SBWatchpointOptions.cpp125  SystemInitializerFull.cpp126  ${lldb_python_wrapper}127  ${lldb_lua_wrapper}128 129  ADDITIONAL_HEADER_DIRS130    ${LLDB_INCLUDE_DIR}/lldb/API131  DEPENDS132    lldb-sbapi-dwarf-enums133 134  LINK_COMPONENTS135    Support136  LINK_LIBS137    lldbBreakpoint138    lldbCore139    lldbDataFormatters140    lldbExpression141    lldbHost142    lldbInitialization143    lldbInterpreter144    lldbSymbol145    lldbTarget146    lldbUtility147    lldbValueObject148    lldbVersion149    ${LLDB_ALL_PLUGINS}150 151  ${option_install_prefix}152)153 154# lib/pythonX.Y/dist-packages/lldb/_lldb.so is a symlink to lib/liblldb.so,155# which depends on lib/libLLVM*.so (BUILD_SHARED_LIBS) or lib/libLLVM-10git.so156# (LLVM_LINK_LLVM_DYLIB). Add an additional rpath $ORIGIN/../../../../lib so157# that _lldb.so can be loaded from Python.158if(LLDB_ENABLE_PYTHON AND (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB) AND UNIX AND NOT APPLE)159  set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "\$ORIGIN/../../../../lib${LLVM_LIBDIR_SUFFIX}")160endif()161 162if(Python3_RPATH)163  set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "${Python3_RPATH}")164  set_property(TARGET liblldb APPEND PROPERTY BUILD_RPATH   "${Python3_RPATH}")165endif()166 167 168if(LLDB_ENABLE_PYTHON)169  add_dependencies(liblldb swig_wrapper_python)170 171  if (MSVC)172    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")173  else()174    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")175  endif()176 177  set_source_files_properties(${lldb_python_wrapper} PROPERTIES GENERATED ON)178  if (CLANG_CL)179    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING180      PROPERTY COMPILE_FLAGS " -Wno-unused-function")181  endif()182  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND183      NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")184    set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING185      PROPERTY COMPILE_FLAGS " -Wno-sequence-point -Wno-cast-qual")186  endif ()187endif()188 189if(LLDB_ENABLE_LUA)190  add_dependencies(liblldb swig_wrapper_lua)191  target_include_directories(liblldb PRIVATE ${LUA_INCLUDE_DIR})192 193  if (MSVC)194    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")195  else()196    set_property(SOURCE ${lldb_lua_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")197  endif()198 199  set_source_files_properties(${lldb_lua_wrapper} PROPERTIES GENERATED ON)200endif()201 202set_target_properties(liblldb203  PROPERTIES204  VERSION ${LLDB_VERSION}205)206 207target_compile_definitions(liblldb PRIVATE LLDB_IN_LIBLLDB)208if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")209  if (NOT LLDB_EXPORT_ALL_SYMBOLS)210    # If we're not exporting all symbols, we'll want to explicitly set211    # the exported symbols here.  This prevents 'log enable --stack ...'212    # from working on some systems but limits the liblldb size.213    message(STATUS "Symbols (liblldb): exporting all symbols from the lldb namespace")214    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)215  elseif (NOT LLDB_EXPORT_ALL_SYMBOLS_EXPORTS_FILE)216    # Don't use an explicit export. Instead, tell the linker to export all symbols.217    message(STATUS "Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")218    message(WARNING "Private LLDB symbols frequently change and no API stability is guaranteed. "219                    "Only the SB API is guaranteed to be stable.")220    add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb-private.exports)221  else ()222    message(STATUS "Symbols (liblldb): exporting all symbols specified in the exports "223            " file '${LLDB_EXPORT_ALL_SYMBOLS_EXPORTS_FILE}'")224    message(WARNING "Private LLDB symbols frequently change and no API stability is guaranteed. "225                    "Only the SB API is guaranteed to be stable.")226    add_llvm_symbol_exports(liblldb "${LLDB_EXPORT_ALL_SYMBOLS_EXPORTS_FILE}")227  endif()228elseif (LLDB_EXPORT_ALL_SYMBOLS)229  message(STATUS "Symbols (liblldb): exporting all symbols from the lldb and lldb_private namespaces")230 231  # Pull out the various lldb libraries linked into liblldb, these will be used232  # when looking for symbols to extract. We ignore most plugin libraries here,233  # because we may expose more symbols than the DLL limit and these symbols234  # aren't useful to expose.235  get_target_property(all_liblldb_libs liblldb LINK_LIBRARIES)236  set(lldb_libs "")237  foreach(lib ${all_liblldb_libs})238    if(TARGET ${lib} AND ${lib} MATCHES "^lldb" AND239       (${lib} IN_LIST LLDB_EXPORT_ALL_SYMBOLS_PLUGINS OR240        NOT ${lib} MATCHES "^lldbPlugin"))241      get_target_property(lib_type ${lib} TYPE)242      if("${lib_type}" STREQUAL "STATIC_LIBRARY")243        list(APPEND lldb_libs ${lib})244      endif()245    endif()246  endforeach(lib)247  list(REMOVE_DUPLICATES lldb_libs)248 249  # Extract all of the private symbols and produce a single file we can use for250  # the exports.251  set(exported_symbol_file ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/liblldb_private.symbols)252  get_host_tool_path(llvm-nm LLVM_NM llvm_nm_exe llvm_nm_target)253  add_custom_command(254    OUTPUT ${exported_symbol_file}255    COMMAND "${Python3_EXECUTABLE}"256      ${LLDB_SOURCE_DIR}/scripts/msvc_extract_private_symbols.py257      ${lldb_libs} -o ${exported_symbol_file} --nm=${llvm_nm_exe}258    WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR}259    DEPENDS ${LLDB_SOURCE_DIR}/scripts/msvc_extract_private_symbols.py260      ${lldb_libs} ${llvm_nm_target}261    VERBATIM262    COMMENT "Generating liblldb private export list"263  )264 265  add_llvm_symbol_exports(liblldb ${exported_symbol_file})266endif()267 268if (NOT MSVC)269  set_target_properties(liblldb270    PROPERTIES271    OUTPUT_NAME lldb272  )273endif()274 275# The Clang expression parser in LLDB requires the Clang resource directory to function.276if (TARGET clang-resource-headers)277  # If building alongside Clang, just add a dependency to ensure it is build together with liblldb.278  add_dependencies(liblldb clang-resource-headers)279else()280  # In a standalone build create a symlink from the LLDB library directory that points to the281  # resource directory in the Clang library directory. LLDB searches relative to its install path,282  # and the symlink is created in the same relative path as the resource directory of Clang when283  # building alongside Clang.284  # When building the LLDB framework, this isn't necessary as there we copy everything we need into285  # the framework (including the Clang resourece directory).286  if(NOT LLDB_BUILD_FRAMEWORK)287    set(LLDB_CLANG_RESOURCE_DIR "$<TARGET_FILE_DIR:liblldb>/clang")288    add_custom_command(TARGET liblldb POST_BUILD289      COMMENT "Linking Clang resource dir into LLDB build directory: ${LLDB_CLANG_RESOURCE_DIR}"290      COMMAND ${CMAKE_COMMAND} -E create_symlink291      "${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}" "${LLDB_CLANG_RESOURCE_DIR}"292    )293  endif()294endif()295 296# Stage all headers in the include directory in the build dir.297file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h)298set(lldb_header_staging_dir ${CMAKE_BINARY_DIR}/include/lldb)299set(generated_public_headers ${LLDB_OBJ_DIR}/include/lldb/API/SBLanguages.h)300file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h)301file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h)302list(REMOVE_ITEM root_public_headers ${root_private_headers})303# Skip the initial copy of lldb-defines.h. The fixed version is generated at build time.304list(REMOVE_ITEM root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h)305 306find_program(unifdef_EXECUTABLE unifdef)307 308add_custom_target(liblldb-header-staging)309 310if (LLDB_BUILD_FRAMEWORK)311  add_custom_target(lldb-framework-fixup-all-headers)312  add_dependencies(lldb-framework-fixup-all-headers liblldb-header-staging)313  add_dependencies(liblldb lldb-framework-fixup-all-headers)314endif()315 316foreach(header317    ${public_headers}318    ${generated_public_headers}319    ${root_public_headers})320  get_filename_component(basename ${header} NAME)321  set(staged_header ${lldb_header_staging_dir}/${basename})322 323  if(unifdef_EXECUTABLE)324    # unifdef returns 0 when the file is unchanged and 1 if something was changed.325    # That means if we successfully remove SWIG code, the build system believes326    # that the command has failed and stops. This is undesirable.327    set(copy_command ${unifdef_EXECUTABLE} -USWIG ${header} > ${staged_header} || (exit 0))328  else()329    set(copy_command ${CMAKE_COMMAND} -E copy ${header} ${staged_header})330  endif()331 332  add_custom_target(liblldb-stage-header-${basename} DEPENDS ${staged_header})333  add_dependencies(liblldb-stage-header-${basename} lldb-sbapi-dwarf-enums)334  add_dependencies(liblldb-header-staging liblldb-stage-header-${basename})335  add_custom_command(336    DEPENDS ${header} OUTPUT ${staged_header}337    COMMAND ${copy_command}338    COMMENT "LLDB headers: stage LLDB headers in include directory")339 340  list(APPEND lldb_staged_headers ${staged_header})341 342  if (LLDB_BUILD_FRAMEWORK)343    set(output_header $<TARGET_FILE_DIR:liblldb>/Headers/${basename})344 345    add_custom_target(lldb-framework-fixup-header-${basename} DEPENDS ${staged_header})346    add_dependencies(lldb-framework-fixup-header-${basename} liblldb-stage-header-${basename})347    add_dependencies(lldb-framework-fixup-all-headers lldb-framework-fixup-header-${basename})348 349    add_custom_command(TARGET lldb-framework-fixup-header-${basename} POST_BUILD350      COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.py -f lldb_main -i ${staged_header} -o ${output_header}351      COMMENT "LLDB.framework: Fix up and copy framework headers"352    )353  endif()354endforeach()355 356add_custom_command(TARGET liblldb-header-staging POST_BUILD357  COMMAND "${Python3_EXECUTABLE}" ${LLDB_SOURCE_DIR}/scripts/version-header-fix.py -i ${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h -o ${lldb_header_staging_dir}/lldb-defines.h -m ${LLDB_VERSION_MAJOR} -n ${LLDB_VERSION_MINOR} -p ${LLDB_VERSION_PATCH}358)359add_dependencies(liblldb liblldb-header-staging)360 361if(LLDB_BUILD_FRAMEWORK)362  include(LLDBFramework)363 364  if (TARGET install-liblldb)365    add_dependencies(install-liblldb366      lldb-framework-cleanup)367  endif()368 369  if (TARGET install-liblldb-stripped)370    add_dependencies(install-liblldb-stripped371      lldb-framework-cleanup)372  endif()373endif()374