codekingpro/portable-devtools
114k
1//===----------------------------------------------------------------------===//2//3// Part of libcu++, the C++ Standard Library for your entire system,4// under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES.8//9//===----------------------------------------------------------------------===//10 11#ifndef __CCCL_CONFIG12#define __CCCL_CONFIG13 14// Determine the host compiler15#if defined(__INTEL_LLVM_COMPILER)16# define _CCCL_COMPILER_ICC_LLVM17#elif defined(__INTEL_COMPILER)18# define _CCCL_COMPILER_ICC19#elif defined(__NVCOMPILER)20# define _CCCL_COMPILER_NVHPC21#elif defined(__clang__)22# define _CCCL_COMPILER_CLANG23#elif defined(__GNUC__)24# define _CCCL_COMPILER_GCC25#elif defined(_MSC_VER)26# define _CCCL_COMPILER_MSVC27#elif defined(__IBMCPP__)28# define _CCCL_COMPILER_IBM29#elif defined(__CUDACC_RTC__)30# define _CCCL_COMPILER_NVRTC31#endif32 33// Convenient shortcut to determine which version of MSVC we are dealing with34#if defined(_CCCL_COMPILER_MSVC)35# if _MSC_VER < 191736# define _CCCL_COMPILER_MSVC_201737# elif _MSC_VER < 193038# define _CCCL_COMPILER_MSVC_201939# else // _MSC_VER < 194040# define _CCCL_COMPILER_MSVC_202241# endif // _MSC_VER < 194042#endif // _CCCL_COMPILER_MSVC43 44// Determine the cuda compiler45#if defined(__NVCC__)46# define _CCCL_CUDA_COMPILER_NVCC47#elif defined(_NVHPC_CUDA)48# define _CCCL_CUDA_COMPILER_NVHPC49#elif defined(__CUDA__) && defined(_CCCL_COMPILER_CLANG)50# define _CCCL_CUDA_COMPILER_CLANG51#endif52 53// Shorthand to check whether there is a cuda compiler available54#if defined(_CCCL_CUDA_COMPILER_NVCC) || defined(_CCCL_CUDA_COMPILER_NVHPC) || defined(_CCCL_CUDA_COMPILER_CLANG) \55 || defined(_CCCL_COMPILER_NVRTC)56# define _CCCL_CUDA_COMPILER57#endif // cuda compiler available58 59// Enforce that cccl headers are treated as system headers60#if defined(_CCCL_COMPILER_GCC) || defined(_CCCL_COMPILER_NVHPC) || defined(_CCCL_COMPILER_ICC) \61 || defined(_CCCL_COMPILER_ICC_LLVM)62# define _CCCL_FORCE_SYSTEM_HEADER_GCC63#elif defined(_CCCL_COMPILER_CLANG)64# define _CCCL_FORCE_SYSTEM_HEADER_CLANG65#elif defined(_CCCL_COMPILER_MSVC)66# define _CCCL_FORCE_SYSTEM_HEADER_MSVC67#endif // other compilers68 69// Potentially enable that cccl headers are treated as system headers70#if !defined(_CCCL_NO_SYSTEM_HEADER) \71 && !(defined(_CCCL_COMPILER_MSVC) && defined(_LIBCUDACXX_DISABLE_PRAGMA_MSVC_WARNING)) \72 && !defined(_CCCL_COMPILER_NVRTC) && !defined(_LIBCUDACXX_DISABLE_PRAGMA_GCC_SYSTEM_HEADER)73# if defined(_CCCL_COMPILER_GCC) || defined(_CCCL_COMPILER_NVHPC) || defined(_CCCL_COMPILER_ICC) \74 || defined(_CCCL_COMPILER_ICC_LLVM)75# define _CCCL_IMPLICIT_SYSTEM_HEADER_GCC76# elif defined(_CCCL_COMPILER_CLANG)77# define _CCCL_IMPLICIT_SYSTEM_HEADER_CLANG78# elif defined(_CCCL_COMPILER_MSVC)79# define _CCCL_IMPLICIT_SYSTEM_HEADER_MSVC80# endif // other compilers81#endif // Use system header82 83// Potentially silence all warnings from this header84#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)85# pragma GCC system_header86#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)87# pragma clang system_header88#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)89# pragma system_header90#endif // no system header91 92// Enable us to selectively silence host compiler warnings93#define _CCCL_TOSTRING2(_STR) #_STR94#define _CCCL_TOSTRING(_STR) _CCCL_TOSTRING2(_STR)95#ifdef _CCCL_COMPILER_CLANG96# define _CCCL_DIAG_PUSH _Pragma("clang diagnostic push")97# define _CCCL_DIAG_POP _Pragma("clang diagnostic pop")98# define _CCCL_DIAG_SUPPRESS_CLANG(str) _Pragma(_CCCL_TOSTRING(clang diagnostic ignored str))99# define _CCCL_DIAG_SUPPRESS_GCC(str)100# define _CCCL_DIAG_SUPPRESS_NVHPC(str)101# define _CCCL_DIAG_SUPPRESS_MSVC(str)102#elif defined(_CCCL_COMPILER_GCC)103# define _CCCL_DIAG_PUSH _Pragma("GCC diagnostic push")104# define _CCCL_DIAG_POP _Pragma("GCC diagnostic pop")105# define _CCCL_DIAG_SUPPRESS_CLANG(str)106# define _CCCL_DIAG_SUPPRESS_GCC(str) _Pragma(_CCCL_TOSTRING(GCC diagnostic ignored str))107# define _CCCL_DIAG_SUPPRESS_NVHPC(str)108# define _CCCL_DIAG_SUPPRESS_MSVC(str)109#elif defined(_CCCL_COMPILER_NVHPC)110# define _CCCL_DIAG_PUSH _Pragma("diagnostic push")111# define _CCCL_DIAG_POP _Pragma("diagnostic pop")112# define _CCCL_DIAG_SUPPRESS_CLANG(str)113# define _CCCL_DIAG_SUPPRESS_GCC(str)114# define _CCCL_DIAG_SUPPRESS_NVHPC(str) _Pragma(_CCCL_TOSTRING(diag_suppress str))115# define _CCCL_DIAG_SUPPRESS_MSVC(str)116#elif defined(_CCCL_COMPILER_MSVC)117# define _CCCL_DIAG_PUSH __pragma(warning(push))118# define _CCCL_DIAG_POP __pragma(warning(pop))119# define _CCCL_DIAG_SUPPRESS_CLANG(str)120# define _CCCL_DIAG_SUPPRESS_GCC(str)121# define _CCCL_DIAG_SUPPRESS_NVHPC(str)122# define _CCCL_DIAG_SUPPRESS_MSVC(str) __pragma(warning(disable : str))123#else124# define _CCCL_DIAG_PUSH125# define _CCCL_DIAG_POP126# define _CCCL_DIAG_SUPPRESS_CLANG(str)127# define _CCCL_DIAG_SUPPRESS_GCC(str)128# define _CCCL_DIAG_SUPPRESS_NVHPC(str)129# define _CCCL_DIAG_SUPPRESS_MSVC(str)130#endif131 132// Convenient shortcuts to silence common warnings133#if defined(_CCCL_COMPILER_CLANG)134# define _CCCL_DIAG_SUPPRESS_DEPRECATED_PUSH \135 _CCCL_DIAG_PUSH \136 _CCCL_DIAG_SUPPRESS_CLANG("-Wdeprecated") \137 _CCCL_DIAG_SUPPRESS_CLANG("-Wdeprecated-declarations")138# define _CCCL_DIAG_SUPPRESS_DEPRECATED_POP _CCCL_DIAG_POP139#elif defined(_CCCL_COMPILER_GCC)140# define _CCCL_DIAG_SUPPRESS_DEPRECATED_PUSH \141 _CCCL_DIAG_PUSH \142 _CCCL_DIAG_SUPPRESS_GCC("-Wdeprecated") \143 _CCCL_DIAG_SUPPRESS_GCC("-Wdeprecated-declarations")144# define _CCCL_DIAG_SUPPRESS_DEPRECATED_POP _CCCL_DIAG_POP145#elif defined(_CCCL_COMPILER_MSVC)146# define _CCCL_DIAG_SUPPRESS_DEPRECATED_PUSH \147 _CCCL_DIAG_PUSH \148 _CCCL_DIAG_SUPPRESS_MSVC(4996)149# define _CCCL_DIAG_SUPPRESS_DEPRECATED_POP _CCCL_DIAG_POP150#else // !_CCCL_COMPILER_CLANG && !_CCCL_COMPILER_GCC151# define _CCCL_DIAG_SUPPRESS_DEPRECATED_PUSH152# define _CCCL_DIAG_SUPPRESS_DEPRECATED_POP153#endif // !_CCCL_COMPILER_CLANG && !_CCCL_COMPILER_GCC154 155// Enable us to selectively silence cuda compiler warnings156#if defined(__CUDACC__)157# if !defined(_CCCL_CUDA_COMPILER_CLANG)158# define _CCCL_NV_DIAG_SUPPRESS(_WARNING)159# define _CCCL_NV_DIAG_DEFAULT(_WARNING)160# elif defined(__NVCC_DIAG_PRAGMA_SUPPORT__)161# if defined(_CCCL_COMPILER_MSVC)162# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) __pragma(_CCCL_TOSTRING(nv_diag_suppress _WARNING))163# define _CCCL_NV_DIAG_DEFAULT(_WARNING) __pragma(_CCCL_TOSTRING(nv_diag_default _WARNING))164# else // ^^^ _CCCL_COMPILER_MSVC ^^^ / vvv !_CCCL_COMPILER_MSVC vvv165# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) \166 _Pragma(_CCCL_TOSTRING(nv_diagnostic push)) _Pragma(_CCCL_TOSTRING(nv_diag_suppress _WARNING))167# define _CCCL_NV_DIAG_DEFAULT(_WARNING) _Pragma(_CCCL_TOSTRING(nv_diagnostic pop))168# endif // !_CCCL_COMPILER_MSVC169# elif defined(_CCCL_COMPILER_NVHPC)170# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) \171 _Pragma(_CCCL_TOSTRING(diagnostic push)) _Pragma(_CCCL_TOSTRING(diag_suppress _WARNING))172# define _CCCL_NV_DIAG_DEFAULT(_WARNING) _Pragma(_CCCL_TOSTRING(diagnostic pop))173# else // ^^^ __NVCC_DIAG_PRAGMA_SUPPORT__ ^^^ / vvv !__NVCC_DIAG_PRAGMA_SUPPORT__ vvv174# if defined(_CCCL_COMPILER_MSVC_2017) // MSVC 2017 has issues with restoring the warning175# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) __pragma(_CCCL_TOSTRING(diag_suppress _WARNING))176# define _CCCL_NV_DIAG_DEFAULT(_WARNING)177# elif defined(_CCCL_COMPILER_MSVC)178# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) __pragma(_CCCL_TOSTRING(diag_suppress _WARNING))179# define _CCCL_NV_DIAG_DEFAULT(_WARNING) __pragma(_CCCL_TOSTRING(diag_default _WARNING))180# else // ^^^ _CCCL_COMPILER_MSVC ^^^ / vvv !_CCCL_COMPILER_MSVC vvv181# define _CCCL_NV_DIAG_SUPPRESS(_WARNING) _Pragma(_CCCL_TOSTRING(diag_suppress _WARNING))182# define _CCCL_NV_DIAG_DEFAULT(_WARNING) _Pragma(_CCCL_TOSTRING(diag_default _WARNING))183# endif // !_CCCL_COMPILER_MSVC184# endif // !__NVCC_DIAG_PRAGMA_SUPPORT__185#else // ^^^ __CUDACC__ ^^^ / vvv !__CUDACC__ vvv186# define _CCCL_NV_DIAG_SUPPRESS(_WARNING)187# define _CCCL_NV_DIAG_DEFAULT(_WARNING)188#endif // other compilers189 190#include "__cccl/ptx_isa.h"191#include "__cccl/version.h"192#include "__cccl/visibility.h"193 194#endif // __CCCL_CONFIG195 