brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 609b7c4 Raw
299 lines · c
1/*2 * kmp_platform.h -- header for determining operating system and architecture3 */4 5//===----------------------------------------------------------------------===//6//7// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.8// See https://llvm.org/LICENSE.txt for license information.9// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception10//11//===----------------------------------------------------------------------===//12 13#ifndef KMP_PLATFORM_H14#define KMP_PLATFORM_H15 16/* ---------------------- Operating system recognition ------------------- */17 18#define KMP_OS_LINUX 019#define KMP_OS_DRAGONFLY 020#define KMP_OS_FREEBSD 021#define KMP_OS_NETBSD 022#define KMP_OS_OPENBSD 023#define KMP_OS_DARWIN 024#define KMP_OS_WINDOWS 025#define KMP_OS_HAIKU 026#define KMP_OS_HURD 027#define KMP_OS_SOLARIS 028#define KMP_OS_WASI 029#define KMP_OS_EMSCRIPTEN 030#define KMP_OS_AIX 031#define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */32 33#ifdef _WIN3234#undef KMP_OS_WINDOWS35#define KMP_OS_WINDOWS 136#endif37 38#if (defined __APPLE__ && defined __MACH__)39#undef KMP_OS_DARWIN40#define KMP_OS_DARWIN 141#endif42 43// in some ppc64 linux installations, only the second condition is met44#if (defined __linux)45#undef KMP_OS_LINUX46#define KMP_OS_LINUX 147#elif (defined __linux__)48#undef KMP_OS_LINUX49#define KMP_OS_LINUX 150#elif defined(__EMSCRIPTEN__)51#undef KMP_OS_LINUX52#undef KMP_OS_EMSCRIPTEN53#define KMP_OS_LINUX 154#define KMP_OS_EMSCRIPTEN 155#else56#endif57 58#if (defined __DragonFly__)59#undef KMP_OS_DRAGONFLY60#define KMP_OS_DRAGONFLY 161#endif62 63#if (defined __FreeBSD__)64#undef KMP_OS_FREEBSD65#define KMP_OS_FREEBSD 166#endif67 68#if (defined __NetBSD__)69#undef KMP_OS_NETBSD70#define KMP_OS_NETBSD 171#endif72 73#if (defined __OpenBSD__)74#undef KMP_OS_OPENBSD75#define KMP_OS_OPENBSD 176#endif77 78#if (defined __HAIKU__)79#undef KMP_OS_HAIKU80#define KMP_OS_HAIKU 181#endif82 83#if (defined __GNU__)84#undef KMP_OS_HURD85#define KMP_OS_HURD 186#endif87 88#if (defined __sun__ && defined __svr4__)89#undef KMP_OS_SOLARIS90#define KMP_OS_SOLARIS 191#endif92 93#if (defined __wasi__)94#undef KMP_OS_WASI95#define KMP_OS_WASI 196#endif97 98#if (defined _AIX)99#undef KMP_OS_AIX100#define KMP_OS_AIX 1101#endif102 103#if (1 != KMP_OS_LINUX + KMP_OS_DRAGONFLY + KMP_OS_FREEBSD + KMP_OS_NETBSD +   \104              KMP_OS_OPENBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS + KMP_OS_HAIKU + \105              KMP_OS_HURD + KMP_OS_SOLARIS + KMP_OS_WASI + KMP_OS_AIX)106#error Unknown OS107#endif108 109#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD ||     \110    KMP_OS_OPENBSD || KMP_OS_DARWIN || KMP_OS_HAIKU || KMP_OS_HURD ||          \111    KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX112#undef KMP_OS_UNIX113#define KMP_OS_UNIX 1114#endif115 116/* ---------------------- Architecture recognition ------------------- */117 118#define KMP_ARCH_X86 0119#define KMP_ARCH_X86_64 0120#define KMP_ARCH_AARCH64 0121#define KMP_ARCH_AARCH64_32 0122#define KMP_ARCH_PPC64_ELFv1 0123#define KMP_ARCH_PPC64_ELFv2 0124#define KMP_ARCH_PPC64_XCOFF 0125#define KMP_ARCH_PPC_XCOFF 0126#define KMP_ARCH_PPC 0127#define KMP_ARCH_MIPS 0128#define KMP_ARCH_MIPS64 0129#define KMP_ARCH_RISCV64 0130#define KMP_ARCH_LOONGARCH64 0131#define KMP_ARCH_VE 0132#define KMP_ARCH_S390X 0133#define KMP_ARCH_SPARC 0134 135#if KMP_OS_WINDOWS136#if defined(_M_AMD64) || defined(__x86_64)137#undef KMP_ARCH_X86_64138#define KMP_ARCH_X86_64 1139#elif defined(__aarch64__) || defined(_M_ARM64)140#undef KMP_ARCH_AARCH64141#define KMP_ARCH_AARCH64 1142#elif defined(__arm__) || defined(_M_ARM)143#undef KMP_ARCH_ARMV7144#define KMP_ARCH_ARMV7 1145#else146#undef KMP_ARCH_X86147#define KMP_ARCH_X86 1148#endif149#endif150 151#if KMP_OS_UNIX152#if defined __x86_64153#undef KMP_ARCH_X86_64154#define KMP_ARCH_X86_64 1155#elif defined __i386156#undef KMP_ARCH_X86157#define KMP_ARCH_X86 1158#elif defined __powerpc64__159#if defined(_CALL_ELF)160#if _CALL_ELF == 2161#undef KMP_ARCH_PPC64_ELFv2162#define KMP_ARCH_PPC64_ELFv2 1163#else164#undef KMP_ARCH_PPC64_ELFv1165#define KMP_ARCH_PPC64_ELFv1 1166#endif167#elif KMP_OS_AIX168#undef KMP_ARCH_PPC64_XCOFF169#define KMP_ARCH_PPC64_XCOFF 1170#endif171#elif defined(__powerpc__) && KMP_OS_AIX172#undef KMP_ARCH_PPC_XCOFF173#define KMP_ARCH_PPC_XCOFF 1174#undef KMP_ARCH_PPC175#define KMP_ARCH_PPC 1176#elif defined(__powerpc__) && !defined(__LP64__)177#undef KMP_ARCH_PPC178#define KMP_ARCH_PPC 1179#elif defined __ARM64_ARCH_8_32__180#undef KMP_ARCH_AARCH64_32181#define KMP_ARCH_AARCH64_32 1182#elif defined __aarch64__183#undef KMP_ARCH_AARCH64184#define KMP_ARCH_AARCH64 1185#elif defined __mips__186#if defined __mips64187#undef KMP_ARCH_MIPS64188#define KMP_ARCH_MIPS64 1189#else190#undef KMP_ARCH_MIPS191#define KMP_ARCH_MIPS 1192#endif193#elif defined __riscv && __riscv_xlen == 64194#undef KMP_ARCH_RISCV64195#define KMP_ARCH_RISCV64 1196#elif defined __loongarch__ && __loongarch_grlen == 64197#undef KMP_ARCH_LOONGARCH64198#define KMP_ARCH_LOONGARCH64 1199#elif defined __ve__200#undef KMP_ARCH_VE201#define KMP_ARCH_VE 1202#elif defined __s390x__203#undef KMP_ARCH_S390X204#define KMP_ARCH_S390X 1205#elif defined __sparc || defined __sparc__206#undef KMP_ARCH_SPARC207#define KMP_ARCH_SPARC 1208#endif209#endif210 211#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) ||                     \212    defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7VE__)213#define KMP_ARCH_ARMV7 1214#endif215 216#if defined(KMP_ARCH_ARMV7) || defined(__ARM_ARCH_6__) ||                      \217    defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) ||                    \218    defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6T2__) ||                   \219    defined(__ARM_ARCH_6ZK__)220#define KMP_ARCH_ARMV6 1221#endif222 223#if defined(KMP_ARCH_ARMV6) || defined(__ARM_ARCH_5T__) ||                     \224    defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) ||                   \225    defined(__ARM_ARCH_5TEJ__)226#define KMP_ARCH_ARMV5 1227#endif228 229#if defined(KMP_ARCH_ARMV5) || defined(__ARM_ARCH_4__) ||                      \230    defined(__ARM_ARCH_4T__)231#define KMP_ARCH_ARMV4 1232#endif233 234#if defined(KMP_ARCH_ARMV4) || defined(__ARM_ARCH_3__) ||                      \235    defined(__ARM_ARCH_3M__)236#define KMP_ARCH_ARMV3 1237#endif238 239#if defined(KMP_ARCH_ARMV3) || defined(__ARM_ARCH_2__)240#define KMP_ARCH_ARMV2 1241#endif242 243#if defined(KMP_ARCH_ARMV2)244#define KMP_ARCH_ARM 1245#endif246 247#if defined(__wasm32__)248#define KMP_ARCH_WASM 1249#endif250 251#define KMP_ARCH_PPC64                                                         \252  (KMP_ARCH_PPC64_ELFv2 || KMP_ARCH_PPC64_ELFv1 || KMP_ARCH_PPC64_XCOFF)253 254#if defined(KMP_ARCH_SPARC)255#undef KMP_ARCH_SPARC32256#undef KMP_ARCH_SPARC64257#if defined(__sparcv9) || defined(__sparc64__)258#define KMP_ARCH_SPARC64 1259#endif260#if defined(__sparc) && !defined(__sparcv9) && !defined(__sparc64__)261#define KMP_ARCH_SPARC32 1262#endif263#endif264 265#if defined(__MIC__) || defined(__MIC2__)266#define KMP_MIC 1267#if __MIC2__ || __KNC__268#define KMP_MIC1 0269#define KMP_MIC2 1270#else271#define KMP_MIC1 1272#define KMP_MIC2 0273#endif274#else275#define KMP_MIC 0276#define KMP_MIC1 0277#define KMP_MIC2 0278#endif279 280/* Specify 32 bit architectures here */281#define KMP_32_BIT_ARCH                                                        \282  (KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_WASM ||           \283   KMP_ARCH_PPC || KMP_ARCH_AARCH64_32 || KMP_ARCH_SPARC32)284 285// Platforms which support Intel(R) Many Integrated Core Architecture286#define KMP_MIC_SUPPORTED                                                      \287  ((KMP_ARCH_X86 || KMP_ARCH_X86_64) && (KMP_OS_LINUX || KMP_OS_WINDOWS))288 289// TODO: Fixme - This is clever, but really fugly290#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64 +     \291              KMP_ARCH_AARCH64 + KMP_ARCH_MIPS + KMP_ARCH_MIPS64 +             \292              KMP_ARCH_RISCV64 + KMP_ARCH_LOONGARCH64 + KMP_ARCH_VE +          \293              KMP_ARCH_S390X + KMP_ARCH_WASM + KMP_ARCH_PPC +                  \294              KMP_ARCH_AARCH64_32 + KMP_ARCH_SPARC)295#error Unknown or unsupported architecture296#endif297 298#endif // KMP_PLATFORM_H299