From a92f8d96162b9e6c29ad0bd81b8fd05b387d94a9 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Wed, 31 Aug 2016 08:36:47 -0400 Subject: CUDA: Enable header dependency scanning. --- Modules/CMakeCUDAInformation.cmake | 15 ++++++++++++++- Source/cmLocalUnixMakefileGenerator3.cxx | 3 ++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Modules/CMakeCUDAInformation.cmake b/Modules/CMakeCUDAInformation.cmake index d3278e7..41ed34f 100644 --- a/Modules/CMakeCUDAInformation.cmake +++ b/Modules/CMakeCUDAInformation.cmake @@ -85,7 +85,20 @@ endif() # compile a cu file into an object file if(NOT CMAKE_CUDA_COMPILE_OBJECT) set(CMAKE_CUDA_COMPILE_OBJECT - " -o -x cu -c ") + " -x cu -c -o ") + + #The Ninja generator uses the make file dependency files to determine what + #files need to be recompiled. Unfortunately, nvcc doesn't support building + #a source file and generating the dependencies of said file in a single + #invocation. Instead we have to state that you need to chain two commands. + # + #The makefile generators uses the custom CMake dependency scanner, and thus + #it is exempt from this logic. + if(CMAKE_GENERATOR STREQUAL "Ninja") + list(APPEND CMAKE_CUDA_COMPILE_OBJECT + " -x cu -M -MT -o $DEP_FILE") + endif() + endif() # compile a cu file into an executable diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index c8b459c..ba17f81 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1458,7 +1458,8 @@ bool cmLocalUnixMakefileGenerator3::ScanDependencies( // Create the scanner for this language cmDepends* scanner = CM_NULLPTR; - if (lang == "C" || lang == "CXX" || lang == "RC" || lang == "ASM") { + if (lang == "C" || lang == "CXX" || lang == "RC" || lang == "ASM" || + lang == "CUDA") { // TODO: Handle RC (resource files) dependencies correctly. scanner = new cmDependsC(this, targetDir, lang, &validDeps); } -- cgit v0.12