This is an automated email from the ASF dual-hosted git repository.
wuwei pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new eb4f41c81f [CMake] Show NVCC include directories in
compile_commands.json (#17079)
eb4f41c81f is described below
commit eb4f41c81f8f2ac4e007c8ab86d8a059a46024db
Author: Eric Lunderberg <[email protected]>
AuthorDate: Wed Jun 12 18:43:18 2024 -0500
[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] https://github.com/Kitware/CMake/commit/6377a438
---
cmake/modules/CUDA.cmake | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/cmake/modules/CUDA.cmake b/cmake/modules/CUDA.cmake
index 7d7283641e..b7b405f822 100644
--- a/cmake/modules/CUDA.cmake
+++ b/cmake/modules/CUDA.cmake
@@ -30,6 +30,26 @@ if(USE_CUDA)
endif()
message(STATUS "Build with CUDA ${CUDA_VERSION} support")
enable_language(CUDA)
+
+ # Ensure that include directives to NVCC are in the
+ # `compile_commands.json`, as required by clangd.
+ #
+ # 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.
+ #
+ # [0] https://github.com/Kitware/CMake/commit/6377a438
+ set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
+
tvm_file_glob(GLOB RUNTIME_CUDA_SRCS src/runtime/cuda/*.cc)
list(APPEND RUNTIME_SRCS ${RUNTIME_CUDA_SRCS})
list(APPEND COMPILER_SRCS src/target/opt/build_cuda_on.cc)