blob: 0515570c5c4cace36067dd71becec9c2f38ad489 [file]
if (APPLE AND LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY)
# Work around an issue with the Python headers, which have a modular include
# inside an extern "C" block.
remove_module_flags()
endif()
if(NOT LLDB_PYTHON_RELATIVE_PATH)
message(FATAL_ERROR "LLDB_PYTHON_RELATIVE_PATH is not set.")
endif()
add_definitions(-DLLDB_PYTHON_RELATIVE_LIBDIR="${LLDB_PYTHON_RELATIVE_PATH}")
if(NOT LLDB_PYTHON_EXE_RELATIVE_PATH)
message(FATAL_ERROR "LLDB_PYTHON_EXE_RELATIVE_PATH is not set.")
endif()
add_definitions(-DLLDB_PYTHON_EXE_RELATIVE_PATH="${LLDB_PYTHON_EXE_RELATIVE_PATH}")
if (LLDB_ENABLE_LIBEDIT)
list(APPEND LLDB_LIBEDIT_LIBS LibEdit::LibEdit)
endif()
set(python_plugin_sources
PythonDataObjects.cpp
PythonReadline.cpp
ScriptInterpreterPython.cpp
Interfaces/OperatingSystemPythonInterface.cpp
Interfaces/ScriptInterpreterPythonInterfaces.cpp
Interfaces/ScriptedFramePythonInterface.cpp
Interfaces/ScriptedFrameProviderPythonInterface.cpp
Interfaces/ScriptedPlatformPythonInterface.cpp
Interfaces/ScriptedProcessPythonInterface.cpp
Interfaces/ScriptedPythonInterface.cpp
Interfaces/ScriptedHookPythonInterface.cpp
Interfaces/ScriptedBreakpointPythonInterface.cpp
Interfaces/ScriptedCommandPythonInterface.cpp
Interfaces/ScriptedStackFrameRecognizerPythonInterface.cpp
Interfaces/ScriptedStringSummaryPythonInterface.cpp
Interfaces/ScriptedSyntheticChildrenPythonInterface.cpp
Interfaces/ScriptedThreadPlanPythonInterface.cpp
Interfaces/ScriptedThreadPythonInterface.cpp
)
if (WIN32)
# Add the library directories to allow Python to use #pragma comment(lib, "python3.lib").
# FIXME: We should use Python3_SABI_LIBRARY_DIRS here, but this requires CMake 3.26.
set(PYTHON_SABI_LIBRARY_DIRS ${Python3_LIBRARY_DIRS})
endif()
if (LLDB_ENABLE_DYNAMIC_SCRIPTINTERPRETERS)
# Shared library loaded at runtime by PluginManager. Private lldb symbols are
# resolved via liblldb's re-exports, so lldb_private libs aren't linked here.
# Python is dlopen'd at runtime by ScriptInterpreterRuntimeLoader, so the
# plugin is built with allow-undefined-symbol semantics on POSIX.
add_lldb_library(lldbPluginScriptInterpreterPython SHARED
${python_plugin_sources}
LINK_LIBS
liblldb
${LLDB_LIBEDIT_LIBS}
)
add_python_wrapper(lldbPluginScriptInterpreterPython)
if (APPLE)
target_link_options(lldbPluginScriptInterpreterPython PRIVATE
"LINKER:-undefined,dynamic_lookup")
elseif (UNIX)
target_link_options(lldbPluginScriptInterpreterPython PRIVATE
"LINKER:--unresolved-symbols=ignore-all")
else()
# For the limited API, rely on #pragma comment(lib, "python3.lib")
# emitted by SWIG. For the full API, link the version-specific import lib.
if (NOT LLDB_ENABLE_PYTHON_LIMITED_API)
target_link_libraries(lldbPluginScriptInterpreterPython PRIVATE
${Python3_LIBRARIES})
endif()
target_link_directories(lldbPluginScriptInterpreterPython PRIVATE
${PYTHON_SABI_LIBRARY_DIRS})
endif()
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
lldb_record_dynamic_script_interpreter_exports(
lldbPluginScriptInterpreterPython)
endif()
lldb_add_scriptinterpreter_plugin_to_framework(lldbPluginScriptInterpreterPython)
# Static variant linked directly by unit tests. Separate compilation is
# required so llvm::Error RTTI (ErrorInfoBase::ID) has a single address
# shared between the test binary and the plugin code.
add_lldb_library(lldbStaticScriptInterpreterPython
${python_plugin_sources}
LINK_COMPONENTS
Support
LINK_LIBS
lldbBreakpoint
lldbCore
lldbDataFormatters
lldbHost
lldbInterpreter
lldbTarget
lldbValueObject
${Python3_LIBRARIES}
${LLDB_LIBEDIT_LIBS}
)
target_include_directories(lldbStaticScriptInterpreterPython
PUBLIC ${Python3_INCLUDE_DIRS})
target_link_directories(lldbStaticScriptInterpreterPython
PUBLIC ${PYTHON_SABI_LIBRARY_DIRS})
else()
# On Windows with the limited API, the Python import library is selected via
# #pragma comment(lib, ...) in pyconfig.h based on Py_LIMITED_API.
# On all other platforms, always link Python3_LIBRARIES explicitly.
if (NOT (WIN32 AND LLDB_ENABLE_PYTHON_LIMITED_API))
set(python_link_libs ${Python3_LIBRARIES})
endif()
add_lldb_library(lldbPluginScriptInterpreterPython PLUGIN
${python_plugin_sources}
LINK_COMPONENTS
Support
LINK_LIBS
lldbBreakpoint
lldbCore
lldbDataFormatters
lldbHost
lldbInterpreter
lldbTarget
lldbValueObject
${python_link_libs}
${LLDB_LIBEDIT_LIBS}
)
target_link_directories(lldbPluginScriptInterpreterPython PUBLIC ${PYTHON_SABI_LIBRARY_DIRS})
endif()
target_include_directories(lldbPluginScriptInterpreterPython
PUBLIC ${Python3_INCLUDE_DIRS})