Files
llvm-project/lldb/cmake/modules/FindPythonAndSwig.cmake
Charles Zablit 1f0ded8b12 [lldb][windows] recommend building with Python 3.11 (#191159)
As of https://github.com/llvm/llvm-project/pull/176387 and release 22,
official builds of lldb on Windows use Python 3.11 both on x64 and
arm64.

The Windows lldb build bots use 3.11+ versions of Python:

[lldb-x86_64-win](https://lab.llvm.org/buildbot/#/builders/211) -
`3.12.7`
[lldb-remote-linux-win](https://lab.llvm.org/buildbot/#/builders/197) -
`3.12.7`
[lldb-aarch64-windows](https://lab.llvm.org/buildbot/#/builders/141) -
`3.11.9`

This patch changes the cmake config and documentation to recommend
building lldb on Windows with Python 3.11 or more recent.

In the future, given the reduced number of lldb maintainers on Windows
compared to other platforms, bumping the Python version on Windows would
help reduce the surface area of Python related bugs.
2026-04-15 18:40:58 +01:00

77 lines
2.9 KiB
CMake

#.rst:
# FindPythonAndSwig
# -----------
#
# Find the python interpreter and libraries as a whole.
macro(FindPython3)
# Use PYTHON_HOME as a hint to find Python 3.
if(NOT Python3_ROOT_DIR)
set(Python3_ROOT_DIR "${PYTHON_HOME}")
endif()
find_package(Python3 COMPONENTS Interpreter Development)
if(Python3_FOUND AND Python3_Interpreter_FOUND)
# The install name for the Python 3 framework in Xcode is relative to
# the framework's location and not the dylib itself.
#
# @rpath/Python3.framework/Versions/3.x/Python3
#
# This means that we need to compute the path to the Python3.framework
# and use that as the RPATH instead of the usual dylib's directory.
#
# The check below shouldn't match Homebrew's Python framework as it is
# called Python.framework instead of Python3.framework.
if (APPLE AND Python3_LIBRARIES MATCHES "Python3.framework")
string(FIND "${Python3_LIBRARIES}" "Python3.framework" python_framework_pos)
string(SUBSTRING "${Python3_LIBRARIES}" "0" ${python_framework_pos} Python3_RPATH)
endif()
set(PYTHON3_FOUND TRUE)
mark_as_advanced(
Python3_LIBRARIES
Python3_INCLUDE_DIRS
Python3_EXECUTABLE
Python3_RPATH)
endif()
endmacro()
if(Python3_LIBRARIES AND Python3_INCLUDE_DIRS AND Python3_EXECUTABLE AND LLDB_ENABLE_SWIG)
set(PYTHONANDSWIG_FOUND TRUE)
else()
if (LLDB_ENABLE_SWIG)
FindPython3()
else()
message(STATUS "SWIG 4 or later is required for Python support in LLDB but could not be found")
endif()
get_property(MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if ("${Python3_VERSION}" VERSION_GREATER_EQUAL "3.7" AND
"${SWIG_VERSION}" VERSION_LESS "4.0" AND WIN32 AND (
${MULTI_CONFIG} OR (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")))
# Technically this can happen with non-Windows builds too, but we are not
# able to detect whether Python was built with assertions, and only Windows
# has the requirement that Debug LLDB must use Debug Python.
message(WARNING "Debug builds of LLDB are likely to be unusable due to "
"<https://github.com/swig/swig/issues/1321>. Please use SWIG >= 4.0.")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PythonAndSwig
FOUND_VAR
PYTHONANDSWIG_FOUND
REQUIRED_VARS
Python3_LIBRARIES
Python3_INCLUDE_DIRS
Python3_EXECUTABLE
LLDB_ENABLE_SWIG)
endif()
if (WIN32)
set(LLDB_RECOMMENDED_PYTHON "3.11")
if(PYTHONANDSWIG_FOUND AND "${Python3_VERSION}" VERSION_LESS "${LLDB_RECOMMENDED_PYTHON}")
message(WARNING "Using Python ${Python3_VERSION}. ${LLDB_RECOMMENDED_PYTHON} "
"is recommended and will be required from LLDB 24.")
endif()
endif()