#ifndef GRPC_SUPPORT_PORT_PLATFORM_H
#define GRPC_SUPPORT_PORT_PLATFORM_H
#if __cplusplus >= 201402L
#define GRPC_DEPRECATED(reason) …
#else
#define GRPC_DEPRECATED …
#endif
#ifndef GPR_ABSEIL_SYNC
#if defined(__APPLE__)
#else
#define GPR_ABSEIL_SYNC …
#endif
#endif
#if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
#ifndef WIN32_LEAN_AND_MEAN
#define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define GRPC_NOMINMX_WAS_NOT_DEFINED
#define NOMINMAX
#endif
#include <windows.h>
#ifndef _WIN32_WINNT
#error \
"Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
#else
#if (_WIN32_WINNT < 0x0600)
#error \
"Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
#endif
#endif
#ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
#undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
#undef WIN32_LEAN_AND_MEAN
#endif
#ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED
#undef GRPC_NOMINMAX_WAS_NOT_DEFINED
#undef NOMINMAX
#endif
#endif
#if !defined(GPR_NO_AUTODETECT_PLATFORM)
#if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
#if defined(_WIN64) || defined(WIN64)
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#define GPR_PLATFORM_STRING …
#define GPR_WINDOWS …
#define GPR_WINDOWS_SUBPROCESS …
#define GPR_WINDOWS_ENV
#ifdef __MSYS__
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_MSYS_TMPFILE
#define GPR_POSIX_LOG
#define GPR_POSIX_STRING
#define GPR_POSIX_TIME
#else
#define GPR_GETPID_IN_PROCESS_H …
#define GPR_WINDOWS_TMPFILE
#define GPR_WINDOWS_LOG
#define GPR_WINDOWS_CRASH_HANDLER …
#define GPR_WINDOWS_STAT
#define GPR_WINDOWS_STRING
#define GPR_WINDOWS_TIME
#endif
#ifdef __GNUC__
#define GPR_GCC_ATOMIC …
#else
#define GPR_WINDOWS_ATOMIC …
#endif
#elif defined(ANDROID) || defined(__ANDROID__)
#define GPR_PLATFORM_STRING …
#define GPR_ANDROID …
#ifndef __ANDROID_API__
#error "__ANDROID_API__ must be defined for Android builds."
#endif
#if __ANDROID_API__ < 21
#error "Requires Android API v21 and above"
#endif
#define GPR_SUPPORT_BINDER_TRANSPORT …
#define GRPC_ARES …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#define GPR_CPU_POSIX …
#define GPR_GCC_SYNC …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_ANDROID_LOG …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#elif defined(__linux__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <features.h>
#define GPR_CPU_LINUX …
#define GPR_GCC_ATOMIC …
#define GPR_LINUX …
#define GPR_LINUX_LOG
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#define GPR_LINUX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#ifdef __GLIBC__
#define GPR_POSIX_CRASH_HANDLER …
#ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 12)
#define GPR_LINUX_PTHREAD_NAME …
#endif
#else
#define GPR_LINUX_PTHREAD_NAME …
#endif
#include <linux/version.h>
#else
#define GPR_MUSL_LIBC_COMPAT …
#endif
#elif defined(__ASYLO__)
#define GPR_ARCH_64 …
#define GPR_CPU_POSIX …
#define GPR_PLATFORM_STRING …
#define GPR_GCC_SYNC …
#define GPR_POSIX_STAT …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_STRING …
#define GPR_POSIX_LOG …
#define GPR_POSIX_TIME …
#define GPR_POSIX_ENV …
#define GPR_ASYLO …
#define GRPC_POSIX_SOCKET …
#define GRPC_POSIX_SOCKETADDR
#define GRPC_POSIX_SOCKETUTILS …
#define GRPC_TIMER_USE_GENERIC …
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD …
#define GRPC_POSIX_WAKEUP_FD …
#define GRPC_HAVE_MSG_NOSIGNAL …
#define GRPC_HAVE_UNIX_SOCKET …
#define GRPC_ARES …
#define GPR_NO_AUTODETECT_PLATFORM …
#elif defined(__APPLE__)
#include <Availability.h>
#include <TargetConditionals.h>
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#if TARGET_OS_IPHONE
#define GPR_PLATFORM_STRING …
#define GPR_CPU_IPHONE …
#define GRPC_CFSTREAM …
#define GRPC_ARES …
#else
#define GPR_PLATFORM_STRING …
#define GPR_CPU_POSIX …
#define GPR_POSIX_CRASH_HANDLER …
#endif
#define GPR_APPLE …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#ifndef GRPC_CFSTREAM
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#endif
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__FreeBSD__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#define GPR_FREEBSD …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__OpenBSD__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#define GPR_OPENBSD …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__sun) && defined(__SVR4)
#define GPR_PLATFORM_STRING …
#define GPR_SOLARIS …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(_AIX)
#define GPR_PLATFORM_STRING …
#ifndef _ALL_SOURCE
#define _ALL_SOURCE
#endif
#define GPR_AIX …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__NetBSD__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#define GPR_NETBSD …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_GCC_TLS …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__native_client__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#define GPR_NACL …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#elif defined(__Fuchsia__)
#define GRPC_ARES …
#define GPR_FUCHSIA …
#define GPR_ARCH_64 …
#define GPR_PLATFORM_STRING …
#include <features.h>
#define GPR_MUSL_LIBC_COMPAT …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_STRING …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#define GRPC_ROOT_PEM_PATH …
#elif defined(__HAIKU__)
#define GPR_PLATFORM_STRING …
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#define GPR_HAIKU …
#define GPR_CPU_POSIX …
#define GPR_GCC_ATOMIC …
#define GPR_POSIX_LOG …
#define GPR_POSIX_ENV …
#define GPR_POSIX_TMPFILE …
#define GPR_POSIX_STAT …
#define GPR_POSIX_STRING …
#define GPR_POSIX_SUBPROCESS …
#define GPR_POSIX_SYNC …
#define GPR_POSIX_TIME …
#define GPR_HAS_PTHREAD_H …
#define GPR_GETPID_IN_UNISTD_H …
#define GPR_SUPPORT_CHANNELS_FROM_FD …
#ifdef _LP64
#define GPR_ARCH_64 …
#else
#define GPR_ARCH_32 …
#endif
#else
#error "Could not auto-detect platform"
#endif
#endif
#if defined(GPR_BACKWARDS_COMPATIBILITY_MODE)
#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0
#undef _FORTIFY_SOURCE
#define _FORTIFY_SOURCE …
#endif
#endif
#if defined(__has_include)
#if __has_include(<atomic>)
#define GRPC_HAS_CXX11_ATOMIC
#endif
#endif
#ifndef GPR_PLATFORM_STRING
#warning "GPR_PLATFORM_STRING not auto-detected"
#define GPR_PLATFORM_STRING …
#endif
#ifdef GPR_GCOV
#undef GPR_FORBID_UNREACHABLE_CODE
#define GPR_FORBID_UNREACHABLE_CODE …
#endif
#ifdef _MSC_VER
#if _MSC_VER < 1700
typedef __int8 int8_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#else
#include <stdint.h>
#endif
#else
#include <stdint.h>
#endif
#ifdef GPR_LINUX
#define GPR_CYCLE_COUNTER_FALLBACK …
#else
#define GPR_CYCLE_COUNTER_FALLBACK …
#endif
#ifndef GPR_CACHELINE_SIZE_LOG
#if defined(__i386__) || defined(__x86_64__)
#define GPR_CACHELINE_SIZE_LOG …
#endif
#ifndef GPR_CACHELINE_SIZE_LOG
#define GPR_CACHELINE_SIZE_LOG …
#endif
#endif
#define GPR_CACHELINE_SIZE …
#if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED)
#undef GPR_GCC_ATOMIC
#define GPR_GCC_SYNC …
#endif
#if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \
defined(GPR_WINDOWS_ATOMIC) != \
1
#error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC
#endif
#if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1
#error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64
#endif
#if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \
defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \
1
#error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM
#endif
#define GPR_MAX_ALIGNMENT …
#ifndef GRPC_ARES
#define GRPC_ARES …
#endif
#ifndef GRPC_IF_NAMETOINDEX
#define GRPC_IF_NAMETOINDEX …
#endif
#ifndef GRPC_MUST_USE_RESULT
#if defined(__GNUC__) && !defined(__MINGW32__)
#define GRPC_MUST_USE_RESULT …
#define GPR_ALIGN_STRUCT(n) …
#else
#define GRPC_MUST_USE_RESULT
#define GPR_ALIGN_STRUCT …
#endif
#ifdef USE_STRICT_WARNING
#define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING …
#else
#define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING
#endif
#endif
#ifndef GRPC_UNUSED
#if defined(__GNUC__) && !defined(__MINGW32__)
#define GRPC_UNUSED …
#else
#define GRPC_UNUSED
#endif
#endif
#ifndef GPR_PRINT_FORMAT_CHECK
#ifdef __GNUC__
#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) …
#else
#define GPR_PRINT_FORMAT_CHECK …
#endif
#endif
#ifndef GPR_HAS_CPP_ATTRIBUTE
#ifdef __has_cpp_attribute
#define GPR_HAS_CPP_ATTRIBUTE(a) …
#else
#define GPR_HAS_CPP_ATTRIBUTE …
#endif
#endif
#ifndef GPR_HAS_ATTRIBUTE
#ifdef __has_attribute
#define GPR_HAS_ATTRIBUTE(a) …
#else
#define GPR_HAS_ATTRIBUTE …
#endif
#endif
#if GPR_HAS_ATTRIBUTE(noreturn)
#define GPR_ATTRIBUTE_NORETURN …
#else
#define GPR_ATTRIBUTE_NORETURN
#endif
#if defined(GPR_FORBID_UNREACHABLE_CODE) && GPR_FORBID_UNREACHABLE_CODE
#define GPR_UNREACHABLE_CODE …
#else
#ifdef __cplusplus
extern "C" {
#endif
extern void gpr_unreachable_code(const char* reason, const char* file,
int line) GPR_ATTRIBUTE_NORETURN;
#ifdef __cplusplus
}
#endif
#define GPR_UNREACHABLE_CODE(STATEMENT) …
#endif
#ifndef GPRAPI
#define GPRAPI
#endif
#ifndef GRPCAPI
#define GRPCAPI …
#endif
#ifndef CENSUSAPI
#define CENSUSAPI …
#endif
#ifndef GPR_HAS_FEATURE
#ifdef __has_feature
#define GPR_HAS_FEATURE(a) …
#else
#define GPR_HAS_FEATURE …
#endif
#endif
#ifndef GPR_ATTRIBUTE_NOINLINE
#if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
#define GPR_ATTRIBUTE_NOINLINE …
#define GPR_HAS_ATTRIBUTE_NOINLINE …
#else
#define GPR_ATTRIBUTE_NOINLINE
#endif
#endif
#ifndef GPR_NO_UNIQUE_ADDRESS
#if GPR_HAS_CPP_ATTRIBUTE(no_unique_address)
#define GPR_NO_UNIQUE_ADDRESS …
#else
#define GPR_NO_UNIQUE_ADDRESS
#endif
#endif
#ifndef GRPC_DEPRECATED
#if GPR_HAS_CPP_ATTRIBUTE(deprecated)
#define GRPC_DEPRECATED …
#else
#define GRPC_DEPRECATED …
#endif
#endif
#ifndef GPR_ATTRIBUTE_WEAK
#if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \
!(defined(__llvm__) && defined(_WIN32))
#define GPR_ATTRIBUTE_WEAK …
#define GPR_HAS_ATTRIBUTE_WEAK …
#else
#define GPR_ATTRIBUTE_WEAK
#endif
#endif
#ifndef GPR_ATTRIBUTE_NO_TSAN
#if GPR_HAS_FEATURE(thread_sanitizer)
#define GPR_ATTRIBUTE_NO_TSAN …
#endif
#ifndef GPR_ATTRIBUTE_NO_TSAN
#define GPR_ATTRIBUTE_NO_TSAN
#endif
#endif
#ifndef GRPC_TSAN_SUPPRESSED
#if defined(__SANITIZE_THREAD__)
#define GRPC_TSAN_ENABLED
#elif GPR_HAS_FEATURE(thread_sanitizer)
#define GRPC_TSAN_ENABLED
#endif
#endif
#ifndef GRPC_ASAN_SUPPRESSED
#if defined(__SANITIZE_ADDRESS__)
#define GRPC_ASAN_ENABLED
#elif GPR_HAS_FEATURE(address_sanitizer)
#define GRPC_ASAN_ENABLED
#endif
#endif
#ifndef GRPC_ALLOW_EXCEPTIONS
#ifdef GPR_WINDOWS
#if defined(_MSC_VER) && defined(_CPPUNWIND)
#define GRPC_ALLOW_EXCEPTIONS …
#elif defined(__EXCEPTIONS)
#define GRPC_ALLOW_EXCEPTIONS …
#else
#define GRPC_ALLOW_EXCEPTIONS …
#endif
#else
#ifdef __EXCEPTIONS
#define GRPC_ALLOW_EXCEPTIONS …
#else
#define GRPC_ALLOW_EXCEPTIONS …
#endif
#endif
#endif
#ifdef __GNUC__
#define GPR_LIKELY(x) …
#define GPR_UNLIKELY(x) …
#else
#define GPR_LIKELY …
#define GPR_UNLIKELY …
#endif
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#ifndef GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND
#ifdef GPR_WINDOWS
#define GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND …
#else
#define GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND
#endif
#endif
#define GRPC_CALLBACK_API_NONEXPERIMENTAL
#ifdef __clang__
#if __clang__ && __clang_major__ <= 11 && __has_feature(memory_sanitizer)
#undef GPR_NO_UNIQUE_ADDRESS
#define GPR_NO_UNIQUE_ADDRESS
#endif
#endif
#endif