When `LLDB_ENABLE_PYTHON_LIMITED_API` is `ON`, `liblldb` should link
against `python3.dll` (stable ABI) rather than the `python310.dll`.
Previously, two issues prevented this on Windows:
1. The `ScriptInterpreter` plugin explicitly linked
`${Python3_LIBRARIES}` regardless of whether the limited API was
enabled.
2. Python's `pyconfig.h` emits a `#pragma` to select the import library
at link time, choosing `python3.lib` or `python310.lib` depending on
whether `Py_LIMITED_API` is defined. However,
`LLDB_ENABLE_PYTHON_LIMITED_API` was only surfaced through Config.h,
which is not included early enough in the compilation chain to affect
pyconfig.h in all translation units.
This patch fixes both issues.
This is needed for https://github.com/llvm/llvm-project/pull/200533.
62 lines
2.3 KiB
C++
62 lines
2.3 KiB
C++
//===-- lldb-python.h -------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_SOURCE_PLUGINS_SCRIPTINTERPRETER_PYTHON_LLDB_PYTHON_H
|
|
#define LLDB_SOURCE_PLUGINS_SCRIPTINTERPRETER_PYTHON_LLDB_PYTHON_H
|
|
|
|
// BEGIN FIXME
|
|
// This declaration works around a clang module build failure.
|
|
// It should be deleted ASAP.
|
|
#include "llvm/Support/Error.h"
|
|
static llvm::Expected<bool> *g_fcxx_modules_workaround [[maybe_unused]];
|
|
// END
|
|
|
|
#include "llvm/Support/Compiler.h"
|
|
#if defined(__linux__)
|
|
// features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined. This value
|
|
// may be different from the value that Python defines it to be which results
|
|
// in a warning. Undefine _POSIX_C_SOURCE before including Python.h The same
|
|
// holds for _XOPEN_SOURCE.
|
|
#undef _POSIX_C_SOURCE
|
|
#undef _XOPEN_SOURCE
|
|
#endif
|
|
|
|
// Include locale before Python so _PY_PORT_CTYPE_UTF8_ISSUE doesn't cause
|
|
// macro redefinitions.
|
|
#if defined(__APPLE__)
|
|
#include <locale>
|
|
#endif
|
|
|
|
#define LLDB_MINIMUM_PYTHON_VERSION 0x03080000
|
|
|
|
// Config.h must be included before Python.h so that
|
|
// LLDB_ENABLE_PYTHON_LIMITED_API is defined when pyconfig.h selects the Windows
|
|
// import library via #pragma comment.
|
|
#include "lldb/Host/Config.h"
|
|
|
|
#if LLDB_ENABLE_PYTHON_LIMITED_API
|
|
// If defined, LLDB will be ABI-compatible with all Python 3 releases from the
|
|
// specified one onward, and can use Limited API introduced up to that version.
|
|
#define Py_LIMITED_API LLDB_MINIMUM_PYTHON_VERSION
|
|
#endif
|
|
|
|
// Include python for non windows machines
|
|
#include <Python.h>
|
|
|
|
// Provide a meaningful diagnostic error if someone tries to compile this file
|
|
// with a version of Python we don't support.
|
|
static_assert(PY_VERSION_HEX >= LLDB_MINIMUM_PYTHON_VERSION,
|
|
"LLDB requires at least Python 3.8");
|
|
|
|
// PyMemoryView_FromMemory is part of stable ABI but the flag constants are not.
|
|
// See https://github.com/python/cpython/issues/98680
|
|
#ifndef PyBUF_READ
|
|
#define PyBUF_READ 0x100
|
|
#endif
|
|
|
|
#endif // LLDB_SOURCE_PLUGINS_SCRIPTINTERPRETER_PYTHON_LLDB_PYTHON_H
|