Path: blob/main/contrib/llvm-project/openmp/runtime/src/kmp_platform.h
35258 views
/*1* kmp_platform.h -- header for determining operating system and architecture2*/34//===----------------------------------------------------------------------===//5//6// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.7// See https://llvm.org/LICENSE.txt for license information.8// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception9//10//===----------------------------------------------------------------------===//1112#ifndef KMP_PLATFORM_H13#define KMP_PLATFORM_H1415/* ---------------------- Operating system recognition ------------------- */1617#define KMP_OS_LINUX 018#define KMP_OS_DRAGONFLY 019#define KMP_OS_FREEBSD 020#define KMP_OS_NETBSD 021#define KMP_OS_OPENBSD 022#define KMP_OS_DARWIN 023#define KMP_OS_WINDOWS 024#define KMP_OS_HURD 025#define KMP_OS_SOLARIS 026#define KMP_OS_WASI 027#define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */2829#ifdef _WIN3230#undef KMP_OS_WINDOWS31#define KMP_OS_WINDOWS 132#endif3334#if (defined __APPLE__ && defined __MACH__)35#undef KMP_OS_DARWIN36#define KMP_OS_DARWIN 137#endif3839// in some ppc64 linux installations, only the second condition is met40#if (defined __linux)41#undef KMP_OS_LINUX42#define KMP_OS_LINUX 143#elif (defined __linux__)44#undef KMP_OS_LINUX45#define KMP_OS_LINUX 146#else47#endif4849#if (defined __DragonFly__)50#undef KMP_OS_DRAGONFLY51#define KMP_OS_DRAGONFLY 152#endif5354#if (defined __FreeBSD__)55#undef KMP_OS_FREEBSD56#define KMP_OS_FREEBSD 157#endif5859#if (defined __NetBSD__)60#undef KMP_OS_NETBSD61#define KMP_OS_NETBSD 162#endif6364#if (defined __OpenBSD__)65#undef KMP_OS_OPENBSD66#define KMP_OS_OPENBSD 167#endif6869#if (defined __GNU__)70#undef KMP_OS_HURD71#define KMP_OS_HURD 172#endif7374#if (defined __sun__ && defined __svr4__)75#undef KMP_OS_SOLARIS76#define KMP_OS_SOLARIS 177#endif7879#if (defined __wasi__) || (defined __EMSCRIPTEN__)80#undef KMP_OS_WASI81#define KMP_OS_WASI 182#endif8384#if (defined _AIX)85#undef KMP_OS_AIX86#define KMP_OS_AIX 187#endif8889#if (1 != KMP_OS_LINUX + KMP_OS_DRAGONFLY + KMP_OS_FREEBSD + KMP_OS_NETBSD + \90KMP_OS_OPENBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS + KMP_OS_HURD + \91KMP_OS_SOLARIS + KMP_OS_WASI + KMP_OS_AIX)92#error Unknown OS93#endif9495#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \96KMP_OS_OPENBSD || KMP_OS_DARWIN || KMP_OS_HURD || KMP_OS_SOLARIS || \97KMP_OS_WASI || KMP_OS_AIX98#undef KMP_OS_UNIX99#define KMP_OS_UNIX 1100#endif101102/* ---------------------- Architecture recognition ------------------- */103104#define KMP_ARCH_X86 0105#define KMP_ARCH_X86_64 0106#define KMP_ARCH_AARCH64 0107#define KMP_ARCH_AARCH64_32 0108#define KMP_ARCH_PPC64_ELFv1 0109#define KMP_ARCH_PPC64_ELFv2 0110#define KMP_ARCH_PPC64_XCOFF 0111#define KMP_ARCH_PPC_XCOFF 0112#define KMP_ARCH_MIPS 0113#define KMP_ARCH_MIPS64 0114#define KMP_ARCH_RISCV64 0115#define KMP_ARCH_LOONGARCH64 0116#define KMP_ARCH_VE 0117#define KMP_ARCH_S390X 0118119#if KMP_OS_WINDOWS120#if defined(_M_AMD64) || defined(__x86_64)121#undef KMP_ARCH_X86_64122#define KMP_ARCH_X86_64 1123#elif defined(__aarch64__) || defined(_M_ARM64)124#undef KMP_ARCH_AARCH64125#define KMP_ARCH_AARCH64 1126#elif defined(__arm__) || defined(_M_ARM)127#undef KMP_ARCH_ARMV7128#define KMP_ARCH_ARMV7 1129#else130#undef KMP_ARCH_X86131#define KMP_ARCH_X86 1132#endif133#endif134135#if KMP_OS_UNIX136#if defined __x86_64137#undef KMP_ARCH_X86_64138#define KMP_ARCH_X86_64 1139#elif defined __i386140#undef KMP_ARCH_X86141#define KMP_ARCH_X86 1142#elif defined __powerpc64__143#if defined(_CALL_ELF)144#if _CALL_ELF == 2145#undef KMP_ARCH_PPC64_ELFv2146#define KMP_ARCH_PPC64_ELFv2 1147#else148#undef KMP_ARCH_PPC64_ELFv1149#define KMP_ARCH_PPC64_ELFv1 1150#endif151#elif defined KMP_OS_AIX152#undef KMP_ARCH_PPC64_XCOFF153#define KMP_ARCH_PPC64_XCOFF 1154#endif155#elif defined(__powerpc__) && defined(KMP_OS_AIX)156#undef KMP_ARCH_PPC_XCOFF157#define KMP_ARCH_PPC_XCOFF 1158#undef KMP_ARCH_PPC159#define KMP_ARCH_PPC 1160#elif defined __ARM64_ARCH_8_32__161#undef KMP_ARCH_AARCH64_32162#define KMP_ARCH_AARCH64_32 1163#elif defined __aarch64__164#undef KMP_ARCH_AARCH64165#define KMP_ARCH_AARCH64 1166#elif defined __mips__167#if defined __mips64168#undef KMP_ARCH_MIPS64169#define KMP_ARCH_MIPS64 1170#else171#undef KMP_ARCH_MIPS172#define KMP_ARCH_MIPS 1173#endif174#elif defined __riscv && __riscv_xlen == 64175#undef KMP_ARCH_RISCV64176#define KMP_ARCH_RISCV64 1177#elif defined __loongarch__ && __loongarch_grlen == 64178#undef KMP_ARCH_LOONGARCH64179#define KMP_ARCH_LOONGARCH64 1180#elif defined __ve__181#undef KMP_ARCH_VE182#define KMP_ARCH_VE 1183#elif defined __s390x__184#undef KMP_ARCH_S390X185#define KMP_ARCH_S390X 1186#endif187#endif188189#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) || \190defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7VE__)191#define KMP_ARCH_ARMV7 1192#endif193194#if defined(KMP_ARCH_ARMV7) || defined(__ARM_ARCH_6__) || \195defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \196defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6T2__) || \197defined(__ARM_ARCH_6ZK__)198#define KMP_ARCH_ARMV6 1199#endif200201#if defined(KMP_ARCH_ARMV6) || defined(__ARM_ARCH_5T__) || \202defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || \203defined(__ARM_ARCH_5TEJ__)204#define KMP_ARCH_ARMV5 1205#endif206207#if defined(KMP_ARCH_ARMV5) || defined(__ARM_ARCH_4__) || \208defined(__ARM_ARCH_4T__)209#define KMP_ARCH_ARMV4 1210#endif211212#if defined(KMP_ARCH_ARMV4) || defined(__ARM_ARCH_3__) || \213defined(__ARM_ARCH_3M__)214#define KMP_ARCH_ARMV3 1215#endif216217#if defined(KMP_ARCH_ARMV3) || defined(__ARM_ARCH_2__)218#define KMP_ARCH_ARMV2 1219#endif220221#if defined(KMP_ARCH_ARMV2)222#define KMP_ARCH_ARM 1223#endif224225#if defined(__wasm32__)226#define KMP_ARCH_WASM 1227#endif228229#define KMP_ARCH_PPC64 \230(KMP_ARCH_PPC64_ELFv2 || KMP_ARCH_PPC64_ELFv1 || KMP_ARCH_PPC64_XCOFF)231232#if defined(__MIC__) || defined(__MIC2__)233#define KMP_MIC 1234#if __MIC2__ || __KNC__235#define KMP_MIC1 0236#define KMP_MIC2 1237#else238#define KMP_MIC1 1239#define KMP_MIC2 0240#endif241#else242#define KMP_MIC 0243#define KMP_MIC1 0244#define KMP_MIC2 0245#endif246247/* Specify 32 bit architectures here */248#define KMP_32_BIT_ARCH \249(KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_WASM || \250KMP_ARCH_PPC || KMP_ARCH_AARCH64_32)251252// Platforms which support Intel(R) Many Integrated Core Architecture253#define KMP_MIC_SUPPORTED \254((KMP_ARCH_X86 || KMP_ARCH_X86_64) && (KMP_OS_LINUX || KMP_OS_WINDOWS))255256// TODO: Fixme - This is clever, but really fugly257#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64 + \258KMP_ARCH_AARCH64 + KMP_ARCH_MIPS + KMP_ARCH_MIPS64 + \259KMP_ARCH_RISCV64 + KMP_ARCH_LOONGARCH64 + KMP_ARCH_VE + \260KMP_ARCH_S390X + KMP_ARCH_WASM + KMP_ARCH_PPC + \261KMP_ARCH_AARCH64_32)262#error Unknown or unsupported architecture263#endif264265#endif // KMP_PLATFORM_H266267268