112 lines · c
1#ifndef BENCHMARK_INTERNAL_MACROS_H_2#define BENCHMARK_INTERNAL_MACROS_H_3 4/* Needed to detect STL */5#include <cstdlib>6 7// clang-format off8 9#ifndef __has_feature10#define __has_feature(x) 011#endif12 13#if defined(__clang__)14 #if !defined(COMPILER_CLANG)15 #define COMPILER_CLANG16 #endif17#elif defined(_MSC_VER)18 #if !defined(COMPILER_MSVC)19 #define COMPILER_MSVC20 #endif21#elif defined(__GNUC__)22 #if !defined(COMPILER_GCC)23 #define COMPILER_GCC24 #endif25#endif26 27#if __has_feature(cxx_attributes)28 #define BENCHMARK_NORETURN [[noreturn]]29#elif defined(__GNUC__)30 #define BENCHMARK_NORETURN __attribute__((noreturn))31#elif defined(COMPILER_MSVC)32 #define BENCHMARK_NORETURN __declspec(noreturn)33#else34 #define BENCHMARK_NORETURN35#endif36 37#if defined(__CYGWIN__)38 #define BENCHMARK_OS_CYGWIN 139#elif defined(_WIN32)40 #define BENCHMARK_OS_WINDOWS 141 // WINAPI_FAMILY_PARTITION is defined in winapifamily.h.42 // We include windows.h which implicitly includes winapifamily.h for compatibility.43 #ifndef NOMINMAX44 #define NOMINMAX45 #endif46 #include <windows.h>47 #if defined(WINAPI_FAMILY_PARTITION)48 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)49 #define BENCHMARK_OS_WINDOWS_WIN32 150 #elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)51 #define BENCHMARK_OS_WINDOWS_RT 152 #endif53 #endif54 #if defined(__MINGW32__)55 #define BENCHMARK_OS_MINGW 156 #endif57#elif defined(__APPLE__)58 #define BENCHMARK_OS_APPLE 159 #include "TargetConditionals.h"60 #if defined(TARGET_OS_MAC)61 #define BENCHMARK_OS_MACOSX 162 #if defined(TARGET_OS_IPHONE)63 #define BENCHMARK_OS_IOS 164 #endif65 #endif66#elif defined(__FreeBSD__)67 #define BENCHMARK_OS_FREEBSD 168#elif defined(__NetBSD__)69 #define BENCHMARK_OS_NETBSD 170#elif defined(__OpenBSD__)71 #define BENCHMARK_OS_OPENBSD 172#elif defined(__DragonFly__)73 #define BENCHMARK_OS_DRAGONFLY 174#elif defined(__linux__)75 #define BENCHMARK_OS_LINUX 176#elif defined(__native_client__)77 #define BENCHMARK_OS_NACL 178#elif defined(__EMSCRIPTEN__)79 #define BENCHMARK_OS_EMSCRIPTEN 180#elif defined(__rtems__)81 #define BENCHMARK_OS_RTEMS 182#elif defined(__Fuchsia__)83#define BENCHMARK_OS_FUCHSIA 184#elif defined (__SVR4) && defined (__sun)85#define BENCHMARK_OS_SOLARIS 186#elif defined(__QNX__)87#define BENCHMARK_OS_QNX 188#elif defined(__MVS__)89#define BENCHMARK_OS_ZOS 190#elif defined(__hexagon__)91#define BENCHMARK_OS_QURT 192#endif93 94#if defined(__ANDROID__) && defined(__GLIBCXX__)95#define BENCHMARK_STL_ANDROID_GNUSTL 196#endif97 98#if !__has_feature(cxx_exceptions) && !defined(__cpp_exceptions) \99 && !defined(__EXCEPTIONS)100 #define BENCHMARK_HAS_NO_EXCEPTIONS101#endif102 103#if defined(COMPILER_CLANG) || defined(COMPILER_GCC)104 #define BENCHMARK_MAYBE_UNUSED __attribute__((unused))105#else106 #define BENCHMARK_MAYBE_UNUSED107#endif108 109// clang-format on110 111#endif // BENCHMARK_INTERNAL_MACROS_H_112