10b57cec5SDimitry Andric/* 20b57cec5SDimitry Andric * kmp_config.h -- Feature macros 30b57cec5SDimitry Andric */ 40b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 50b57cec5SDimitry Andric// 60b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 70b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 80b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 90b57cec5SDimitry Andric// 100b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 110b57cec5SDimitry Andric#ifndef KMP_CONFIG_H 120b57cec5SDimitry Andric#define KMP_CONFIG_H 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric#include "kmp_platform.h" 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric// cmakedefine01 MACRO will define MACRO as either 0 or 1 170b57cec5SDimitry Andric// cmakedefine MACRO 1 will define MACRO as 1 or leave undefined 180b57cec5SDimitry Andric#cmakedefine01 DEBUG_BUILD 190b57cec5SDimitry Andric#cmakedefine01 RELWITHDEBINFO_BUILD 200b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_ITT_NOTIFY 210b57cec5SDimitry Andric#define USE_ITT_NOTIFY LIBOMP_USE_ITT_NOTIFY 220b57cec5SDimitry Andric#if ! LIBOMP_USE_ITT_NOTIFY 230b57cec5SDimitry Andric# define INTEL_NO_ITTNOTIFY_API 240b57cec5SDimitry Andric#endif 250b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_VERSION_SYMBOLS 260b57cec5SDimitry Andric#if LIBOMP_USE_VERSION_SYMBOLS 270b57cec5SDimitry Andric# define KMP_USE_VERSION_SYMBOLS 280b57cec5SDimitry Andric#endif 290b57cec5SDimitry Andric#cmakedefine01 LIBOMP_HAVE_WEAK_ATTRIBUTE 300b57cec5SDimitry Andric#define KMP_HAVE_WEAK_ATTRIBUTE LIBOMP_HAVE_WEAK_ATTRIBUTE 310b57cec5SDimitry Andric#cmakedefine01 LIBOMP_HAVE_PSAPI 320b57cec5SDimitry Andric#define KMP_HAVE_PSAPI LIBOMP_HAVE_PSAPI 330b57cec5SDimitry Andric#cmakedefine01 LIBOMP_STATS 340b57cec5SDimitry Andric#define KMP_STATS_ENABLED LIBOMP_STATS 350b57cec5SDimitry Andric#cmakedefine01 LIBOMP_HAVE_X86INTRIN_H 360b57cec5SDimitry Andric#define KMP_HAVE_X86INTRIN_H LIBOMP_HAVE_X86INTRIN_H 370b57cec5SDimitry Andric#cmakedefine01 LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER 380b57cec5SDimitry Andric#define KMP_HAVE___BUILTIN_READCYCLECOUNTER LIBOMP_HAVE___BUILTIN_READCYCLECOUNTER 390b57cec5SDimitry Andric#cmakedefine01 LIBOMP_HAVE___RDTSC 400b57cec5SDimitry Andric#define KMP_HAVE___RDTSC LIBOMP_HAVE___RDTSC 410b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_DEBUGGER 420b57cec5SDimitry Andric#define USE_DEBUGGER LIBOMP_USE_DEBUGGER 430b57cec5SDimitry Andric#cmakedefine01 LIBOMP_OMPT_DEBUG 440b57cec5SDimitry Andric#define OMPT_DEBUG LIBOMP_OMPT_DEBUG 450b57cec5SDimitry Andric#cmakedefine01 LIBOMP_OMPT_SUPPORT 460b57cec5SDimitry Andric#define OMPT_SUPPORT LIBOMP_OMPT_SUPPORT 47fe6060f1SDimitry Andric#cmakedefine01 LIBOMP_OMPD_SUPPORT 48fe6060f1SDimitry Andric#define OMPD_SUPPORT LIBOMP_OMPD_SUPPORT 4906c3fb27SDimitry Andric#cmakedefine01 LIBOMP_OMPX_TASKGRAPH 5006c3fb27SDimitry Andric#define OMPX_TASKGRAPH LIBOMP_OMPX_TASKGRAPH 51d409305fSDimitry Andric#cmakedefine01 LIBOMP_PROFILING_SUPPORT 52d409305fSDimitry Andric#define OMP_PROFILING_SUPPORT LIBOMP_PROFILING_SUPPORT 530b57cec5SDimitry Andric#cmakedefine01 LIBOMP_OMPT_OPTIONAL 540b57cec5SDimitry Andric#define OMPT_OPTIONAL LIBOMP_OMPT_OPTIONAL 550b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_ADAPTIVE_LOCKS 560b57cec5SDimitry Andric#define KMP_USE_ADAPTIVE_LOCKS LIBOMP_USE_ADAPTIVE_LOCKS 570b57cec5SDimitry Andric#define KMP_DEBUG_ADAPTIVE_LOCKS 0 580b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_INTERNODE_ALIGNMENT 590b57cec5SDimitry Andric#define KMP_USE_INTERNODE_ALIGNMENT LIBOMP_USE_INTERNODE_ALIGNMENT 600b57cec5SDimitry Andric#cmakedefine01 LIBOMP_ENABLE_ASSERTIONS 610b57cec5SDimitry Andric#define KMP_USE_ASSERT LIBOMP_ENABLE_ASSERTIONS 620b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_HIER_SCHED 630b57cec5SDimitry Andric#define KMP_USE_HIER_SCHED LIBOMP_USE_HIER_SCHED 640b57cec5SDimitry Andric#cmakedefine01 STUBS_LIBRARY 650b57cec5SDimitry Andric#cmakedefine01 LIBOMP_USE_HWLOC 660b57cec5SDimitry Andric#define KMP_USE_HWLOC LIBOMP_USE_HWLOC 670b57cec5SDimitry Andric#cmakedefine01 LIBOMP_ENABLE_SHARED 680b57cec5SDimitry Andric#define KMP_DYNAMIC_LIB LIBOMP_ENABLE_SHARED 690b57cec5SDimitry Andric#define KMP_ARCH_STR "@LIBOMP_LEGAL_ARCH@" 700b57cec5SDimitry Andric#define KMP_LIBRARY_FILE "@LIBOMP_LIB_FILE@" 710b57cec5SDimitry Andric#define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@ 720b57cec5SDimitry Andric#define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@ 730b57cec5SDimitry Andric#cmakedefine01 MSVC 740b57cec5SDimitry Andric#define KMP_MSVC_COMPAT MSVC 75e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_WAITPKG_INTRINSICS 76e8d8bef9SDimitry Andric#define KMP_HAVE_WAITPKG_INTRINSICS LIBOMP_HAVE_WAITPKG_INTRINSICS 77e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_RTM_INTRINSICS 78e8d8bef9SDimitry Andric#define KMP_HAVE_RTM_INTRINSICS LIBOMP_HAVE_RTM_INTRINSICS 79e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_IMMINTRIN_H 80e8d8bef9SDimitry Andric#define KMP_HAVE_IMMINTRIN_H LIBOMP_HAVE_IMMINTRIN_H 81e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_INTRIN_H 82e8d8bef9SDimitry Andric#define KMP_HAVE_INTRIN_H LIBOMP_HAVE_INTRIN_H 83e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_ATTRIBUTE_WAITPKG 84e8d8bef9SDimitry Andric#define KMP_HAVE_ATTRIBUTE_WAITPKG LIBOMP_HAVE_ATTRIBUTE_WAITPKG 85e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_HAVE_ATTRIBUTE_RTM 86e8d8bef9SDimitry Andric#define KMP_HAVE_ATTRIBUTE_RTM LIBOMP_HAVE_ATTRIBUTE_RTM 87e8d8bef9SDimitry Andric#cmakedefine01 LIBOMP_ARCH_AARCH64_A64FX 88e8d8bef9SDimitry Andric#define KMP_ARCH_AARCH64_A64FX LIBOMP_ARCH_AARCH64_A64FX 89349cc55cSDimitry Andric#cmakedefine01 LIBOMP_HAVE_XMMINTRIN_H 90349cc55cSDimitry Andric#define KMP_HAVE_XMMINTRIN_H LIBOMP_HAVE_XMMINTRIN_H 91349cc55cSDimitry Andric#cmakedefine01 LIBOMP_HAVE__MM_MALLOC 92349cc55cSDimitry Andric#define KMP_HAVE__MM_MALLOC LIBOMP_HAVE__MM_MALLOC 93349cc55cSDimitry Andric#cmakedefine01 LIBOMP_HAVE_ALIGNED_ALLOC 94349cc55cSDimitry Andric#define KMP_HAVE_ALIGNED_ALLOC LIBOMP_HAVE_ALIGNED_ALLOC 95349cc55cSDimitry Andric#cmakedefine01 LIBOMP_HAVE_POSIX_MEMALIGN 96349cc55cSDimitry Andric#define KMP_HAVE_POSIX_MEMALIGN LIBOMP_HAVE_POSIX_MEMALIGN 97349cc55cSDimitry Andric#cmakedefine01 LIBOMP_HAVE__ALIGNED_MALLOC 98349cc55cSDimitry Andric#define KMP_HAVE__ALIGNED_MALLOC LIBOMP_HAVE__ALIGNED_MALLOC 99bdd1243dSDimitry Andric#cmakedefine01 OPENMP_ENABLE_LIBOMPTARGET 100bdd1243dSDimitry Andric#define ENABLE_LIBOMPTARGET OPENMP_ENABLE_LIBOMPTARGET 1010b57cec5SDimitry Andric 1020b57cec5SDimitry Andric// Configured cache line based on architecture 1031db9f3b2SDimitry Andric#if KMP_ARCH_PPC64 || KMP_ARCH_PPC 1040b57cec5SDimitry Andric# define CACHE_LINE 128 105e8d8bef9SDimitry Andric#elif KMP_ARCH_AARCH64_A64FX 106e8d8bef9SDimitry Andric# define CACHE_LINE 256 1075f757f3fSDimitry Andric#elif KMP_ARCH_S390X 1085f757f3fSDimitry Andric# define CACHE_LINE 256 1090b57cec5SDimitry Andric#else 1100b57cec5SDimitry Andric# define CACHE_LINE 64 1110b57cec5SDimitry Andric#endif 1120b57cec5SDimitry Andric 1130b57cec5SDimitry Andric#if ! KMP_32_BIT_ARCH 1140b57cec5SDimitry Andric# define BUILD_I8 1 1150b57cec5SDimitry Andric#endif 1160b57cec5SDimitry Andric 1170b57cec5SDimitry Andric#define KMP_NESTED_HOT_TEAMS 1 1180b57cec5SDimitry Andric#define KMP_ADJUST_BLOCKTIME 1 1190b57cec5SDimitry Andric#define BUILD_PARALLEL_ORDERED 1 1200b57cec5SDimitry Andric#define KMP_ASM_INTRINS 1 1210b57cec5SDimitry Andric#define USE_ITT_BUILD LIBOMP_USE_ITT_NOTIFY 1220b57cec5SDimitry Andric#define INTEL_ITTNOTIFY_PREFIX __kmp_itt_ 1230b57cec5SDimitry Andric#if ! KMP_MIC 1240b57cec5SDimitry Andric# define USE_LOAD_BALANCE 1 1250b57cec5SDimitry Andric#endif 1260b57cec5SDimitry Andric#if ! (KMP_OS_WINDOWS || KMP_OS_DARWIN) 1270b57cec5SDimitry Andric# define KMP_TDATA_GTID 1 1280b57cec5SDimitry Andric#endif 1290b57cec5SDimitry Andric#if STUBS_LIBRARY 1300b57cec5SDimitry Andric# define KMP_STUB 1 1310b57cec5SDimitry Andric#endif 1320b57cec5SDimitry Andric#if DEBUG_BUILD || RELWITHDEBINFO_BUILD 1330b57cec5SDimitry Andric# define KMP_DEBUG 1 1340b57cec5SDimitry Andric#endif 1350b57cec5SDimitry Andric 1360b57cec5SDimitry Andric#if KMP_OS_WINDOWS 1370b57cec5SDimitry Andric# define KMP_WIN_CDECL 1380b57cec5SDimitry Andric#else 1390b57cec5SDimitry Andric# define BUILD_TV 1400b57cec5SDimitry Andric# define KMP_GOMP_COMPAT 1410b57cec5SDimitry Andric#endif 1420b57cec5SDimitry Andric 143349cc55cSDimitry Andric// use shared memory with dynamic library (except Android, where shm_* 144349cc55cSDimitry Andric// functions don't exist). 145349cc55cSDimitry Andric#if KMP_OS_UNIX && KMP_DYNAMIC_LIB && !__ANDROID__ 146349cc55cSDimitry Andric#define KMP_USE_SHM 147349cc55cSDimitry Andric#endif 1480b57cec5SDimitry Andric#endif // KMP_CONFIG_H 149