Go to the documentation of this file. 19 #ifndef GRPC_IMPL_CODEGEN_PORT_PLATFORM_H 20 #define GRPC_IMPL_CODEGEN_PORT_PLATFORM_H 31 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) 32 #ifndef WIN32_LEAN_AND_MEAN 33 #define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 34 #define WIN32_LEAN_AND_MEAN 38 #define GRPC_NOMINMX_WAS_NOT_DEFINED 44 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" 46 #if (_WIN32_WINNT < 0x0600) 48 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" 54 #ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 55 #undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED 56 #undef WIN32_LEAN_AND_MEAN 59 #ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED 60 #undef GRPC_NOMINMAX_WAS_NOT_DEFINED 69 #if !defined(GPR_NO_AUTODETECT_PLATFORM) 70 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) 71 #if defined(_WIN64) || defined(WIN64) 76 #define GPR_PLATFORM_STRING "windows" 78 #define GPR_WINDOWS_SUBPROCESS 1 79 #define GPR_WINDOWS_ENV 81 #define GPR_GETPID_IN_UNISTD_H 1 82 #define GPR_MSYS_TMPFILE 84 #define GPR_POSIX_STRING 85 #define GPR_POSIX_TIME 87 #define GPR_GETPID_IN_PROCESS_H 1 88 #define GPR_WINDOWS_TMPFILE 89 #define GPR_WINDOWS_LOG 90 #define GPR_WINDOWS_CRASH_HANDLER 1 91 #define GPR_WINDOWS_STRING 92 #define GPR_WINDOWS_TIME 95 #define GPR_GCC_ATOMIC 1 98 #define GPR_WINDOWS_ATOMIC 1 99 #define GPR_MSVC_TLS 1 101 #elif defined(GPR_MANYLINUX1) 104 #define GPR_PLATFORM_STRING "manylinux" 105 #define GPR_POSIX_CRASH_HANDLER 1 106 #define GPR_CPU_POSIX 1 107 #define GPR_GCC_ATOMIC 1 108 #define GPR_GCC_TLS 1 110 #define GPR_LINUX_LOG 1 111 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 112 #define GPR_LINUX_ENV 1 113 #define GPR_POSIX_TMPFILE 1 114 #define GPR_POSIX_STRING 1 115 #define GPR_POSIX_SUBPROCESS 1 116 #define GPR_POSIX_SYNC 1 117 #define GPR_POSIX_TIME 1 118 #define GPR_GETPID_IN_UNISTD_H 1 120 #define GPR_ARCH_64 1 122 #define GPR_ARCH_32 1 124 #include <linux/version.h> 125 #elif defined(ANDROID) || defined(__ANDROID__) 126 #define GPR_PLATFORM_STRING "android" 127 #define GPR_ANDROID 1 129 #define GPR_ARCH_64 1 131 #define GPR_ARCH_32 1 133 #define GPR_CPU_POSIX 1 134 #define GPR_GCC_SYNC 1 135 #define GPR_GCC_TLS 1 136 #define GPR_POSIX_ENV 1 137 #define GPR_POSIX_TMPFILE 1 138 #define GPR_ANDROID_LOG 1 139 #define GPR_POSIX_STRING 1 140 #define GPR_POSIX_SUBPROCESS 1 141 #define GPR_POSIX_SYNC 1 142 #define GPR_POSIX_TIME 1 143 #define GPR_GETPID_IN_UNISTD_H 1 144 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 145 #elif defined(__linux__) 146 #define GPR_PLATFORM_STRING "linux" 150 #ifndef _DEFAULT_SOURCE 151 #define _DEFAULT_SOURCE 156 #include <features.h> 157 #define GPR_CPU_LINUX 1 158 #define GPR_GCC_ATOMIC 1 159 #define GPR_GCC_TLS 1 161 #define GPR_LINUX_LOG 162 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 163 #define GPR_LINUX_ENV 1 164 #define GPR_POSIX_TMPFILE 1 165 #define GPR_POSIX_STRING 1 166 #define GPR_POSIX_SUBPROCESS 1 167 #define GPR_POSIX_SYNC 1 168 #define GPR_POSIX_TIME 1 169 #define GPR_GETPID_IN_UNISTD_H 1 171 #define GPR_ARCH_64 1 173 #define GPR_ARCH_32 1 176 #define GPR_POSIX_CRASH_HANDLER 1 177 #define GPR_LINUX_PTHREAD_NAME 1 178 #include <linux/version.h> 180 #define GPR_MUSL_LIBC_COMPAT 1 182 #elif defined(__APPLE__) 183 #include <Availability.h> 184 #include <TargetConditionals.h> 189 #define GPR_PLATFORM_STRING "ios" 190 #define GPR_CPU_IPHONE 1 191 #define GPR_PTHREAD_TLS 1 193 #define GPR_PLATFORM_STRING "osx" 194 #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 195 #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 196 #define GPR_CPU_IPHONE 1 197 #define GPR_PTHREAD_TLS 1 199 #define GPR_CPU_POSIX 1 203 #ifndef GRPC_BAZEL_BUILD 204 #define GPR_GCC_TLS 1 206 #define GPR_PTHREAD_TLS 1 208 #define GPR_APPLE_PTHREAD_NAME 1 211 #define GPR_CPU_POSIX 1 214 #ifndef GRPC_BAZEL_BUILD 215 #define GPR_GCC_TLS 1 217 #define GPR_PTHREAD_TLS 1 220 #define GPR_POSIX_CRASH_HANDLER 1 223 #define GPR_GCC_ATOMIC 1 224 #define GPR_POSIX_LOG 1 225 #define GPR_POSIX_ENV 1 226 #define GPR_POSIX_TMPFILE 1 227 #define GPR_POSIX_STRING 1 228 #define GPR_POSIX_SUBPROCESS 1 229 #define GPR_POSIX_SYNC 1 230 #define GPR_POSIX_TIME 1 231 #define GPR_GETPID_IN_UNISTD_H 1 233 #ifndef GRPC_CFSTREAM 234 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 237 #define GPR_ARCH_64 1 239 #define GPR_ARCH_32 1 241 #elif defined(__FreeBSD__) 242 #define GPR_PLATFORM_STRING "freebsd" 246 #define GPR_FREEBSD 1 247 #define GPR_CPU_POSIX 1 248 #define GPR_GCC_ATOMIC 1 249 #define GPR_GCC_TLS 1 250 #define GPR_POSIX_LOG 1 251 #define GPR_POSIX_ENV 1 252 #define GPR_POSIX_TMPFILE 1 253 #define GPR_POSIX_STRING 1 254 #define GPR_POSIX_SUBPROCESS 1 255 #define GPR_POSIX_SYNC 1 256 #define GPR_POSIX_TIME 1 257 #define GPR_GETPID_IN_UNISTD_H 1 258 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 260 #define GPR_ARCH_64 1 262 #define GPR_ARCH_32 1 264 #elif defined(__OpenBSD__) 265 #define GPR_PLATFORM_STRING "openbsd" 269 #define GPR_OPENBSD 1 270 #define GPR_CPU_POSIX 1 271 #define GPR_GCC_ATOMIC 1 272 #define GPR_GCC_TLS 1 273 #define GPR_POSIX_LOG 1 274 #define GPR_POSIX_ENV 1 275 #define GPR_POSIX_TMPFILE 1 276 #define GPR_POSIX_STRING 1 277 #define GPR_POSIX_SUBPROCESS 1 278 #define GPR_POSIX_SYNC 1 279 #define GPR_POSIX_TIME 1 280 #define GPR_GETPID_IN_UNISTD_H 1 281 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 283 #define GPR_ARCH_64 1 285 #define GPR_ARCH_32 1 287 #elif defined(__sun) && defined(__SVR4) 288 #define GPR_PLATFORM_STRING "solaris" 289 #define GPR_SOLARIS 1 290 #define GPR_CPU_POSIX 1 291 #define GPR_GCC_ATOMIC 1 292 #define GPR_GCC_TLS 1 293 #define GPR_POSIX_LOG 1 294 #define GPR_POSIX_ENV 1 295 #define GPR_POSIX_TMPFILE 1 296 #define GPR_POSIX_STRING 1 297 #define GPR_POSIX_SUBPROCESS 1 298 #define GPR_POSIX_SYNC 1 299 #define GPR_POSIX_TIME 1 300 #define GPR_GETPID_IN_UNISTD_H 1 302 #define GPR_ARCH_64 1 304 #define GPR_ARCH_32 1 307 #define GPR_PLATFORM_STRING "aix" 312 #define GPR_CPU_POSIX 1 313 #define GPR_GCC_ATOMIC 1 314 #define GPR_GCC_TLS 1 315 #define GPR_POSIX_LOG 1 316 #define GPR_POSIX_ENV 1 317 #define GPR_POSIX_TMPFILE 1 318 #define GPR_POSIX_STRING 1 319 #define GPR_POSIX_SUBPROCESS 1 320 #define GPR_POSIX_SYNC 1 321 #define GPR_POSIX_TIME 1 322 #define GPR_GETPID_IN_UNISTD_H 1 324 #define GPR_ARCH_64 1 326 #define GPR_ARCH_32 1 328 #elif defined(__native_client__) 329 #define GPR_PLATFORM_STRING "nacl" 333 #ifndef _DEFAULT_SOURCE 334 #define _DEFAULT_SOURCE 340 #define GPR_CPU_POSIX 1 341 #define GPR_GCC_ATOMIC 1 342 #define GPR_GCC_TLS 1 343 #define GPR_POSIX_LOG 1 344 #define GPR_POSIX_ENV 1 345 #define GPR_POSIX_TMPFILE 1 346 #define GPR_POSIX_STRING 1 347 #define GPR_POSIX_SUBPROCESS 1 348 #define GPR_POSIX_SYNC 1 349 #define GPR_POSIX_TIME 1 350 #define GPR_GETPID_IN_UNISTD_H 1 352 #define GPR_ARCH_64 1 354 #define GPR_ARCH_32 1 357 #error "Could not auto-detect platform" 372 #if defined(__ANDROID__) && defined(GPR_GCC_TLS) 373 #if __has_include(<android/ndk-version.h>) 374 #include <android/ndk-version.h> 376 #if (defined(__clang__) && defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \ 377 ((__NDK_MAJOR__ < 12) || \ 378 ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))) || \ 379 (defined(__GNUC__) && !defined(__clang__)) 381 #define GPR_PTHREAD_TLS 1 385 #if defined(__has_include) 386 #if __has_include(<atomic>) 387 #define GRPC_HAS_CXX11_ATOMIC 391 #ifndef GPR_PLATFORM_STRING 392 #warning "GPR_PLATFORM_STRING not auto-detected" 393 #define GPR_PLATFORM_STRING "unknown" 397 #undef GPR_FORBID_UNREACHABLE_CODE 398 #define GPR_FORBID_UNREACHABLE_CODE 1 403 typedef __int8 int8_t;
404 typedef __int16 int16_t;
405 typedef __int32 int32_t;
406 typedef __int64 int64_t;
407 typedef unsigned __int8 uint8_t;
408 typedef unsigned __int16 uint16_t;
409 typedef unsigned __int32 uint32_t;
410 typedef unsigned __int64 uint64_t;
419 #ifndef GPR_CACHELINE_SIZE_LOG 420 #if defined(__i386__) || defined(__x86_64__) 421 #define GPR_CACHELINE_SIZE_LOG 6 423 #ifndef GPR_CACHELINE_SIZE_LOG 426 #define GPR_CACHELINE_SIZE_LOG 6 430 #define GPR_CACHELINE_SIZE (1 << GPR_CACHELINE_SIZE_LOG) 433 #if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED) 434 #undef GPR_GCC_ATOMIC 435 #define GPR_GCC_SYNC 1 439 #if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \ 440 defined(GPR_WINDOWS_ATOMIC) != \ 442 #error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC 445 #if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1 446 #error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64 449 #if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \ 450 defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \ 452 #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM 455 #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \ 456 defined(GPR_CUSTOM_TLS) != \ 458 #error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS 463 #define GPR_MAX_ALIGNMENT 16 469 #ifndef GRPC_IF_NAMETOINDEX 470 #define GRPC_IF_NAMETOINDEX 1 473 #ifndef GRPC_MUST_USE_RESULT 474 #if defined(__GNUC__) && !defined(__MINGW32__) 475 #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result)) 476 #define GPR_ALIGN_STRUCT(n) __attribute__((aligned(n))) 478 #define GRPC_MUST_USE_RESULT 479 #define GPR_ALIGN_STRUCT(n) 484 #if defined(__GNUC__) && !defined(__MINGW32__) 485 #define GRPC_UNUSED __attribute__((unused)) 491 #ifndef GPR_PRINT_FORMAT_CHECK 493 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ 494 __attribute__((format(printf, FORMAT_STR, ARGS))) 496 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) 500 #if GPR_FORBID_UNREACHABLE_CODE 501 #define GPR_UNREACHABLE_CODE(STATEMENT) 503 #define GPR_UNREACHABLE_CODE(STATEMENT) \ 505 gpr_log(GPR_ERROR, "Should never reach here."); \ 516 #define GRPCAPI GPRAPI 520 #define CENSUSAPI GRPCAPI 523 #ifndef GPR_ATTRIBUTE_NO_TSAN 524 #if defined(__has_feature) 525 #if __has_feature(thread_sanitizer) 526 #define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread"))) 529 #ifndef GPR_ATTRIBUTE_NO_TSAN 530 #define GPR_ATTRIBUTE_NO_TSAN 535 #if defined(__SANITIZE_THREAD__) 536 #define GRPC_TSAN_ENABLED 537 #elif defined(__has_feature) 538 #if __has_feature(thread_sanitizer) 539 #define GRPC_TSAN_ENABLED 544 #ifndef GRPC_ALLOW_EXCEPTIONS 548 #define GRPC_ALLOW_EXCEPTIONS 1 551 #define GRPC_ALLOW_EXCEPTIONS 1 553 #define GRPC_ALLOW_EXCEPTIONS 0 562 #define GPR_LIKELY(x) __builtin_expect((x), 1) 563 #define GPR_UNLIKELY(x) __builtin_expect((x), 0) 565 #define GPR_LIKELY(x) (x) 566 #define GPR_UNLIKELY(x) (x) 569 #ifndef __STDC_FORMAT_MACROS 570 #define __STDC_FORMAT_MACROS