1*dbb99499SAndroid Build Coastguard Worker #ifndef BENCHMARK_INTERNAL_MACROS_H_ 2*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_INTERNAL_MACROS_H_ 3*dbb99499SAndroid Build Coastguard Worker 4*dbb99499SAndroid Build Coastguard Worker /* Needed to detect STL */ 5*dbb99499SAndroid Build Coastguard Worker #include <cstdlib> 6*dbb99499SAndroid Build Coastguard Worker 7*dbb99499SAndroid Build Coastguard Worker // clang-format off 8*dbb99499SAndroid Build Coastguard Worker 9*dbb99499SAndroid Build Coastguard Worker #ifndef __has_feature 10*dbb99499SAndroid Build Coastguard Worker #define __has_feature(x) 0 11*dbb99499SAndroid Build Coastguard Worker #endif 12*dbb99499SAndroid Build Coastguard Worker 13*dbb99499SAndroid Build Coastguard Worker #if defined(__clang__) 14*dbb99499SAndroid Build Coastguard Worker #if !defined(COMPILER_CLANG) 15*dbb99499SAndroid Build Coastguard Worker #define COMPILER_CLANG 16*dbb99499SAndroid Build Coastguard Worker #endif 17*dbb99499SAndroid Build Coastguard Worker #elif defined(_MSC_VER) 18*dbb99499SAndroid Build Coastguard Worker #if !defined(COMPILER_MSVC) 19*dbb99499SAndroid Build Coastguard Worker #define COMPILER_MSVC 20*dbb99499SAndroid Build Coastguard Worker #endif 21*dbb99499SAndroid Build Coastguard Worker #elif defined(__GNUC__) 22*dbb99499SAndroid Build Coastguard Worker #if !defined(COMPILER_GCC) 23*dbb99499SAndroid Build Coastguard Worker #define COMPILER_GCC 24*dbb99499SAndroid Build Coastguard Worker #endif 25*dbb99499SAndroid Build Coastguard Worker #endif 26*dbb99499SAndroid Build Coastguard Worker 27*dbb99499SAndroid Build Coastguard Worker #if __has_feature(cxx_attributes) 28*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_NORETURN [[noreturn]] 29*dbb99499SAndroid Build Coastguard Worker #elif defined(__GNUC__) 30*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_NORETURN __attribute__((noreturn)) 31*dbb99499SAndroid Build Coastguard Worker #elif defined(COMPILER_MSVC) 32*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_NORETURN __declspec(noreturn) 33*dbb99499SAndroid Build Coastguard Worker #else 34*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_NORETURN 35*dbb99499SAndroid Build Coastguard Worker #endif 36*dbb99499SAndroid Build Coastguard Worker 37*dbb99499SAndroid Build Coastguard Worker #if defined(__CYGWIN__) 38*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_CYGWIN 1 39*dbb99499SAndroid Build Coastguard Worker #elif defined(_WIN32) 40*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_WINDOWS 1 41*dbb99499SAndroid Build Coastguard Worker // WINAPI_FAMILY_PARTITION is defined in winapifamily.h. 42*dbb99499SAndroid Build Coastguard Worker // We include windows.h which implicitly includes winapifamily.h for compatibility. 43*dbb99499SAndroid Build Coastguard Worker #ifndef NOMINMAX 44*dbb99499SAndroid Build Coastguard Worker #define NOMINMAX 45*dbb99499SAndroid Build Coastguard Worker #endif 46*dbb99499SAndroid Build Coastguard Worker #include <windows.h> 47*dbb99499SAndroid Build Coastguard Worker #if defined(WINAPI_FAMILY_PARTITION) 48*dbb99499SAndroid Build Coastguard Worker #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 49*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_WINDOWS_WIN32 1 50*dbb99499SAndroid Build Coastguard Worker #elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) 51*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_WINDOWS_RT 1 52*dbb99499SAndroid Build Coastguard Worker #endif 53*dbb99499SAndroid Build Coastguard Worker #endif 54*dbb99499SAndroid Build Coastguard Worker #if defined(__MINGW32__) 55*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_MINGW 1 56*dbb99499SAndroid Build Coastguard Worker #endif 57*dbb99499SAndroid Build Coastguard Worker #elif defined(__APPLE__) 58*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_APPLE 1 59*dbb99499SAndroid Build Coastguard Worker #include "TargetConditionals.h" 60*dbb99499SAndroid Build Coastguard Worker #if defined(TARGET_OS_MAC) 61*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_MACOSX 1 62*dbb99499SAndroid Build Coastguard Worker #if defined(TARGET_OS_IPHONE) 63*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_IOS 1 64*dbb99499SAndroid Build Coastguard Worker #endif 65*dbb99499SAndroid Build Coastguard Worker #endif 66*dbb99499SAndroid Build Coastguard Worker #elif defined(__FreeBSD__) 67*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_FREEBSD 1 68*dbb99499SAndroid Build Coastguard Worker #elif defined(__NetBSD__) 69*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_NETBSD 1 70*dbb99499SAndroid Build Coastguard Worker #elif defined(__OpenBSD__) 71*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_OPENBSD 1 72*dbb99499SAndroid Build Coastguard Worker #elif defined(__DragonFly__) 73*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_DRAGONFLY 1 74*dbb99499SAndroid Build Coastguard Worker #elif defined(__linux__) 75*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_LINUX 1 76*dbb99499SAndroid Build Coastguard Worker #elif defined(__native_client__) 77*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_NACL 1 78*dbb99499SAndroid Build Coastguard Worker #elif defined(__EMSCRIPTEN__) 79*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_EMSCRIPTEN 1 80*dbb99499SAndroid Build Coastguard Worker #elif defined(__rtems__) 81*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_RTEMS 1 82*dbb99499SAndroid Build Coastguard Worker #elif defined(__Fuchsia__) 83*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_FUCHSIA 1 84*dbb99499SAndroid Build Coastguard Worker #elif defined (__SVR4) && defined (__sun) 85*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_SOLARIS 1 86*dbb99499SAndroid Build Coastguard Worker #elif defined(__QNX__) 87*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_QNX 1 88*dbb99499SAndroid Build Coastguard Worker #elif defined(__MVS__) 89*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_ZOS 1 90*dbb99499SAndroid Build Coastguard Worker #elif defined(__hexagon__) 91*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_OS_QURT 1 92*dbb99499SAndroid Build Coastguard Worker #endif 93*dbb99499SAndroid Build Coastguard Worker 94*dbb99499SAndroid Build Coastguard Worker #if defined(__ANDROID__) && defined(__GLIBCXX__) 95*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_STL_ANDROID_GNUSTL 1 96*dbb99499SAndroid Build Coastguard Worker #endif 97*dbb99499SAndroid Build Coastguard Worker 98*dbb99499SAndroid Build Coastguard Worker #if !__has_feature(cxx_exceptions) && !defined(__cpp_exceptions) \ 99*dbb99499SAndroid Build Coastguard Worker && !defined(__EXCEPTIONS) 100*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_HAS_NO_EXCEPTIONS 101*dbb99499SAndroid Build Coastguard Worker #endif 102*dbb99499SAndroid Build Coastguard Worker 103*dbb99499SAndroid Build Coastguard Worker #if defined(COMPILER_CLANG) || defined(COMPILER_GCC) 104*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_MAYBE_UNUSED __attribute__((unused)) 105*dbb99499SAndroid Build Coastguard Worker #else 106*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_MAYBE_UNUSED 107*dbb99499SAndroid Build Coastguard Worker #endif 108*dbb99499SAndroid Build Coastguard Worker 109*dbb99499SAndroid Build Coastguard Worker // clang-format on 110*dbb99499SAndroid Build Coastguard Worker 111*dbb99499SAndroid Build Coastguard Worker #endif // BENCHMARK_INTERNAL_MACROS_H_ 112