blob: 0707f2b40aef165e84d76f7a9f17fb6b436fcd75 [file] [log] [blame]
Jonathan Peyton92907c22015-05-29 16:13:56 +00001/*
2 * kmp_platform.h -- header for determining operating system and architecture
3 */
4
5//===----------------------------------------------------------------------===//
6//
7// The LLVM Compiler Infrastructure
8//
9// This file is dual licensed under the MIT and the University of Illinois Open
10// Source Licenses. See LICENSE.txt for details.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef KMP_PLATFORM_H
15#define KMP_PLATFORM_H
16
17/* ---------------------- Operating system recognition ------------------- */
18
19#define KMP_OS_LINUX 0
20#define KMP_OS_FREEBSD 0
Joerg Sonnenberger1564f3c2015-09-21 20:02:45 +000021#define KMP_OS_NETBSD 0
Jonathan Peyton92907c22015-05-29 16:13:56 +000022#define KMP_OS_DARWIN 0
23#define KMP_OS_WINDOWS 0
24#define KMP_OS_CNK 0
25#define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */
26
27
28#ifdef _WIN32
29# undef KMP_OS_WINDOWS
30# define KMP_OS_WINDOWS 1
31#endif
32
33#if ( defined __APPLE__ && defined __MACH__ )
34# undef KMP_OS_DARWIN
35# define KMP_OS_DARWIN 1
36#endif
37
38// in some ppc64 linux installations, only the second condition is met
39#if ( defined __linux )
40# undef KMP_OS_LINUX
41# define KMP_OS_LINUX 1
42#elif ( defined __linux__)
43# undef KMP_OS_LINUX
44# define KMP_OS_LINUX 1
45#else
46#endif
47
48#if ( defined __FreeBSD__ )
49# undef KMP_OS_FREEBSD
50# define KMP_OS_FREEBSD 1
51#endif
52
Joerg Sonnenberger1564f3c2015-09-21 20:02:45 +000053#if ( defined __NetBSD__ )
54# undef KMP_OS_NETBSD
55# define KMP_OS_NETBSD 1
56#endif
57
Jonathan Peyton92907c22015-05-29 16:13:56 +000058#if ( defined __bgq__ )
59# undef KMP_OS_CNK
60# define KMP_OS_CNK 1
61#endif
62
Joerg Sonnenberger1564f3c2015-09-21 20:02:45 +000063#if (1 != KMP_OS_LINUX + KMP_OS_FREEBSD + KMP_OS_NETBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS)
Jonathan Peyton92907c22015-05-29 16:13:56 +000064# error Unknown OS
65#endif
66
Joerg Sonnenberger1564f3c2015-09-21 20:02:45 +000067#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DARWIN
Jonathan Peyton92907c22015-05-29 16:13:56 +000068# undef KMP_OS_UNIX
69# define KMP_OS_UNIX 1
70#endif
71
72/* ---------------------- Architecture recognition ------------------- */
73
74#define KMP_ARCH_X86 0
75#define KMP_ARCH_X86_64 0
76#define KMP_ARCH_AARCH64 0
77#define KMP_ARCH_PPC64_BE 0
78#define KMP_ARCH_PPC64_LE 0
79#define KMP_ARCH_PPC64 (KMP_ARCH_PPC64_LE || KMP_ARCH_PPC64_BE)
80
81#if KMP_OS_WINDOWS
82# if defined _M_AMD64
83# undef KMP_ARCH_X86_64
84# define KMP_ARCH_X86_64 1
85# else
86# undef KMP_ARCH_X86
87# define KMP_ARCH_X86 1
88# endif
89#endif
90
91#if KMP_OS_UNIX
92# if defined __x86_64
93# undef KMP_ARCH_X86_64
94# define KMP_ARCH_X86_64 1
95# elif defined __i386
96# undef KMP_ARCH_X86
97# define KMP_ARCH_X86 1
98# elif defined __powerpc64__
99# if defined __LITTLE_ENDIAN__
100# undef KMP_ARCH_PPC64_LE
101# define KMP_ARCH_PPC64_LE 1
102# else
103# undef KMP_ARCH_PPC64_BE
104# define KMP_ARCH_PPC64_BE 1
105# endif
106# elif defined __aarch64__
107# undef KMP_ARCH_AARCH64
108# define KMP_ARCH_AARCH64 1
109# endif
110#endif
111
112#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) || \
113 defined(__ARM_ARCH_7A__)
114# define KMP_ARCH_ARMV7 1
115#endif
116
117#if defined(KMP_ARCH_ARMV7) || defined(__ARM_ARCH_6__) || \
118 defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
119 defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6T2__) || \
120 defined(__ARM_ARCH_6ZK__)
121# define KMP_ARCH_ARMV6 1
122#endif
123
124#if defined(KMP_ARCH_ARMV6) || defined(__ARM_ARCH_5T__) || \
125 defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || \
126 defined(__ARM_ARCH_5TEJ__)
127# define KMP_ARCH_ARMV5 1
128#endif
129
130#if defined(KMP_ARCH_ARMV5) || defined(__ARM_ARCH_4__) || \
131 defined(__ARM_ARCH_4T__)
132# define KMP_ARCH_ARMV4 1
133#endif
134
135#if defined(KMP_ARCH_ARMV4) || defined(__ARM_ARCH_3__) || \
136 defined(__ARM_ARCH_3M__)
137# define KMP_ARCH_ARMV3 1
138#endif
139
140#if defined(KMP_ARCH_ARMV3) || defined(__ARM_ARCH_2__)
141# define KMP_ARCH_ARMV2 1
142#endif
143
144#if defined(KMP_ARCH_ARMV2)
145# define KMP_ARCH_ARM 1
146#endif
147
Jonathan Peyton621743b2015-08-20 19:46:14 +0000148#if defined(__MIC__) || defined(__MIC2__)
149# define KMP_MIC 1
150# if __MIC2__ || __KNC__
151# define KMP_MIC1 0
152# define KMP_MIC2 1
153# else
154# define KMP_MIC1 1
155# define KMP_MIC2 0
156# endif
157#else
158# define KMP_MIC 0
159# define KMP_MIC1 0
160# define KMP_MIC2 0
161#endif
162
Jonathan Peyton92907c22015-05-29 16:13:56 +0000163// TODO: Fixme - This is clever, but really fugly
164#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64 + KMP_ARCH_AARCH64)
165# error Unknown or unsupported architecture
166#endif
167
168#endif // KMP_PLATFORM_H