summaryrefslogtreecommitdiffstats
path: root/mozglue/baseprofiler/core/PlatformMacros.h
blob: c72e94c1280cedf77b8cb15589c5154976219497 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef PLATFORM_MACROS_H
#define PLATFORM_MACROS_H

// Define platform selection macros in a consistent way. Don't add anything
// else to this file, so it can remain freestanding. The primary factorisation
// is on (ARCH,OS) pairs ("PLATforms") but ARCH_ and OS_ macros are defined
// too, since they are sometimes convenient.
//
// Note: "GP" is short for "Gecko Profiler".

#undef GP_PLAT_x86_android
#undef GP_PLAT_amd64_android
#undef GP_PLAT_arm_android
#undef GP_PLAT_arm64_android
#undef GP_PLAT_x86_linux
#undef GP_PLAT_amd64_linux
#undef GP_PLAT_arm_linux
#undef GP_PLAT_mips64_linux
#undef GP_PLAT_amd64_darwin
#undef GP_PLAT_arm64_darwin
#undef GP_PLAT_x86_windows
#undef GP_PLAT_amd64_windows
#undef GP_PLAT_arm64_windows

#undef GP_ARCH_x86
#undef GP_ARCH_amd64
#undef GP_ARCH_arm
#undef GP_ARCH_arm64
#undef GP_ARCH_mips64

#undef GP_OS_android
#undef GP_OS_linux
#undef GP_OS_darwin
#undef GP_OS_windows

// We test __ANDROID__ before __linux__ because __linux__ is defined on both
// Android and Linux, whereas GP_OS_android is not defined on vanilla Linux.

#if defined(__ANDROID__) && defined(__i386__)
#  define GP_PLAT_x86_android 1
#  define GP_ARCH_x86 1
#  define GP_OS_android 1

#elif defined(__ANDROID__) && defined(__x86_64__)
#  define GP_PLAT_amd64_android 1
#  define GP_ARCH_amd64 1
#  define GP_OS_android 1

#elif defined(__ANDROID__) && defined(__arm__)
#  define GP_PLAT_arm_android 1
#  define GP_ARCH_arm 1
#  define GP_OS_android 1

#elif defined(__ANDROID__) && defined(__aarch64__)
#  define GP_PLAT_arm64_android 1
#  define GP_ARCH_arm64 1
#  define GP_OS_android 1

#elif defined(__linux__) && defined(__i386__)
#  define GP_PLAT_x86_linux 1
#  define GP_ARCH_x86 1
#  define GP_OS_linux 1

#elif defined(__linux__) && defined(__x86_64__)
#  define GP_PLAT_amd64_linux 1
#  define GP_ARCH_amd64 1
#  define GP_OS_linux 1

#elif defined(__linux__) && defined(__arm__)
#  define GP_PLAT_arm_linux 1
#  define GP_ARCH_arm 1
#  define GP_OS_linux 1

#elif defined(__linux__) && defined(__aarch64__)
#  define GP_PLAT_arm64_linux 1
#  define GP_ARCH_arm64 1
#  define GP_OS_linux 1

#elif defined(__linux__) && defined(__mips64)
#  define GP_PLAT_mips64_linux 1
#  define GP_ARCH_mips64 1
#  define GP_OS_linux 1

#elif defined(__APPLE__) && defined(__aarch64__)
#  define GP_PLAT_arm64_darwin 1
#  define GP_ARCH_arm64 1
#  define GP_OS_darwin 1

#elif defined(__APPLE__) && defined(__x86_64__)
#  define GP_PLAT_amd64_darwin 1
#  define GP_ARCH_amd64 1
#  define GP_OS_darwin 1

#elif defined(__FreeBSD__) && defined(__x86_64__)
#  define GP_PLAT_amd64_freebsd 1
#  define GP_ARCH_amd64 1
#  define GP_OS_freebsd 1

#elif defined(__FreeBSD__) && defined(__aarch64__)
#  define GP_PLAT_arm64_freebsd 1
#  define GP_ARCH_arm64 1
#  define GP_OS_freebsd 1

#elif (defined(_MSC_VER) || defined(__MINGW32__)) && \
    (defined(_M_IX86) || defined(__i386__))
#  define GP_PLAT_x86_windows 1
#  define GP_ARCH_x86 1
#  define GP_OS_windows 1

#elif (defined(_MSC_VER) || defined(__MINGW32__)) && \
    (defined(_M_X64) || defined(__x86_64__))
#  define GP_PLAT_amd64_windows 1
#  define GP_ARCH_amd64 1
#  define GP_OS_windows 1

#elif defined(_MSC_VER) && defined(_M_ARM64)
#  define GP_PLAT_arm64_windows 1
#  define GP_ARCH_arm64 1
#  define GP_OS_windows 1

#else
#  error "Unsupported platform"
#endif

#endif /* ndef PLATFORM_MACROS_H */