Open Paul-Ferrell opened 2 years ago
@llvm/issue-subscribers-lldb
LLDB needs to have /some/ way of finding python. Could you give more detail about how the paths of the various components look like on the affected systems, and maybe how you would go about finding them (e.g. is hardcoding an absolute path a possibility) ?
Also note that it is possible to bypass the get-python-config.py script by defining the appropriate cmake variables manually. Could that maybe help in your case?
In the pre get-python-config.py
way of handling things, LLDB got the python library paths and just kind of assumed they would work. Now it tries to force the creation of a path relative to the same install prefix as LLDB - that simply won't work, as the Python being built against could be anywhere on the system - it's literally unpredictable.
The good news is that the correct Python will always be the first one found via searching PATH (and LD_LIBRARY_PATH), and Cmake's find_package
handles this all just fine. Similarly, the correct Python is found when using which
or just running python3
on the terminal. So when python3 get-python-config.py
is run by cmake the correct Python is being used and it will find the correct library paths - it's just that those paths won't necessarily have anything to do with where LLVM/LLDB is getting installed.
Side Note:
Spack install paths look like this: /usr/projects/hpcsoft/tce/spack/python/gcc-10.3.0/python-3.9.5-75wamw4vqe2zqx2nrzpmmtoxwcixbbtt/
. The /usr/projects/hpcsoft/tce/spack
part is the spack installation path, which could be anywhere. The giant hash in that path is derived from all the settings that went into building that package and all of its dependencies. This would be just one install of python amongst many in the same Spack environment. Similarly, when we go to install LLVM, it will have its own standalone prefix with a giant hash in its path, and it may be installed alongside other versions/configurations of LLVM.
The
lldb/bindings/get-python-config.py
script fails when the python lib path is not within lldb's prefix, and CMakeLists.txt for LLDB has no backup plan in that case.The idea that the installed python shares a prefix with LLVM is not a reasonable assumption, particularly on systems where module systems (LMOD, TCL environment modules) are used to install multiple versions of LLVM in tandem. This also breaks installs with the Spack package manager, as all packages are installed in their own independent prefix.
Tagging @lawrence-danna-apple because he was responsible for the change that broke this.
Note: Where the heck do module systems and Spack get used? On supercomputers, mainly.