diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt --- a/lldb/CMakeLists.txt +++ b/lldb/CMakeLists.txt @@ -1,4 +1,7 @@ cmake_minimum_required(VERSION 3.4.3) +if(CMAKE_SYSTEM_NAME STREQUAL Windows) + cmake_minimum_required(VERSION 3.13) +endif() if(POLICY CMP0075) cmake_policy(SET CMP0075 NEW) diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake --- a/lldb/cmake/modules/LLDBConfig.cmake +++ b/lldb/cmake/modules/LLDBConfig.cmake @@ -190,105 +190,15 @@ set(${OUT_VERSION_VARNAME} ${PYTHON_VERSION_OUTPUT} PARENT_SCOPE) endfunction() -function(find_python_libs_windows) - if ("${PYTHON_HOME}" STREQUAL "") - message(WARNING "LLDB embedded Python on Windows requires specifying a value for PYTHON_HOME. Python support disabled.") - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() - endif() - - file(TO_CMAKE_PATH "${PYTHON_HOME}/Include" PYTHON_INCLUDE_DIR) - - if(EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h") - file(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" python_version_str - REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"") - string(REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"+]+)[+]?\".*" "\\1" - PYTHONLIBS_VERSION_STRING "${python_version_str}") - message(STATUS "Found Python library version ${PYTHONLIBS_VERSION_STRING}") - string(REGEX REPLACE "([0-9]+)[.]([0-9]+)[.][0-9]+" "python\\1\\2" PYTHONLIBS_BASE_NAME "${PYTHONLIBS_VERSION_STRING}") - unset(python_version_str) - else() - message(WARNING "Unable to find ${PYTHON_INCLUDE_DIR}/patchlevel.h, Python installation is corrupt.") - message(WARNING "Python support will be disabled for this build.") - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() - endif() - - file(TO_CMAKE_PATH "${PYTHON_HOME}" PYTHON_HOME) - # TODO(compnerd) when CMake Policy `CMP0091` is set to NEW, we should use - # if(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES MultiThreadedDebug) - if(NOT DEFINED CMAKE_BUILD_TYPE) - # Multi-target generator was selected (like Visual Studio or Xcode) where no concrete build type was passed - # Lookup for both debug and release python installations - find_python_libs_windows_helper(TRUE PYTHON_DEBUG_EXE PYTHON_DEBUG_LIB PYTHON_DEBUG_DLL PYTHON_DEBUG_VERSION_STRING) - find_python_libs_windows_helper(FALSE PYTHON_RELEASE_EXE PYTHON_RELEASE_LIB PYTHON_RELEASE_DLL PYTHON_RELEASE_VERSION_STRING) - if(LLDB_DISABLE_PYTHON) - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() - endif() - - # We should have been found both debug and release python here - # Now check that their versions are equal - if(NOT PYTHON_DEBUG_VERSION_STRING STREQUAL PYTHON_RELEASE_VERSION_STRING) - message(FATAL_ERROR "Python versions for debug (${PYTHON_DEBUG_VERSION_STRING}) and release (${PYTHON_RELEASE_VERSION_STRING}) are different." - "Python installation is corrupted") - endif () - - set(PYTHON_EXECUTABLE $<$:${PYTHON_DEBUG_EXE}>$<$>:${PYTHON_RELEASE_EXE}>) - set(PYTHON_LIBRARY $<$:${PYTHON_DEBUG_LIB}>$<$>:${PYTHON_RELEASE_LIB}>) - set(PYTHON_DLL $<$:${PYTHON_DEBUG_DLL}>$<$>:${PYTHON_RELEASE_DLL}>) - set(PYTHON_VERSION_STRING ${PYTHON_RELEASE_VERSION_STRING}) - else() - # Lookup for concrete python installation depending on build type - if (CMAKE_BUILD_TYPE STREQUAL Debug) - set(LOOKUP_DEBUG_PYTHON TRUE) - else() - set(LOOKUP_DEBUG_PYTHON FALSE) - endif() - find_python_libs_windows_helper(${LOOKUP_DEBUG_PYTHON} PYTHON_EXECUTABLE PYTHON_LIBRARY PYTHON_DLL PYTHON_VERSION_STRING) - if(LLDB_DISABLE_PYTHON) - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() - endif() - endif() - - if(PYTHON_VERSION_STRING) - string(REPLACE "." ";" PYTHON_VERSION_PARTS "${PYTHON_VERSION_STRING}") - list(GET PYTHON_VERSION_PARTS 0 PYTHON_VERSION_MAJOR) - list(GET PYTHON_VERSION_PARTS 1 PYTHON_VERSION_MINOR) - list(GET PYTHON_VERSION_PARTS 2 PYTHON_VERSION_PATCH) - else() - unset(PYTHON_VERSION_MAJOR) - unset(PYTHON_VERSION_MINOR) - unset(PYTHON_VERSION_PATCH) - endif() - - # Set the same variables as FindPythonInterp and FindPythonLibs. - set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}" CACHE PATH "") - set(PYTHON_LIBRARY "${PYTHON_LIBRARY}" CACHE PATH "") - set(PYTHON_DLL "${PYTHON_DLL}" CACHE PATH "") - set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}" CACHE PATH "") - set(PYTHONLIBS_VERSION_STRING "${PYTHONLIBS_VERSION_STRING}" PARENT_SCOPE) - set(PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}" PARENT_SCOPE) - set(PYTHON_VERSION_MAJOR "${PYTHON_VERSION_MAJOR}" PARENT_SCOPE) - set(PYTHON_VERSION_MINOR "${PYTHON_VERSION_MINOR}" PARENT_SCOPE) - set(PYTHON_VERSION_PATCH "${PYTHON_VERSION_PATCH}" PARENT_SCOPE) - - message(STATUS "LLDB Found PythonExecutable: ${PYTHON_EXECUTABLE} (${PYTHON_VERSION_STRING})") - message(STATUS "LLDB Found PythonLibs: ${PYTHON_LIBRARY} (${PYTHONLIBS_VERSION_STRING})") - message(STATUS "LLDB Found PythonDLL: ${PYTHON_DLL}") - message(STATUS "LLDB Found PythonIncludeDirs: ${PYTHON_INCLUDE_DIR}") -endfunction(find_python_libs_windows) - -# Call find_python_libs_windows ahead of the rest of the python configuration. -# It's possible that it won't find a python installation and will then set -# LLDB_DISABLE_PYTHON to ON. -if (NOT LLDB_DISABLE_PYTHON AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") - find_python_libs_windows() -endif() - if (NOT LLDB_DISABLE_PYTHON) if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") + find_package(Python3 COMPONENTS Interpreter Development REQUIRED) + if(Python3_VERSION VERSION_LESS 3.5) + message(FATAL_ERROR "Python 3.5 or newer is required (found: ${Python3_VERSION})") + endif() + set(PYTHON_LIBRARY ${Python3_LIBRARIES}) + include_directories(${Python3_INCLUDE_DIRS}) + if (NOT LLDB_RELOCATABLE_PYTHON) file(TO_CMAKE_PATH "${PYTHON_HOME}" LLDB_PYTHON_HOME) add_definitions( -DLLDB_PYTHON_HOME="${LLDB_PYTHON_HOME}" )