diff options
-rw-r--r-- | Modules/CMakeTestCUDACompiler.cmake | 6 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.cxx | 9 | ||||
-rw-r--r-- | Tests/CudaOnly/CMakeLists.txt | 6 | ||||
-rw-r--r-- | Tests/CudaOnly/ToolkitIsSystemInclude/CMakeLists.txt | 7 | ||||
-rw-r--r-- | Tests/CudaOnly/ToolkitIsSystemInclude/include/nvrtc.h | 5 | ||||
-rw-r--r-- | Tests/CudaOnly/ToolkitIsSystemInclude/main.cu | 4 |
6 files changed, 31 insertions, 6 deletions
diff --git a/Modules/CMakeTestCUDACompiler.cmake b/Modules/CMakeTestCUDACompiler.cmake index 853d655..a6d0f8b 100644 --- a/Modules/CMakeTestCUDACompiler.cmake +++ b/Modules/CMakeTestCUDACompiler.cmake @@ -126,10 +126,8 @@ list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES ${CMAKE_CUDA_IMPLICIT_LINK_L if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") # Remove the CUDA Toolkit include directories from the set of # implicit system include directories. - # This resolves the issue that NVCC doesn't specify these - # includes as SYSTEM includes when compiling device code, and sometimes - # they contain headers that generate warnings, so let users mark them - # as SYSTEM explicitly + # CMake will explicitly mark these as SYSTEM to NVCC since it implicitly + # adds them as user includes and not system if(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES) list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 4feae6d..07ad1e8 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1854,6 +1854,15 @@ void cmGlobalGenerator::FinalizeTargetCompileInfo() cmExpandedList(standardIncludesStr); standardIncludesSet.insert(standardIncludesVec.begin(), standardIncludesVec.end()); + if (li == "CUDA") { + std::string const& cudaSystemIncludeVar = + mf->GetSafeDefinition("CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES"); + std::vector<std::string> cudaToolkitIncludeVec = + cmExpandedList(cudaSystemIncludeVar); + standardIncludesSet.insert(cudaToolkitIncludeVec.begin(), + cudaToolkitIncludeVec.end()); + mf->AddIncludeDirectories(cudaToolkitIncludeVec); + } } mf->AddSystemIncludeDirectories(standardIncludesSet); } diff --git a/Tests/CudaOnly/CMakeLists.txt b/Tests/CudaOnly/CMakeLists.txt index 091872d..d23e929 100644 --- a/Tests/CudaOnly/CMakeLists.txt +++ b/Tests/CudaOnly/CMakeLists.txt @@ -27,10 +27,12 @@ if(CMake_TEST_CUDA AND NOT CMake_TEST_CUDA STREQUAL "Clang") add_cuda_test_macro(CudaOnly.GPUDebugFlag CudaOnlyGPUDebugFlag) endif() -# The CUDA only ships the shared version of the toolkit libraries -# on windows if(NOT WIN32) + # The CUDA only ships the shared version of the toolkit libraries + # on windows add_cuda_test_macro(CudaOnly.StaticRuntimePlusToolkit CudaOnlyStaticRuntimePlusToolkit) + # `isystem` behaves differently on windows with nvcc + add_cuda_test_macro(CudaOnly.ToolkitIsSystemInclude CudaOnlySystemInclude) endif() add_cuda_test_macro(CudaOnly.DeviceLTO CudaOnlyDeviceLTO) diff --git a/Tests/CudaOnly/ToolkitIsSystemInclude/CMakeLists.txt b/Tests/CudaOnly/ToolkitIsSystemInclude/CMakeLists.txt new file mode 100644 index 0000000..bc347dd --- /dev/null +++ b/Tests/CudaOnly/ToolkitIsSystemInclude/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.24) +project(ToolkitIsSystemInclude CUDA) + +# Verify that the nvrtc.h that is inside `CMAKE_CURRENT_SOURCE_DIR` is still +# the first include for `.cu` files. +add_executable(CudaOnlySystemInclude main.cu) +target_include_directories(CudaOnlySystemInclude SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/Tests/CudaOnly/ToolkitIsSystemInclude/include/nvrtc.h b/Tests/CudaOnly/ToolkitIsSystemInclude/include/nvrtc.h new file mode 100644 index 0000000..5a015c4 --- /dev/null +++ b/Tests/CudaOnly/ToolkitIsSystemInclude/include/nvrtc.h @@ -0,0 +1,5 @@ +#define CMAKE_CUDA_TOOLKIT_IS_SYSTEM 1 + +int main() +{ +} diff --git a/Tests/CudaOnly/ToolkitIsSystemInclude/main.cu b/Tests/CudaOnly/ToolkitIsSystemInclude/main.cu new file mode 100644 index 0000000..6cff8a1 --- /dev/null +++ b/Tests/CudaOnly/ToolkitIsSystemInclude/main.cu @@ -0,0 +1,4 @@ +#include "nvrtc.h" +#ifndef CMAKE_CUDA_TOOLKIT_IS_SYSTEM +# error "Failed to specify the CUDA Toolkit includes as system" +#endif |