-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PYBIND11_PLATFORM_ABI_ID
Modernization Continued (platforms other than MSVC)
#5439
Changes from 31 commits
14f8425
e46982c
b72c42d
8369fdc
476c322
271720f
970a7eb
28081fc
fe2dbcb
9acf764
9fc9515
d412303
b6ccce3
a584398
23a5f2b
8fa10bf
02daf15
3f90808
b47be2d
e071edc
ca9e699
41daaa4
e34dc8b
75da5fb
f4cc9b9
fb38f03
09131c5
d05ea53
776d163
70639c1
7fb89ca
738b7ec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -12,51 +12,32 @@ | |||||||||||||
#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" | ||||||||||||||
#ifdef PYBIND11_COMPILER_TYPE | ||||||||||||||
// // To maintain backward compatibility (see PR #5439). | ||||||||||||||
# define PYBIND11_COMPILER_TYPE_LEADING_UNDERSCORE "" | ||||||||||||||
#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" | ||||||||||||||
# define PYBIND11_COMPILER_TYPE_LEADING_UNDERSCORE "_" | ||||||||||||||
# if defined(__MINGW32__) | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "mingw" | ||||||||||||||
# elif defined(__CYGWIN__) | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "_gcc_cygwin" | ||||||||||||||
# elif defined(__GNUC__) | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "_gcc" | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "gcc_cygwin" | ||||||||||||||
# elif defined(_MSC_VER) | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "msvc" | ||||||||||||||
# elif defined(__INTEL_COMPILER) || defined(__clang__) || defined(__GNUC__) | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "system" // Assumed compatible with system compiler. | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This still feels weird. How about?
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I really like this. Trying it out in the CI right now: ca9e699 The code is exactly as suggested, but I revised the comments. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm. On second thought, this would break musl, android builds etc. Let's keep the earlier one. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, gee: sorry I missed your last comment before. I don't know about musl and android builds. But I just revert ... simpler is better here, I think. |
||||||||||||||
# else | ||||||||||||||
# define PYBIND11_COMPILER_TYPE "_unknown" | ||||||||||||||
# error "Unknown PYBIND11_COMPILER_TYPE: PLEASE REVISE THIS CODE." | ||||||||||||||
# endif | ||||||||||||||
#endif | ||||||||||||||
|
||||||||||||||
// Also standard libs | ||||||||||||||
// PR #5439 made this macro obsolete. However, there are many manipulations of this macro in the | ||||||||||||||
// wild. Therefore, to maintain backward compatibility, it is kept around. | ||||||||||||||
#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 | ||||||||||||||
# define PYBIND11_STDLIB "" | ||||||||||||||
#endif | ||||||||||||||
|
||||||||||||||
#ifndef PYBIND11_BUILD_ABI | ||||||||||||||
# if defined(__GXX_ABI_VERSION) // Linux/OSX. | ||||||||||||||
# define PYBIND11_BUILD_ABI "_cxxabi" PYBIND11_PLATFORM_ABI_ID_TOSTRING(__GXX_ABI_VERSION) | ||||||||||||||
# elif defined(_MSC_VER) // See PR #4953. | ||||||||||||||
# if defined(_MSC_VER) // See PR #4953. | ||||||||||||||
# if defined(_MT) && defined(_DLL) // Corresponding to CL command line options /MD or /MDd. | ||||||||||||||
# if (_MSC_VER) / 100 == 19 | ||||||||||||||
# define PYBIND11_BUILD_ABI "_md_mscver19" | ||||||||||||||
|
@@ -72,17 +53,35 @@ | |||||||||||||
# error "Unknown major version for MSC_VER: PLEASE REVISE THIS CODE." | ||||||||||||||
# endif | ||||||||||||||
# endif | ||||||||||||||
# elif defined(__NVCOMPILER) // NVHPC (PGI-based). | ||||||||||||||
# define PYBIND11_BUILD_ABI "" // TODO: What should be here, to prevent UB? | ||||||||||||||
# elif defined(_LIBCPP_ABI_VERSION) // https://libcxx.llvm.org/DesignDocs/ABIVersioning.html | ||||||||||||||
# define PYBIND11_BUILD_ABI \ | ||||||||||||||
"_libcpp_abi" PYBIND11_PLATFORM_ABI_ID_TOSTRING(_LIBCPP_ABI_VERSION) | ||||||||||||||
# elif defined(_GLIBCXX_USE_CXX11_ABI) // See PR #5439. | ||||||||||||||
# if defined(__NVCOMPILER) | ||||||||||||||
// // Assume that NVHPC is in the 1xxx ABI family. | ||||||||||||||
// // THIS ASSUMPTION IS NOT FUTURE PROOF but apparently the best we can do. | ||||||||||||||
// // Please let us know if there is a way to validate the assumption here. | ||||||||||||||
# elif !defined(__GXX_ABI_VERSION) | ||||||||||||||
# error \ | ||||||||||||||
"Unknown platform or compiler (_GLIBCXX_USE_CXX11_ABI): PLEASE REVISE THIS CODE." | ||||||||||||||
# endif | ||||||||||||||
# if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION < 1002 || __GXX_ABI_VERSION >= 2000 | ||||||||||||||
# error "Unknown platform or compiler (__GXX_ABI_VERSION): PLEASE REVISE THIS CODE." | ||||||||||||||
# endif | ||||||||||||||
# define PYBIND11_BUILD_ABI \ | ||||||||||||||
"_libstdcpp_gxx_abi_1xxx_use_cxx11_abi_" PYBIND11_PLATFORM_ABI_ID_TOSTRING( \ | ||||||||||||||
_GLIBCXX_USE_CXX11_ABI) | ||||||||||||||
# else | ||||||||||||||
# error "Unknown platform or compiler: PLEASE REVISE THIS CODE." | ||||||||||||||
# endif | ||||||||||||||
#endif | ||||||||||||||
|
||||||||||||||
#ifndef PYBIND11_INTERNALS_KIND | ||||||||||||||
# define PYBIND11_INTERNALS_KIND "" | ||||||||||||||
// 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 | ||||||||||||||
|
||||||||||||||
#define PYBIND11_PLATFORM_ABI_ID \ | ||||||||||||||
PYBIND11_INTERNALS_KIND PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI \ | ||||||||||||||
PYBIND11_BUILD_TYPE | ||||||||||||||
PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI PYBIND11_BUILD_TYPE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the interest of simplification, consider removing
defined(__INTEL_COMPILER)
The Intel classic compilers,
icc
for C andicpc
for C++, define__GNUC__
as well as__INTEL_COMPILER
.The last version was 2021.10 and it stopped shipping in 2023.
The "Intel(R) oneAPI DPC++/C++ Compilers",
icx
for C andicpx
for C++, do not define__INTEL_COMPILER
.They do define all of these:
__GNUC__
,__clang__
,__INTEL_CLANG_COMPILER
, and__INTEL_LLVM_COMPILER
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done: 738b7ec
Thanks @hpkfft for the suggestion!