xref: /aosp_15_r20/external/google-benchmark/src/internal_macros.h (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
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