Go to the documentation of this file. 19 #ifndef GRPC_IMPL_CODEGEN_PORT_PLATFORM_H 20 #define GRPC_IMPL_CODEGEN_PORT_PLATFORM_H 34 #define GRPC_USE_ABSL 0 38 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) 39 #ifndef WIN32_LEAN_AND_MEAN 40 #define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 41 #define WIN32_LEAN_AND_MEAN 45 #define GRPC_NOMINMX_WAS_NOT_DEFINED 51 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" 53 #if (_WIN32_WINNT < 0x0600) 55 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" 61 #ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 62 #undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 63 #undef WIN32_LEAN_AND_MEAN 66 #ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED 67 #undef GRPC_NOMINMAX_WAS_NOT_DEFINED 76 #if !defined(GPR_NO_AUTODETECT_PLATFORM) 77 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) 78 #if defined(_WIN64) || defined(WIN64) 83 #define GPR_PLATFORM_STRING "windows" 85 #define GPR_WINDOWS_SUBPROCESS 1 86 #define GPR_WINDOWS_ENV 88 #define GPR_GETPID_IN_UNISTD_H 1 89 #define GPR_MSYS_TMPFILE 91 #define GPR_POSIX_STRING 92 #define GPR_POSIX_TIME 94 #define GPR_GETPID_IN_PROCESS_H 1 95 #define GPR_WINDOWS_TMPFILE 96 #define GPR_WINDOWS_LOG 97 #define GPR_WINDOWS_CRASH_HANDLER 1 98 #define GPR_WINDOWS_STRING 99 #define GPR_WINDOWS_TIME 102 #define GPR_GCC_ATOMIC 1 103 #define GPR_GCC_TLS 1 105 #define GPR_WINDOWS_ATOMIC 1 106 #define GPR_MSVC_TLS 1 108 #elif defined(GPR_MANYLINUX1) 111 #define GPR_PLATFORM_STRING "manylinux" 112 #define GPR_POSIX_CRASH_HANDLER 1 113 #define GPR_CPU_POSIX 1 114 #define GPR_GCC_ATOMIC 1 115 #define GPR_GCC_TLS 1 117 #define GPR_LINUX_LOG 1 118 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 119 #define GPR_LINUX_ENV 1 120 #define GPR_POSIX_TMPFILE 1 121 #define GPR_POSIX_STRING 1 122 #define GPR_POSIX_SUBPROCESS 1 123 #define GPR_POSIX_SYNC 1 124 #define GPR_POSIX_TIME 1 125 #define GPR_HAS_PTHREAD_H 1 126 #define GPR_GETPID_IN_UNISTD_H 1 128 #define GPR_ARCH_64 1 130 #define GPR_ARCH_32 1 132 #include <linux/version.h> 133 #elif defined(ANDROID) || defined(__ANDROID__) 134 #define GPR_PLATFORM_STRING "android" 135 #define GPR_ANDROID 1 141 #define GPR_ARCH_64 1 143 #define GPR_ARCH_32 1 145 #define GPR_CPU_POSIX 1 146 #define GPR_GCC_SYNC 1 147 #define GPR_GCC_TLS 1 148 #define GPR_POSIX_ENV 1 149 #define GPR_POSIX_TMPFILE 1 150 #define GPR_ANDROID_LOG 1 151 #define GPR_POSIX_STRING 1 152 #define GPR_POSIX_SUBPROCESS 1 153 #define GPR_POSIX_SYNC 1 154 #define GPR_POSIX_TIME 1 155 #define GPR_HAS_PTHREAD_H 1 156 #define GPR_GETPID_IN_UNISTD_H 1 157 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 158 #elif defined(__linux__) 159 #define GPR_PLATFORM_STRING "linux" 163 #ifndef _DEFAULT_SOURCE 164 #define _DEFAULT_SOURCE 169 #include <features.h> 170 #define GPR_CPU_LINUX 1 171 #define GPR_GCC_ATOMIC 1 172 #define GPR_GCC_TLS 1 174 #define GPR_LINUX_LOG 175 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 176 #define GPR_LINUX_ENV 1 177 #define GPR_POSIX_TMPFILE 1 178 #define GPR_POSIX_STRING 1 179 #define GPR_POSIX_SUBPROCESS 1 180 #define GPR_POSIX_SYNC 1 181 #define GPR_POSIX_TIME 1 182 #define GPR_HAS_PTHREAD_H 1 183 #define GPR_GETPID_IN_UNISTD_H 1 185 #define GPR_ARCH_64 1 187 #define GPR_ARCH_32 1 190 #define GPR_POSIX_CRASH_HANDLER 1 191 #define GPR_LINUX_PTHREAD_NAME 1 192 #include <linux/version.h> 194 #define GPR_MUSL_LIBC_COMPAT 1 196 #elif defined(__ASYLO__) 197 #define GPR_ARCH_64 1 198 #define GPR_CPU_POSIX 1 199 #define GPR_GCC_TLS 1 200 #define GPR_PLATFORM_STRING "asylo" 201 #define GPR_GCC_SYNC 1 202 #define GPR_POSIX_SYNC 1 203 #define GPR_POSIX_STRING 1 204 #define GPR_POSIX_LOG 1 205 #define GPR_POSIX_TIME 1 206 #define GPR_POSIX_ENV 1 208 #define GRPC_POSIX_SOCKET 1 209 #define GRPC_POSIX_SOCKETADDR 210 #define GRPC_POSIX_SOCKETUTILS 1 211 #define GRPC_TIMER_USE_GENERIC 1 212 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 213 #define GRPC_POSIX_WAKEUP_FD 1 215 #define GPR_NO_AUTODETECT_PLATFORM 1 216 #elif defined(__APPLE__) 217 #include <Availability.h> 218 #include <TargetConditionals.h> 223 #define GPR_PLATFORM_STRING "ios" 224 #define GPR_CPU_IPHONE 1 225 #define GPR_PTHREAD_TLS 1 226 #define GRPC_CFSTREAM 1 230 #define GPR_PLATFORM_STRING "osx" 231 #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 232 #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 233 #define GPR_CPU_IPHONE 1 234 #define GPR_PTHREAD_TLS 1 236 #define GPR_CPU_POSIX 1 240 #ifndef GRPC_BAZEL_BUILD 241 #define GPR_GCC_TLS 1 243 #define GPR_PTHREAD_TLS 1 245 #define GPR_APPLE_PTHREAD_NAME 1 248 #define GPR_CPU_POSIX 1 251 #ifndef GRPC_BAZEL_BUILD 252 #define GPR_GCC_TLS 1 254 #define GPR_PTHREAD_TLS 1 257 #define GPR_POSIX_CRASH_HANDLER 1 260 #define GPR_GCC_ATOMIC 1 261 #define GPR_POSIX_LOG 1 262 #define GPR_POSIX_ENV 1 263 #define GPR_POSIX_TMPFILE 1 264 #define GPR_POSIX_STRING 1 265 #define GPR_POSIX_SUBPROCESS 1 266 #define GPR_POSIX_SYNC 1 267 #define GPR_POSIX_TIME 1 268 #define GPR_HAS_PTHREAD_H 1 269 #define GPR_GETPID_IN_UNISTD_H 1 270 #ifndef GRPC_CFSTREAM 271 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 274 #define GPR_ARCH_64 1 276 #define GPR_ARCH_32 1 278 #elif defined(__FreeBSD__) 279 #define GPR_PLATFORM_STRING "freebsd" 283 #define GPR_FREEBSD 1 284 #define GPR_CPU_POSIX 1 285 #define GPR_GCC_ATOMIC 1 286 #define GPR_GCC_TLS 1 287 #define GPR_POSIX_LOG 1 288 #define GPR_POSIX_ENV 1 289 #define GPR_POSIX_TMPFILE 1 290 #define GPR_POSIX_STRING 1 291 #define GPR_POSIX_SUBPROCESS 1 292 #define GPR_POSIX_SYNC 1 293 #define GPR_POSIX_TIME 1 294 #define GPR_HAS_PTHREAD_H 1 295 #define GPR_GETPID_IN_UNISTD_H 1 296 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 298 #define GPR_ARCH_64 1 300 #define GPR_ARCH_32 1 302 #elif defined(__OpenBSD__) 303 #define GPR_PLATFORM_STRING "openbsd" 307 #define GPR_OPENBSD 1 308 #define GPR_CPU_POSIX 1 309 #define GPR_GCC_ATOMIC 1 310 #define GPR_GCC_TLS 1 311 #define GPR_POSIX_LOG 1 312 #define GPR_POSIX_ENV 1 313 #define GPR_POSIX_TMPFILE 1 314 #define GPR_POSIX_STRING 1 315 #define GPR_POSIX_SUBPROCESS 1 316 #define GPR_POSIX_SYNC 1 317 #define GPR_POSIX_TIME 1 318 #define GPR_HAS_PTHREAD_H 1 319 #define GPR_GETPID_IN_UNISTD_H 1 320 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 322 #define GPR_ARCH_64 1 324 #define GPR_ARCH_32 1 326 #elif defined(__sun) && defined(__SVR4) 327 #define GPR_PLATFORM_STRING "solaris" 328 #define GPR_SOLARIS 1 329 #define GPR_CPU_POSIX 1 330 #define GPR_GCC_ATOMIC 1 331 #define GPR_GCC_TLS 1 332 #define GPR_POSIX_LOG 1 333 #define GPR_POSIX_ENV 1 334 #define GPR_POSIX_TMPFILE 1 335 #define GPR_POSIX_STRING 1 336 #define GPR_POSIX_SUBPROCESS 1 337 #define GPR_POSIX_SYNC 1 338 #define GPR_POSIX_TIME 1 339 #define GPR_HAS_PTHREAD_H 1 340 #define GPR_GETPID_IN_UNISTD_H 1 342 #define GPR_ARCH_64 1 344 #define GPR_ARCH_32 1 347 #define GPR_PLATFORM_STRING "aix" 352 #define GPR_CPU_POSIX 1 353 #define GPR_GCC_ATOMIC 1 354 #define GPR_GCC_TLS 1 355 #define GPR_POSIX_LOG 1 356 #define GPR_POSIX_ENV 1 357 #define GPR_POSIX_TMPFILE 1 358 #define GPR_POSIX_STRING 1 359 #define GPR_POSIX_SUBPROCESS 1 360 #define GPR_POSIX_SYNC 1 361 #define GPR_POSIX_TIME 1 362 #define GPR_HAS_PTHREAD_H 1 363 #define GPR_GETPID_IN_UNISTD_H 1 365 #define GPR_ARCH_64 1 367 #define GPR_ARCH_32 1 369 #elif defined(__native_client__) 370 #define GPR_PLATFORM_STRING "nacl" 374 #ifndef _DEFAULT_SOURCE 375 #define _DEFAULT_SOURCE 381 #define GPR_CPU_POSIX 1 382 #define GPR_GCC_ATOMIC 1 383 #define GPR_GCC_TLS 1 384 #define GPR_POSIX_LOG 1 385 #define GPR_POSIX_ENV 1 386 #define GPR_POSIX_TMPFILE 1 387 #define GPR_POSIX_STRING 1 388 #define GPR_POSIX_SUBPROCESS 1 389 #define GPR_POSIX_SYNC 1 390 #define GPR_POSIX_TIME 1 391 #define GPR_HAS_PTHREAD_H 1 392 #define GPR_GETPID_IN_UNISTD_H 1 394 #define GPR_ARCH_64 1 396 #define GPR_ARCH_32 1 398 #elif defined(__Fuchsia__) 399 #define GPR_FUCHSIA 1 400 #define GPR_ARCH_64 1 401 #define GPR_PLATFORM_STRING "fuchsia" 402 #include <features.h> 405 #define GPR_MUSL_LIBC_COMPAT 1 406 #define GPR_CPU_POSIX 1 407 #define GPR_GCC_ATOMIC 1 408 #define GPR_PTHREAD_TLS 1 409 #define GPR_POSIX_LOG 1 410 #define GPR_POSIX_SYNC 1 411 #define GPR_POSIX_ENV 1 412 #define GPR_POSIX_TMPFILE 1 413 #define GPR_POSIX_SUBPROCESS 1 414 #define GPR_POSIX_SYNC 1 415 #define GPR_POSIX_STRING 1 416 #define GPR_POSIX_TIME 1 417 #define GPR_HAS_PTHREAD_H 1 418 #define GPR_GETPID_IN_UNISTD_H 1 420 #error "Could not auto-detect platform" 424 #if defined(GPR_BACKWARDS_COMPATIBILITY_MODE) 430 #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 431 #undef _FORTIFY_SOURCE 432 #define _FORTIFY_SOURCE 0 447 #if defined(__ANDROID__) && defined(GPR_GCC_TLS) 448 #if __has_include(<android/ndk-version.h>) 449 #include <android/ndk-version.h> 451 #if (defined(__clang__) && defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \ 452 ((__NDK_MAJOR__ < 12) || \ 453 ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))) || \ 454 (defined(__GNUC__) && !defined(__clang__)) 456 #define GPR_PTHREAD_TLS 1 460 #if defined(__has_include) 461 #if __has_include(<atomic>) 462 #define GRPC_HAS_CXX11_ATOMIC 466 #ifndef GPR_PLATFORM_STRING 467 #warning "GPR_PLATFORM_STRING not auto-detected" 468 #define GPR_PLATFORM_STRING "unknown" 472 #undef GPR_FORBID_UNREACHABLE_CODE 473 #define GPR_FORBID_UNREACHABLE_CODE 1 478 typedef __int8 int8_t;
479 typedef __int16 int16_t;
480 typedef __int32 int32_t;
481 typedef __int64 int64_t;
482 typedef unsigned __int8 uint8_t;
483 typedef unsigned __int16 uint16_t;
484 typedef unsigned __int32 uint32_t;
485 typedef unsigned __int64 uint64_t;
505 #define GPR_CYCLE_COUNTER_FALLBACK 1 507 #define GPR_CYCLE_COUNTER_FALLBACK 1 511 #ifndef GPR_CACHELINE_SIZE_LOG 512 #if defined(__i386__) || defined(__x86_64__) 513 #define GPR_CACHELINE_SIZE_LOG 6 515 #ifndef GPR_CACHELINE_SIZE_LOG 518 #define GPR_CACHELINE_SIZE_LOG 6 522 #define GPR_CACHELINE_SIZE (1 << GPR_CACHELINE_SIZE_LOG) 525 #if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED) 526 #undef GPR_GCC_ATOMIC 527 #define GPR_GCC_SYNC 1 531 #if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \ 532 defined(GPR_WINDOWS_ATOMIC) != \ 534 #error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC 537 #if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1 538 #error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64 541 #if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \ 542 defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \ 544 #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM 547 #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \ 548 defined(GPR_CUSTOM_TLS) != \ 550 #error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS 555 #define GPR_MAX_ALIGNMENT 16 561 #ifndef GRPC_IF_NAMETOINDEX 562 #define GRPC_IF_NAMETOINDEX 1 565 #ifndef GRPC_MUST_USE_RESULT 566 #if defined(__GNUC__) && !defined(__MINGW32__) 567 #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result)) 568 #define GPR_ALIGN_STRUCT(n) __attribute__((aligned(n))) 570 #define GRPC_MUST_USE_RESULT 571 #define GPR_ALIGN_STRUCT(n) 576 #if defined(__GNUC__) && !defined(__MINGW32__) 577 #define GRPC_UNUSED __attribute__((unused)) 583 #ifndef GPR_PRINT_FORMAT_CHECK 585 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ 586 __attribute__((format(printf, FORMAT_STR, ARGS))) 588 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) 592 #if GPR_FORBID_UNREACHABLE_CODE 593 #define GPR_UNREACHABLE_CODE(STATEMENT) 595 #define GPR_UNREACHABLE_CODE(STATEMENT) \ 597 gpr_log(GPR_ERROR, "Should never reach here."); \ 608 #define GRPCAPI GPRAPI 612 #define CENSUSAPI GRPCAPI 615 #ifndef GPR_HAS_ATTRIBUTE 616 #ifdef __has_attribute 617 #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a) 619 #define GPR_HAS_ATTRIBUTE(a) 0 623 #ifndef GPR_HAS_FEATURE 625 #define GPR_HAS_FEATURE(a) __has_feature(a) 627 #define GPR_HAS_FEATURE(a) 0 631 #ifndef GPR_ATTRIBUTE_NOINLINE 632 #if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__)) 633 #define GPR_ATTRIBUTE_NOINLINE __attribute__((noinline)) 634 #define GPR_HAS_ATTRIBUTE_NOINLINE 1 636 #define GPR_ATTRIBUTE_NOINLINE 640 #ifndef GPR_ATTRIBUTE_WEAK 643 #if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \ 644 !(defined(__llvm__) && defined(_WIN32)) 645 #define GPR_ATTRIBUTE_WEAK __attribute__((weak)) 646 #define GPR_HAS_ATTRIBUTE_WEAK 1 648 #define GPR_ATTRIBUTE_WEAK 652 #ifndef GPR_ATTRIBUTE_NO_TSAN 653 #if GPR_HAS_FEATURE(thread_sanitizer) 654 #define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread"))) 656 #ifndef GPR_ATTRIBUTE_NO_TSAN 657 #define GPR_ATTRIBUTE_NO_TSAN 662 #if defined(__SANITIZE_THREAD__) 663 #define GRPC_TSAN_ENABLED 664 #elif GPR_HAS_FEATURE(thread_sanitizer) 665 #define GRPC_TSAN_ENABLED 669 #if defined(__SANITIZE_ADDRESS__) 670 #define GRPC_ASAN_ENABLED 671 #elif GPR_HAS_FEATURE(address_sanitizer) 672 #define GRPC_ASAN_ENABLED 676 #ifndef GRPC_ALLOW_EXCEPTIONS 678 #if defined(_MSC_VER) && defined(_CPPUNWIND) 679 #define GRPC_ALLOW_EXCEPTIONS 1 680 #elif defined(__EXCEPTIONS) 681 #define GRPC_ALLOW_EXCEPTIONS 1 683 #define GRPC_ALLOW_EXCEPTIONS 0 687 #define GRPC_ALLOW_EXCEPTIONS 1 689 #define GRPC_ALLOW_EXCEPTIONS 0 698 #define GPR_LIKELY(x) __builtin_expect((x), 1) 699 #define GPR_UNLIKELY(x) __builtin_expect((x), 0) 701 #define GPR_LIKELY(x) (x) 702 #define GPR_UNLIKELY(x) (x) 705 #ifndef __STDC_FORMAT_MACROS 706 #define __STDC_FORMAT_MACROS