summaryrefslogtreecommitdiffstats
path: root/Modules/FindCUDA.cmake
diff options
context:
space:
mode:
authorJames Bigler <jamesbigler@gmail.com>2015-03-22 05:01:24 (GMT)
committerBrad King <brad.king@kitware.com>2015-04-08 20:25:47 (GMT)
commit99abebdea01b9ef73e091db5594553f7b1694a1b (patch)
treef620d3a3926185cc95277e9f5fec010d8e8364ed /Modules/FindCUDA.cmake
parent486e9f4f49646cf48915781a411edfe9d9ea7618 (diff)
downloadCMake-99abebdea01b9ef73e091db5594553f7b1694a1b.zip
CMake-99abebdea01b9ef73e091db5594553f7b1694a1b.tar.gz
CMake-99abebdea01b9ef73e091db5594553f7b1694a1b.tar.bz2
FindCUDA: Handle c++11 host flag
If the host flags contain a c++11 flag (at least for gcc), then we can't automatically propagate to nvcc it using -Xcompiler. This is because nvcc can't use any C++ only flags. Instead we find this flag and add it to nvcc's flags (it has a special flag for dealing with c++11 code) and remove it from the host flags. Co-Author: Guillermo Marcus <gmarcus@nvidia.com>
Diffstat (limited to 'Modules/FindCUDA.cmake')
-rw-r--r--Modules/FindCUDA.cmake13
1 files changed, 13 insertions, 0 deletions
diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake
index 81e1cad..7d9f772 100644
--- a/Modules/FindCUDA.cmake
+++ b/Modules/FindCUDA.cmake
@@ -1184,6 +1184,19 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
set(_cuda_nvcc_flags_config "${_cuda_nvcc_flags_config}\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})")
endforeach()
+ # Process the C++11 flag. If the host sets the flag, we need to add it to nvcc and
+ # remove it from the host. This is because -Xcompile -std=c++ will choke nvcc (it uses
+ # the C preprocessor). In order to get this to work correctly, we need to use nvcc's
+ # specific c++11 flag.
+ if( "${_cuda_host_flags}" MATCHES "-std=c\\+\\+11")
+ # Add the c++11 flag to nvcc if it isn't already present. Note that we only look at
+ # the main flag instead of the configuration specific flags.
+ if( NOT "${CUDA_NVCC_FLAGS}" MATCHES "-std;c\\+\\+11" )
+ list(APPEND nvcc_flags --std c++11)
+ endif()
+ string(REGEX REPLACE "[-]+std=c\\+\\+11" "" _cuda_host_flags "${_cuda_host_flags}")
+ endif()
+
# Get the list of definitions from the directory property
get_directory_property(CUDA_NVCC_DEFINITIONS COMPILE_DEFINITIONS)
if(CUDA_NVCC_DEFINITIONS)