Skip to content

Commit eb4f41c

Browse files
authored
[CMake] Show NVCC include directories in compile_commands.json (#17079)
As of cmake 3.29.5 [0], if the NVCC version is 11 or higher, cmake will generate a "options-file.rsp" containing the -I flags for include directories, rather than providing them on the command-line. This setting exists to work around the short command-line length limits on Windows, but is enabled on all platforms. If set, because include directories are not part of the `compile_commands.json`, the clangd LSP cannot find the include files. Furthermore, this override cannot be specified in a user's `config.cmake` for TVM, because it must be set after CMake's built-in CUDA support. This commit updates TVM's `CUDA.cmake` to override the `CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES` variable, to avoid this issue. [0] Kitware/CMake@6377a438
1 parent cc7eb2f commit eb4f41c

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

cmake/modules/CUDA.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ if(USE_CUDA)
3030
endif()
3131
message(STATUS "Build with CUDA ${CUDA_VERSION} support")
3232
enable_language(CUDA)
33+
34+
# Ensure that include directives to NVCC are in the
35+
# `compile_commands.json`, as required by clangd.
36+
#
37+
# As of cmake 3.29.5 [0], if the NVCC version is 11 or higher, cmake
38+
# will generate a "options-file.rsp" containing the -I flags for
39+
# include directories, rather than providing them on the
40+
# command-line. This setting exists to work around the short
41+
# command-line length limits on Windows, but is enabled on all
42+
# platforms. If set, because include directories are not part of
43+
# the `compile_commands.json`, the clangd LSP cannot find the
44+
# include files.
45+
#
46+
# Furthermore, this override cannot be specified in a user's
47+
# `config.cmake` for TVM, because it must be set after CMake's
48+
# built-in CUDA support.
49+
#
50+
# [0] https://github.com/Kitware/CMake/commit/6377a438
51+
set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
52+
3353
tvm_file_glob(GLOB RUNTIME_CUDA_SRCS src/runtime/cuda/*.cc)
3454
list(APPEND RUNTIME_SRCS ${RUNTIME_CUDA_SRCS})
3555
list(APPEND COMPILER_SRCS src/target/opt/build_cuda_on.cc)

0 commit comments

Comments
 (0)