mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 05:05:11 +00:00
a90e2af88d
* Factor out pybind11/compat/wrap_include_python_h.h * Fixes to resolve tests_packaging failures. * Factor out pybind11/compat/pybind11_platform_abi_id.h * Add pybind11/compat/README.txt and a couple source code comments. * Minor changes to comments. * Factor out pybind11/compat/pybind11_conduit_v1.h * Add long comment to pybind11/compat/pybind11_conduit_v1.h * Add pybind11/compat/README.txt to wheels. * Add `-fno-exceptions` to compiler options for exo_planet_c_api * 1. Move `target_compile_options()` into loop over test targets, in case the `"exo_planet_c_api"` target does not exist. 2. Add `-fno-exceptions` option also for `NVHPC`. 3. Also check for `__cpp_exceptions` in exo_planet_c_api.cpp. * 1. Fix accident (forgot to undo temporary change). 2. Special-case __EMSCRIPTEN__ in exo_planet_c_api.cpp * Give up on compiling exo_planet_c_api.cpp with MSVC `/EHs-c-`: There was one trouble maker (all other jobs worked): Visual Studio 15 2017: ``` cl : Command line warning D9025: overriding '/EHc' with '/EHc-' [C:\projects\pybind11\tests\exo_planet_c_api.vcxproj] ... C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): error C2220: warning treated as error - no 'object' file generated [C:\projects\pybind11\tests\exo_planet_c_api.vcxproj] C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc ``` * Move pybind11/compat to pybind11/conduit as suggested by @henryiii: https://github.com/pybind/pybind11/pull/5375#pullrequestreview-2329006001
89 lines
3.2 KiB
C
89 lines
3.2 KiB
C
#pragma once
|
|
|
|
// Copyright (c) 2024 The pybind Community.
|
|
|
|
// To maximize reusability:
|
|
// DO NOT ADD CODE THAT REQUIRES C++ EXCEPTION HANDLING.
|
|
|
|
#include "wrap_include_python_h.h"
|
|
|
|
// Implementation details. DO NOT USE ELSEWHERE. (Unfortunately we cannot #undef them.)
|
|
// 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
|
|
|
|
#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(_MT) && defined(_DLL) // Corresponding to CL command line options /MD or /MDd.
|
|
# if (_MSC_VER) / 100 == 19
|
|
# define PYBIND11_BUILD_ABI "_md_mscver19"
|
|
# else
|
|
# error "Unknown major version for MSC_VER: PLEASE REVISE THIS CODE."
|
|
# endif
|
|
# elif defined(_MT) // Corresponding to CL command line options /MT or /MTd.
|
|
# define PYBIND11_BUILD_ABI "_mt_mscver" PYBIND11_PLATFORM_ABI_ID_TOSTRING(_MSC_VER)
|
|
# else
|
|
# if (_MSC_VER) / 100 == 19
|
|
# define PYBIND11_BUILD_ABI "_none_mscver19"
|
|
# else
|
|
# 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?
|
|
# else
|
|
# error "Unknown platform or compiler: PLEASE REVISE THIS CODE."
|
|
# 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
|