diff --git a/cub/cub/config.cuh b/cub/cub/config.cuh index 88aa182d02f..f399327d432 100644 --- a/cub/cub/config.cuh +++ b/cub/cub/config.cuh @@ -33,7 +33,7 @@ #pragma once // For `_CCCL_IMPLICIT_SYSTEM_HEADER` -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER diff --git a/cub/cub/detail/detect_cuda_runtime.cuh b/cub/cub/detail/detect_cuda_runtime.cuh index a7b025e4cdc..3d2c2b3a262 100644 --- a/cub/cub/detail/detect_cuda_runtime.cuh +++ b/cub/cub/detail/detect_cuda_runtime.cuh @@ -34,7 +34,7 @@ #pragma once // We cannot use `cub/config.cuh` here due to circular dependencies -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER diff --git a/cub/cub/util_compiler.cuh b/cub/cub/util_compiler.cuh index 4acf6ba83b5..3541d2e9f8e 100644 --- a/cub/cub/util_compiler.cuh +++ b/cub/cub/util_compiler.cuh @@ -33,7 +33,7 @@ #pragma once // For `_CCCL_IMPLICIT_SYSTEM_HEADER` -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER diff --git a/cub/cub/util_cpp_dialect.cuh b/cub/cub/util_cpp_dialect.cuh index 1b1afb53cf8..ba8ec118780 100644 --- a/cub/cub/util_cpp_dialect.cuh +++ b/cub/cub/util_cpp_dialect.cuh @@ -31,7 +31,7 @@ #pragma once -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER diff --git a/cub/cub/version.cuh b/cub/cub/version.cuh index 2ad82bb4468..0d66b886b0c 100644 --- a/cub/cub/version.cuh +++ b/cub/cub/version.cuh @@ -36,7 +36,7 @@ #pragma once // For `_CCCL_IMPLICIT_SYSTEM_HEADER` -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER diff --git a/libcudacxx/include/cuda/__cccl_config b/libcudacxx/include/cuda/__cccl_config new file mode 100644 index 00000000000..50c16356e10 --- /dev/null +++ b/libcudacxx/include/cuda/__cccl_config @@ -0,0 +1,16 @@ +//===----------------------------------------------------------------------===// +// +// Part of libcu++, the C++ Standard Library for your entire system, +// under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. +// +//===----------------------------------------------------------------------===// + +#ifndef _CUDA__CCCL_CONFIG +#define _CUDA__CCCL_CONFIG + +#include "std/detail/libcxx/include/__cccl_config" + +#endif // _CUDA__CCCL_CONFIG diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/CMakeLists.txt b/libcudacxx/include/cuda/std/detail/libcxx/include/CMakeLists.txt index 87e278964ab..68a99775a14 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/CMakeLists.txt +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/CMakeLists.txt @@ -6,6 +6,7 @@ set(files __bsd_locale_defaults.h __bsd_locale_fallbacks.h __errc + __cccl_config __concepts/__concept_macros.h __concepts/_One_of.h __concepts/arithmetic.h diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__cccl_config b/libcudacxx/include/cuda/std/detail/libcxx/include/__cccl_config new file mode 100644 index 00000000000..0a42d92e6f9 --- /dev/null +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__cccl_config @@ -0,0 +1,55 @@ +//===----------------------------------------------------------------------===// +// +// Part of libcu++, the C++ Standard Library for your entire system, +// under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. +// +//===----------------------------------------------------------------------===// + +#ifndef __CCCL_CONFIG +#define __CCCL_CONFIG + +// Determine the host compiler +#if defined(__NVCOMPILER) +# define _CCCL_COMPILER_NVHPC +#elif defined(__clang__) +# define _CCCL_COMPILER_CLANG +#elif defined(__GNUC__) +# define _CCCL_COMPILER_GCC +#elif defined(_MSC_VER) +# define _CCCL_COMPILER_MSVC +#elif defined(__IBMCPP__) +# define _CCCL_COMPILER_IBM +#elif defined(__CUDACC_RTC__) +# define _CCCL_COMPILER_NVRTC +#endif + +// Ensure cccl headers are treated as system headers when possible +#if defined(_CCCL_NO_SYSTEM_HEADER) +# define _CCCL_IMPLICIT_SYSTEM_HEADER +#elif defined(_CCCL_COMPILER_MSVC) \ + && defined(_LIBCUDACXX_DISABLE_PRAGMA_MSVC_WARNING) +# define _CCCL_IMPLICIT_SYSTEM_HEADER +#elif defined(_CCCL_COMPILER_NVRTC) +# define _CCCL_IMPLICIT_SYSTEM_HEADER +#elif defined(_LIBCUDACXX_DISABLE_PRAGMA_GCC_SYSTEM_HEADER) +# define _CCCL_IMPLICIT_SYSTEM_HEADER +#else +# if defined(_CCCL_COMPILER_GCC) +# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("GCC system_header") +# elif defined(_CCCL_COMPILER_CLANG) +# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("clang system_header") +# elif defined(_CCCL_COMPILER_MSVC) +# define _CCCL_IMPLICIT_SYSTEM_HEADER __pragma(system_header) +# elif defined(_CCCL_COMPILER_NVHPC) +# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("GCC system_header") +# else +# define _CCCL_IMPLICIT_SYSTEM_HEADER +# endif +#endif + +_CCCL_IMPLICIT_SYSTEM_HEADER + +#endif // __CCCL_CONFIG diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__config b/libcudacxx/include/cuda/std/detail/libcxx/include/__config index 3f0f59e4d62..acf47f93261 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__config +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__config @@ -10,6 +10,10 @@ #ifndef _LIBCUDACXX_CONFIG #define _LIBCUDACXX_CONFIG +#include "__cccl_config" + +_CCCL_IMPLICIT_SYSTEM_HEADER + #if defined(__NVCOMPILER) # define _LIBCUDACXX_COMPILER_NVHPC #elif defined(__clang__) @@ -83,32 +87,6 @@ # endif // !_LIBCUDACXX_DISABLE_PRAGMA_MSVC_WARNING #endif // _LIBCUDACXX_COMPILER_MSVC -// allow disabling use as system header for testing -#if defined(_CCCL_NO_SYSTEM_HEADER) -# define _CCCL_IMPLICIT_SYSTEM_HEADER -#elif defined(_LIBCUDACXX_COMPILER_MSVC) \ - && defined(_LIBCUDACXX_DISABLE_PRAGMA_MSVC_WARNING) -# define _CCCL_IMPLICIT_SYSTEM_HEADER -#elif defined(_LIBCUDACXX_COMPILER_NVRTC) -# define _CCCL_IMPLICIT_SYSTEM_HEADER -#elif defined(_LIBCUDACXX_DISABLE_PRAGMA_GCC_SYSTEM_HEADER) -# define _CCCL_IMPLICIT_SYSTEM_HEADER -#else -# if defined(_LIBCUDACXX_COMPILER_GCC) -# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("GCC system_header") -# elif defined(_LIBCUDACXX_COMPILER_CLANG) -# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("clang system_header") -# elif defined(_LIBCUDACXX_COMPILER_MSVC) -# define _CCCL_IMPLICIT_SYSTEM_HEADER __pragma(system_header) -# elif defined(_LIBCUDACXX_COMPILER_NVHPC) -# define _CCCL_IMPLICIT_SYSTEM_HEADER _Pragma("GCC system_header") -# else -# define _CCCL_IMPLICIT_SYSTEM_HEADER -# endif -#endif - -_CCCL_IMPLICIT_SYSTEM_HEADER - #ifdef __cplusplus // __config may be included in `extern "C"` contexts, switch back to include diff --git a/thrust/thrust/detail/config/config.h b/thrust/thrust/detail/config/config.h index baf3ac3a915..4215b67b75d 100644 --- a/thrust/thrust/detail/config/config.h +++ b/thrust/thrust/detail/config/config.h @@ -21,7 +21,7 @@ #pragma once // Include libcu++ config to get _CCCL_IMPLICIT_SYSTEM_HEADER -#include +#include _CCCL_IMPLICIT_SYSTEM_HEADER