leonid.mashinskiy created this revision. leonid.mashinskiy added reviewers: labath, JDevlieghere. leonid.mashinskiy added a project: LLDB. Herald added subscribers: lldb-commits, mgorny.
Visual Studio CMake generator is multi-target and does not define CMAKE_BUILD_TYPE, so Debug build on VS was failing due selection of release python library. This patch reverts back some of latest changes and fixes building by raw VS using CMake expression generators. Repository: rLLDB LLDB https://reviews.llvm.org/D66994 Files: cmake/modules/LLDBConfig.cmake
Index: cmake/modules/LLDBConfig.cmake =================================================================== --- cmake/modules/LLDBConfig.cmake +++ cmake/modules/LLDBConfig.cmake @@ -161,56 +161,118 @@ 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(CMAKE_BUILD_TYPE STREQUAL Debug) - file(TO_CMAKE_PATH "${PYTHON_HOME}/python_d.exe" PYTHON_EXE) - file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}_d.lib" PYTHON_LIB) - file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}_d.dll" PYTHON_DLL) - else() - file(TO_CMAKE_PATH "${PYTHON_HOME}/python.exe" PYTHON_EXE) - file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}.lib" PYTHON_LIB) - file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}.dll" PYTHON_DLL) - endif() - - foreach(component PYTHON_EXE;PYTHON_LIB;PYTHON_DLL) - if(NOT EXISTS ${${component}}) - message(WARNING "unable to find ${component}") - unset(${component}) + if (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL Debug) + file(TO_CMAKE_PATH "${PYTHON_HOME}/python_d.exe" PYTHON_DEBUG_EXE) + file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}_d.lib" PYTHON_DEBUG_LIB) + file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}_d.dll" PYTHON_DEBUG_DLL) + + foreach(component PYTHON_DEBUG_EXE;PYTHON_DEBUG_LIB;PYTHON_DEBUG_DLL) + if(NOT EXISTS ${${component}}) + message(WARNING "unable to find ${component}") + unset(${component}) + endif() + endforeach() + + if (NOT PYTHON_DEBUG_EXE OR NOT PYTHON_DEBUG_LIB OR NOT PYTHON_DEBUG_DLL) + message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") + set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) + return() endif() - endforeach() - if (NOT PYTHON_EXE OR NOT PYTHON_LIB OR NOT PYTHON_DLL) - message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() + # Find the version of the Python interpreter. + execute_process(COMMAND "${PYTHON_DEBUG_EXE}" -c + "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" + OUTPUT_VARIABLE PYTHON_DEBUG_VERSION_OUTPUT + RESULT_VARIABLE PYTHON_DEBUG_VERSION_RESULT + ERROR_QUIET) + if(NOT PYTHON_DEBUG_VERSION_RESULT) + string(REPLACE ";" "." PYTHON_DEBUG_VERSION_STRING "${PYTHON_DEBUG_VERSION_OUTPUT}") + list(GET PYTHON_DEBUG_VERSION_OUTPUT 0 PYTHON_DEBUG_VERSION_MAJOR) + list(GET PYTHON_DEBUG_VERSION_OUTPUT 1 PYTHON_DEBUG_VERSION_MINOR) + list(GET PYTHON_DEBUG_VERSION_OUTPUT 2 PYTHON_DEBUG_VERSION_PATCH) + endif() endif() - - # Find the version of the Python interpreter. - execute_process(COMMAND "${PYTHON_EXE}" -c - "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" - OUTPUT_VARIABLE PYTHON_VERSION_OUTPUT - RESULT_VARIABLE PYTHON_VERSION_RESULT - ERROR_QUIET) - if(NOT PYTHON_VERSION_RESULT) - string(REPLACE ";" "." PYTHON_VERSION_STRING "${PYTHON_VERSION_OUTPUT}") - list(GET PYTHON_VERSION_OUTPUT 0 PYTHON_VERSION_MAJOR) - list(GET PYTHON_VERSION_OUTPUT 1 PYTHON_VERSION_MINOR) - list(GET PYTHON_VERSION_OUTPUT 2 PYTHON_VERSION_PATCH) + + if (NOT DEFINED CMAKE_BUILD_TYPE OR NOT CMAKE_BUILD_TYPE STREQUAL Debug) + file(TO_CMAKE_PATH "${PYTHON_HOME}/python.exe" PYTHON_RELEASE_EXE) + file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}.lib" PYTHON_RELEASE_LIB) + file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}.dll" PYTHON_RELEASE_DLL) + + foreach(component PYTHON_RELEASE_EXE;PYTHON_RELEASE_LIB;PYTHON_RELEASE_DLL) + if(NOT EXISTS ${${component}}) + message(WARNING "unable to find ${component}") + unset(${component}) + endif() + endforeach() + + if (NOT PYTHON_RELEASE_EXE OR NOT PYTHON_RELEASE_LIB OR NOT PYTHON_RELEASE_DLL) + message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") + set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) + return() + endif() + + # Find the version of the Python interpreter. + execute_process(COMMAND "${PYTHON_RELEASE_EXE}" -c + "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" + OUTPUT_VARIABLE PYTHON_RELEASE_VERSION_OUTPUT + RESULT_VARIABLE PYTHON_RELEASE_VERSION_RESULT + ERROR_QUIET) + if(NOT PYTHON_RELEASE_VERSION_RESULT) + string(REPLACE ";" "." PYTHON_RELEASE_VERSION_STRING "${PYTHON_RELEASE_VERSION_OUTPUT}") + list(GET PYTHON_RELEASE_VERSION_OUTPUT 0 PYTHON_RELEASE_VERSION_MAJOR) + list(GET PYTHON_RELEASE_VERSION_OUTPUT 1 PYTHON_RELEASE_VERSION_MINOR) + list(GET PYTHON_RELEASE_VERSION_OUTPUT 2 PYTHON_RELEASE_VERSION_PATCH) + endif() endif() # Set the same variables as FindPythonInterp and FindPythonLibs. - set(PYTHON_EXECUTABLE ${PYTHON_EXE} PARENT_SCOPE) - set(PYTHON_LIBRARY ${PYTHON_LIB} PARENT_SCOPE) + set(PYTHON_EXECUTABLE $<$<CONFIG:Debug>:${PYTHON_DEBUG_EXE}>$<$<NOT:$<CONFIG:Debug>>:${PYTHON_RELEASE_EXE}>) + set(PYTHON_LIBRARY $<$<CONFIG:Debug>:${PYTHON_DEBUG_LIB}>$<$<NOT:$<CONFIG:Debug>>:${PYTHON_RELEASE_LIB}>) + set(PYTHON_DLL $<$<CONFIG:Debug>:${PYTHON_DEBUG_DLL}>$<$<NOT:$<CONFIG:Debug>>:${PYTHON_RELEASE_DLL}>) + + set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} PARENT_SCOPE) + set(PYTHON_LIBRARY ${PYTHON_LIBRARY} PARENT_SCOPE) set(PYTHON_DLL ${PYTHON_DLL} PARENT_SCOPE) set(PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_DIR} PARENT_SCOPE) 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_LIB} (${PYTHONLIBS_VERSION_STRING})") - message(STATUS "LLDB Found PythonDLL: ${PYTHON_DLL}") + + if (NOT DEFINED CMAKE_BUILD_TYPE) + # multiconfiguration generator was selected (i.e. Visual Studio) + # so print both debug and release variables related to python + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_RELEASE_EXE} (${PYTHON_RELEASE_VERSION_STRING}) and ${PYTHON_DEBUG_EXE} (${PYTHON_DEBUG_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_RELEASE_LIB} (${PYTHONLIBS_VERSION_STRING}) and ${PYTHON_DEBUG_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_RELEASE_DLL} and ${PYTHON_DEBUG_DLL}") + + 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 () + + # both debug and release versions should match now + set(PYTHON_VERSION_STRING ${PYTHON_RELEASE_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_RELEASE_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_RELEASE_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_RELEASE_VERSION_PATCH} PARENT_SCOPE) + + elseif (CMAKE_BUILD_TYPE STREQUAL Debug) + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_DEBUG_EXE} (${PYTHON_DEBUG_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_DEBUG_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_DEBUG_DLL}") + + set(PYTHON_VERSION_STRING ${PYTHON_DEBUG_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_DEBUG_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_DEBUG_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_DEBUG_VERSION_PATCH} PARENT_SCOPE) + else () + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_RELEASE_EXE} (${PYTHON_RELEASE_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_RELEASE_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_RELEASE_DLL}") + + set(PYTHON_VERSION_STRING ${PYTHON_RELEASE_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_RELEASE_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_RELEASE_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_RELEASE_VERSION_PATCH} PARENT_SCOPE) + endif () message(STATUS "LLDB Found PythonIncludeDirs: ${PYTHON_INCLUDE_DIR}") endfunction(find_python_libs_windows)
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits