https://github.com/Nerixyz created 
https://github.com/llvm/llvm-project/pull/137467

https://github.com/llvm/llvm-project/commit/f0248ca54531125599af8f22e686e1c77de0416a
 initially added a post build event to copy the Python DLL to the `bin` 
directory. This relied on `PYTHON_DLL` being present, which was removed in 
https://github.com/llvm/llvm-project/commit/2046d72e91670114625c87e122db6e013ba089d5,
 which moved to `FindPython3`.

CMake's `FindPython3` sets `Python3_RUNTIME_LIBRARY` 
(https://github.com/Kitware/CMake/blob/1cd89e65d76339e6be23fc9bb0d417655a9c06ea/Modules/FindPython/Support.cmake#L3866-L3873)
 even though it's not documented. This is used to deploy the 
`python3{version}(_d).dll`.
I wasn't sure what the correct way to specify the destination path is. From 
CMake's documentation, it seemed like `TYPE BIN` would do the correct thing 
(i.e. deploy it to the `bin` directory), but I don't know all the customization 
points - maybe this should be `LLVM_TOOLS_INSTALL_DIR`(?).

It would be great if someone else could test this locally. Building LLDB (e.g. 
`ninja lldb`) should have `python3{version}(_d).dll` show up in the `bin` build 
directory and a `cmake --install <build-directory> --component lldb` should 
install the DLL to `<install-prefix>/bin`.

I don't know how the prebuilt binaries are built, but I'd guess they will 
install and zip the install-directory. In that case, this should work.

Related issues:
- https://github.com/llvm/llvm-project/issues/43432
- https://github.com/llvm/llvm-project/issues/47381
- https://github.com/llvm/llvm-project/issues/53646
- https://github.com/llvm/llvm-project/issues/58095
- https://github.com/llvm/llvm-project/issues/59524
- https://github.com/llvm/llvm-project/issues/74073
- https://github.com/llvm/llvm-project/issues/85764

I hope all of them are fixed by this PR (but that depends on how the prebuilt 
binaries are built).

>From dbaf4ccfb7dc55317e55704681513ed5bd47a320 Mon Sep 17 00:00:00 2001
From: Nerixyz <nerix...@outlook.de>
Date: Sat, 26 Apr 2025 18:09:27 +0200
Subject: [PATCH] [lldb] Deploy Python DLL on Windows

---
 lldb/bindings/python/CMakeLists.txt | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lldb/bindings/python/CMakeLists.txt 
b/lldb/bindings/python/CMakeLists.txt
index 69306a384e0b1..0b26d3e849914 100644
--- a/lldb/bindings/python/CMakeLists.txt
+++ b/lldb/bindings/python/CMakeLists.txt
@@ -183,16 +183,21 @@ function(finish_swig_python swig_target 
lldb_python_bindings_dir lldb_python_tar
                              DEPENDS ${python_scripts_target})
   endif()
 
-  # Add a Post-Build Event to copy the custom Python DLL to the lldb binaries 
dir so that Windows can find it when launching
-  # lldb.exe or any other executables that were linked with liblldb.
-  if (WIN32 AND NOT "${PYTHON_DLL}" STREQUAL "")
+  # Copy the custom Python DLL to the lldb binary dir so that Windows can find 
it when launching
+  # lldb.exe or any other executables that were linked with liblldb (both 
during development and when installing).
+  if (WIN32 AND NOT "${Python3_RUNTIME_LIBRARY}" STREQUAL "")
     # When using the Visual Studio CMake generator the lldb binaries end up in 
Release/bin, Debug/bin etc.
     file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin" 
LLDB_BIN_DIR)
-    file(TO_NATIVE_PATH "${PYTHON_DLL}" PYTHON_DLL_NATIVE_PATH)
+    file(TO_NATIVE_PATH "${Python3_RUNTIME_LIBRARY}" PYTHON_DLL_NATIVE_PATH)
     add_custom_command(
       TARGET ${swig_target}
       POST_BUILD
       COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_DLL_NATIVE_PATH} 
${LLDB_BIN_DIR} VERBATIM
       COMMENT "Copying Python DLL to LLDB binaries directory.")
+    install(
+      FILES "${Python3_RUNTIME_LIBRARY}"
+      TYPE BIN
+      COMPONENT lldb
+    )
   endif()
 endfunction()

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to