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)

Reply via email to