[Lldb-commits] [lldb] [lldb] Support a Stable ABI LLDB_PYTHON_EXT_SUFFIX (PR #166269)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 3 16:06:52 PST 2025
https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/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.
>From ea97b8b24973a34d2ceb96a7e061b9408aea8d9b Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Mon, 3 Nov 2025 16:05:10 -0800
Subject: [PATCH] [lldb] Support a Stable ABI LLDB_PYTHON_EXT_SUFFIX
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.
---
lldb/CMakeLists.txt | 5 +++++
lldb/bindings/python/get-python-config.py | 8 +++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt
index 01b5546fee00d..0736e6ba132c8 100644
--- a/lldb/CMakeLists.txt
+++ b/lldb/CMakeLists.txt
@@ -62,11 +62,16 @@ if (LLDB_ENABLE_PYTHON)
set(cachestring_LLDB_PYTHON_EXT_SUFFIX
"Filename extension for native code python modules")
+ if (LLDB_ENABLE_PYTHON_LIMITED_API)
+ set(stable_abi "--stable-abi")
+ endif()
+
foreach(var LLDB_PYTHON_RELATIVE_PATH LLDB_PYTHON_EXE_RELATIVE_PATH LLDB_PYTHON_EXT_SUFFIX)
if(NOT DEFINED ${var} AND NOT CMAKE_CROSSCOMPILING)
execute_process(
COMMAND ${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/bindings/python/get-python-config.py
+ ${stable_abi}
${var}
OUTPUT_VARIABLE value
OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/lldb/bindings/python/get-python-config.py b/lldb/bindings/python/get-python-config.py
index ae84cbb1215a9..bf8cc48b013e1 100755
--- a/lldb/bindings/python/get-python-config.py
+++ b/lldb/bindings/python/get-python-config.py
@@ -18,6 +18,9 @@ def relpath_nodots(path, base):
def main():
parser = argparse.ArgumentParser(description="extract cmake variables from python")
parser.add_argument("variable_name")
+ parser.add_argument(
+ "--stable-abi", action="store_true", help="Target the Stable C ABI"
+ )
args = parser.parse_args()
if args.variable_name == "LLDB_PYTHON_RELATIVE_PATH":
# LLDB_PYTHON_RELATIVE_PATH is the relative path from lldb's prefix
@@ -68,7 +71,10 @@ def main():
print("sys.prefix:", sys.prefix, file=sys.stderr)
sys.exit(1)
elif args.variable_name == "LLDB_PYTHON_EXT_SUFFIX":
- print(sysconfig.get_config_var("EXT_SUFFIX"))
+ if args.stable_abi:
+ print(".abi3%s" % sysconfig.get_config_var("SHLIB_SUFFIX"))
+ else:
+ print(sysconfig.get_config_var("EXT_SUFFIX"))
else:
parser.error(f"unknown variable {args.variable_name}")
More information about the lldb-commits
mailing list