See https://discourse.llvm.org/t/rfc-lets-document-and-enforce-a-minimum-python-version-for-lldb/82731 for discussions. This matches LLVM's requirement to run tests. For LLDB 20 there will be a CMake warning telling builders that from LLDB 21 this will be a hard requirement. From LLDB 21, it will be an error to try to build with anything <= 3.8. So there are no code changes in this commit. Once the llvm 20 branch is created we can remove some < 3.8 support code. As always, if you disable Python support you will not get any new warnings or errors from this change.
72 lines
2.9 KiB
CMake
72 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.
|
|
set(Python3_ROOT_DIR "${PYTHON_HOME}")
|
|
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()
|
|
|
|
set(LLDB_RECOMMENDED_PYTHON "3.8")
|
|
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 21.")
|
|
endif() |