mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
Factor out pybind11/compat/pybind11_platform_abi_id.h
This commit is contained in:
parent
82a43e336f
commit
4e45a46171
@ -142,6 +142,7 @@ set(PYBIND11_HEADERS
|
|||||||
include/pybind11/cast.h
|
include/pybind11/cast.h
|
||||||
include/pybind11/chrono.h
|
include/pybind11/chrono.h
|
||||||
include/pybind11/common.h
|
include/pybind11/common.h
|
||||||
|
include/pybind11/compat/pybind11_platform_abi_id.h
|
||||||
include/pybind11/compat/wrap_include_python_h.h
|
include/pybind11/compat/wrap_include_python_h.h
|
||||||
include/pybind11/complex.h
|
include/pybind11/complex.h
|
||||||
include/pybind11/options.h
|
include/pybind11/options.h
|
||||||
|
71
include/pybind11/compat/pybind11_platform_abi_id.h
Normal file
71
include/pybind11/compat/pybind11_platform_abi_id.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Copyright (c) 2024 The pybind Community.
|
||||||
|
|
||||||
|
#include "wrap_include_python_h.h"
|
||||||
|
|
||||||
|
// Implementation detail. DO NOT USE ELSEWHERE.
|
||||||
|
// This is duplicated here to maximize portability.
|
||||||
|
#define PYBIND11_PLATFORM_ABI_ID_STRINGIFY(x) #x
|
||||||
|
#define PYBIND11_PLATFORM_ABI_ID_TOSTRING(x) PYBIND11_PLATFORM_ABI_ID_STRINGIFY(x)
|
||||||
|
|
||||||
|
// On MSVC, debug and release builds are not ABI-compatible!
|
||||||
|
#if defined(_MSC_VER) && defined(_DEBUG)
|
||||||
|
# define PYBIND11_BUILD_TYPE "_debug"
|
||||||
|
#else
|
||||||
|
# define PYBIND11_BUILD_TYPE ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Let's assume that different compilers are ABI-incompatible.
|
||||||
|
// A user can manually set this string if they know their
|
||||||
|
// compiler is compatible.
|
||||||
|
#ifndef PYBIND11_COMPILER_TYPE
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_msvc"
|
||||||
|
# elif defined(__INTEL_COMPILER)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_icc"
|
||||||
|
# elif defined(__clang__)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_clang"
|
||||||
|
# elif defined(__PGI)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_pgi"
|
||||||
|
# elif defined(__MINGW32__)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_mingw"
|
||||||
|
# elif defined(__CYGWIN__)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_gcc_cygwin"
|
||||||
|
# elif defined(__GNUC__)
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_gcc"
|
||||||
|
# else
|
||||||
|
# define PYBIND11_COMPILER_TYPE "_unknown"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Also standard libs
|
||||||
|
#ifndef PYBIND11_STDLIB
|
||||||
|
# if defined(_LIBCPP_VERSION)
|
||||||
|
# define PYBIND11_STDLIB "_libcpp"
|
||||||
|
# elif defined(__GLIBCXX__) || defined(__GLIBCPP__)
|
||||||
|
# define PYBIND11_STDLIB "_libstdcpp"
|
||||||
|
# else
|
||||||
|
# define PYBIND11_STDLIB ""
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// On Linux/OSX, changes in __GXX_ABI_VERSION__ indicate ABI incompatibility.
|
||||||
|
// On MSVC, changes in _MSC_VER may indicate ABI incompatibility (#2898).
|
||||||
|
#ifndef PYBIND11_BUILD_ABI
|
||||||
|
# if defined(__GXX_ABI_VERSION)
|
||||||
|
# define PYBIND11_BUILD_ABI "_cxxabi" PYBIND11_PLATFORM_ABI_ID_TOSTRING(__GXX_ABI_VERSION)
|
||||||
|
# elif defined(_MSC_VER)
|
||||||
|
# define PYBIND11_BUILD_ABI "_mscver" PYBIND11_PLATFORM_ABI_ID_TOSTRING(_MSC_VER)
|
||||||
|
# else
|
||||||
|
# define PYBIND11_BUILD_ABI ""
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PYBIND11_INTERNALS_KIND
|
||||||
|
# define PYBIND11_INTERNALS_KIND ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PYBIND11_PLATFORM_ABI_ID \
|
||||||
|
PYBIND11_INTERNALS_KIND PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI \
|
||||||
|
PYBIND11_BUILD_TYPE
|
@ -15,6 +15,7 @@
|
|||||||
# include <pybind11/gil.h>
|
# include <pybind11/gil.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <pybind11/compat/pybind11_platform_abi_id.h>
|
||||||
#include <pybind11/pytypes.h>
|
#include <pybind11/pytypes.h>
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
@ -264,67 +265,6 @@ struct type_info {
|
|||||||
bool module_local : 1;
|
bool module_local : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// On MSVC, debug and release builds are not ABI-compatible!
|
|
||||||
#if defined(_MSC_VER) && defined(_DEBUG)
|
|
||||||
# define PYBIND11_BUILD_TYPE "_debug"
|
|
||||||
#else
|
|
||||||
# define PYBIND11_BUILD_TYPE ""
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// Let's assume that different compilers are ABI-incompatible.
|
|
||||||
/// A user can manually set this string if they know their
|
|
||||||
/// compiler is compatible.
|
|
||||||
#ifndef PYBIND11_COMPILER_TYPE
|
|
||||||
# if defined(_MSC_VER)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_msvc"
|
|
||||||
# elif defined(__INTEL_COMPILER)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_icc"
|
|
||||||
# elif defined(__clang__)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_clang"
|
|
||||||
# elif defined(__PGI)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_pgi"
|
|
||||||
# elif defined(__MINGW32__)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_mingw"
|
|
||||||
# elif defined(__CYGWIN__)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_gcc_cygwin"
|
|
||||||
# elif defined(__GNUC__)
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_gcc"
|
|
||||||
# else
|
|
||||||
# define PYBIND11_COMPILER_TYPE "_unknown"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// Also standard libs
|
|
||||||
#ifndef PYBIND11_STDLIB
|
|
||||||
# if defined(_LIBCPP_VERSION)
|
|
||||||
# define PYBIND11_STDLIB "_libcpp"
|
|
||||||
# elif defined(__GLIBCXX__) || defined(__GLIBCPP__)
|
|
||||||
# define PYBIND11_STDLIB "_libstdcpp"
|
|
||||||
# else
|
|
||||||
# define PYBIND11_STDLIB ""
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// On Linux/OSX, changes in __GXX_ABI_VERSION__ indicate ABI incompatibility.
|
|
||||||
/// On MSVC, changes in _MSC_VER may indicate ABI incompatibility (#2898).
|
|
||||||
#ifndef PYBIND11_BUILD_ABI
|
|
||||||
# if defined(__GXX_ABI_VERSION)
|
|
||||||
# define PYBIND11_BUILD_ABI "_cxxabi" PYBIND11_TOSTRING(__GXX_ABI_VERSION)
|
|
||||||
# elif defined(_MSC_VER)
|
|
||||||
# define PYBIND11_BUILD_ABI "_mscver" PYBIND11_TOSTRING(_MSC_VER)
|
|
||||||
# else
|
|
||||||
# define PYBIND11_BUILD_ABI ""
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PYBIND11_INTERNALS_KIND
|
|
||||||
# define PYBIND11_INTERNALS_KIND ""
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PYBIND11_PLATFORM_ABI_ID \
|
|
||||||
PYBIND11_INTERNALS_KIND PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI \
|
|
||||||
PYBIND11_BUILD_TYPE
|
|
||||||
|
|
||||||
#define PYBIND11_INTERNALS_ID \
|
#define PYBIND11_INTERNALS_ID \
|
||||||
"__pybind11_internals_v" PYBIND11_TOSTRING(PYBIND11_INTERNALS_VERSION) \
|
"__pybind11_internals_v" PYBIND11_TOSTRING(PYBIND11_INTERNALS_VERSION) \
|
||||||
PYBIND11_PLATFORM_ABI_ID "__"
|
PYBIND11_PLATFORM_ABI_ID "__"
|
||||||
|
@ -1,13 +1,7 @@
|
|||||||
// Copyright (c) 2024 The pybind Community.
|
// Copyright (c) 2024 The pybind Community.
|
||||||
|
|
||||||
// THIS MUST STAY AT THE TOP!
|
// THIS MUST STAY AT THE TOP!
|
||||||
#include <pybind11/pybind11.h> // EXCLUSIVELY for PYBIND11_PLATFORM_ABI_ID
|
#include <pybind11/compat/pybind11_platform_abi_id.h>
|
||||||
// Potential future direction to maximize reusability:
|
|
||||||
// (e.g. for use from SWIG, Cython, PyCLIF, nanobind):
|
|
||||||
// #include <pybind11/compat/platform_abi_id.h>
|
|
||||||
// This would only depend on:
|
|
||||||
// 1. A C++ compiler, WITHOUT requiring -fexceptions.
|
|
||||||
// 2. Python.h
|
|
||||||
|
|
||||||
#include "test_cpp_conduit_traveler_types.h"
|
#include "test_cpp_conduit_traveler_types.h"
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ main_headers = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compat_headers = {
|
compat_headers = {
|
||||||
|
"include/pybind11/compat/pybind11_platform_abi_id.h",
|
||||||
"include/pybind11/compat/wrap_include_python_h.h",
|
"include/pybind11/compat/wrap_include_python_h.h",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user