1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-17 15:32:10 +08:00

CUDA: Perform CUDA toolkit include directory detection only on nvcc

The code is specific to nvcc.
This commit is contained in:
Raul Tambre
2020-03-08 15:43:44 +02:00
parent 8f122b4557
commit 0703e5fb6f

View File

@@ -86,7 +86,7 @@ if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "") set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "") set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "")
set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
elseif(CMAKE_CUDA_COMPILER_ID STREQUAL NVIDIA) elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
set(_nvcc_log "") set(_nvcc_log "")
string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}") string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
if(_nvcc_output_orig MATCHES "#\\\$ +PATH= *([^\n]*)\n") if(_nvcc_output_orig MATCHES "#\\\$ +PATH= *([^\n]*)\n")
@@ -188,30 +188,33 @@ elseif(CMAKE_CUDA_COMPILER_ID STREQUAL NVIDIA)
endif() endif()
endif() endif()
set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES ) # Determine CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}") if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
if(_nvcc_output_orig MATCHES "#\\\$ +INCLUDES= *([^\n]*)\n") set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES)
set(_nvcc_includes "${CMAKE_MATCH_1}") string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
string(APPEND _nvcc_log " found 'INCLUDES=' string: [${_nvcc_includes}]\n") if(_nvcc_output_orig MATCHES "#\\\$ +INCLUDES= *([^\n]*)\n")
else() set(_nvcc_includes "${CMAKE_MATCH_1}")
set(_nvcc_includes "") string(APPEND _nvcc_log " found 'INCLUDES=' string: [${_nvcc_includes}]\n")
string(REPLACE "\n" "\n " _nvcc_output_log "\n${_nvcc_output_orig}") else()
string(APPEND _nvcc_log " no 'INCLUDES=' string found in nvcc output:${_nvcc_output_log}\n") set(_nvcc_includes "")
endif() string(REPLACE "\n" "\n " _nvcc_output_log "\n${_nvcc_output_orig}")
if(_nvcc_includes) string(APPEND _nvcc_log " no 'INCLUDES=' string found in nvcc output:${_nvcc_output_log}\n")
# across all operating system each include directory is prefixed with -I endif()
separate_arguments(_nvcc_output NATIVE_COMMAND "${_nvcc_includes}") if(_nvcc_includes)
foreach(line IN LISTS _nvcc_output) # across all operating system each include directory is prefixed with -I
string(REGEX REPLACE "^-I" "" line "${line}") separate_arguments(_nvcc_output NATIVE_COMMAND "${_nvcc_includes}")
get_filename_component(line "${line}" ABSOLUTE) foreach(line IN LISTS _nvcc_output)
list(APPEND CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${line}") string(REGEX REPLACE "^-I" "" line "${line}")
endforeach() get_filename_component(line "${line}" ABSOLUTE)
list(APPEND CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${line}")
endforeach()
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Parsed CUDA nvcc include information from above output:\n${_nvcc_log}\n${log}\n\n") "Parsed CUDA nvcc include information from above output:\n${_nvcc_log}\n${log}\n\n")
else() else()
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Failed to detect CUDA nvcc include information:\n${_nvcc_log}\n\n") "Failed to detect CUDA nvcc include information:\n${_nvcc_log}\n\n")
endif()
endif() endif()
# configure all variables set in this file # configure all variables set in this file