Skip to content

Commit 9564b26

Browse files
authored
[lldb] Support a Stable ABI LLDB_PYTHON_EXT_SUFFIX (llvm#166269)
When building against the Python Stable API, we should use the `abi3` ABI tag. Otherwise, Python will refuse to import the native shared object. This PR adds support for generating a stable ABI compatible suffix when `LLDB_ENABLE_PYTHON_LIMITED_API` is set. Previously, on Darwin when building against Python 3.14, you would end up with `_lldb.cpython-314-darwin.so`. Now, when using the stable ABI, you get `_lldb.abi3.so` instead. A different version of the Python interpreter will not consider loading the former, but will load the latter.
1 parent a1f0fe1 commit 9564b26

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

lldb/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,16 @@ if (LLDB_ENABLE_PYTHON)
6262
set(cachestring_LLDB_PYTHON_EXT_SUFFIX
6363
"Filename extension for native code python modules")
6464

65+
if (LLDB_ENABLE_PYTHON_LIMITED_API)
66+
set(stable_abi "--stable-abi")
67+
endif()
68+
6569
foreach(var LLDB_PYTHON_RELATIVE_PATH LLDB_PYTHON_EXE_RELATIVE_PATH LLDB_PYTHON_EXT_SUFFIX)
6670
if(NOT DEFINED ${var} AND NOT CMAKE_CROSSCOMPILING)
6771
execute_process(
6872
COMMAND ${Python3_EXECUTABLE}
6973
${CMAKE_CURRENT_SOURCE_DIR}/bindings/python/get-python-config.py
74+
${stable_abi}
7075
${var}
7176
OUTPUT_VARIABLE value
7277
OUTPUT_STRIP_TRAILING_WHITESPACE)

lldb/bindings/python/get-python-config.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ def relpath_nodots(path, base):
1818
def main():
1919
parser = argparse.ArgumentParser(description="extract cmake variables from python")
2020
parser.add_argument("variable_name")
21+
parser.add_argument(
22+
"--stable-abi", action="store_true", help="Target the Stable C ABI"
23+
)
2124
args = parser.parse_args()
2225
if args.variable_name == "LLDB_PYTHON_RELATIVE_PATH":
2326
# LLDB_PYTHON_RELATIVE_PATH is the relative path from lldb's prefix
@@ -68,7 +71,10 @@ def main():
6871
print("sys.prefix:", sys.prefix, file=sys.stderr)
6972
sys.exit(1)
7073
elif args.variable_name == "LLDB_PYTHON_EXT_SUFFIX":
71-
print(sysconfig.get_config_var("EXT_SUFFIX"))
74+
if args.stable_abi:
75+
print(".abi3%s" % sysconfig.get_config_var("SHLIB_SUFFIX"))
76+
else:
77+
print(sysconfig.get_config_var("EXT_SUFFIX"))
7278
else:
7379
parser.error(f"unknown variable {args.variable_name}")
7480

0 commit comments

Comments
 (0)