| 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}) |