|
2 | 2 | include(CheckCXXCompilerFlag)
|
3 | 3 | include(CheckCCompilerFlag)
|
4 | 4 | include(CheckCXXSymbolExists)
|
| 5 | + |
| 6 | +if(NOT CMAKE_BUILD_TYPE) |
| 7 | + set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING |
| 8 | + "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel" |
| 9 | + FORCE) |
| 10 | +endif() |
| 11 | + |
| 12 | +function(CheckCompilerCXX11Flag) |
| 13 | + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| 14 | + if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.8) |
| 15 | + message(FATAL_ERROR "Unsupported GCC version. GCC >= 4.8 required.") |
| 16 | + endif() |
| 17 | + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
| 18 | + # cmake >= 3.0 compiler id "AppleClang" on Mac OS X, otherwise "Clang" |
| 19 | + # Apple Clang is a different compiler than upstream Clang which havs different version numbers. |
| 20 | + # https://gist.github.com/yamaya/2924292 |
| 21 | + if(APPLE) # cmake < 3.0 compiler id "Clang" on Mac OS X |
| 22 | + if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.1) |
| 23 | + message(FATAL_ERROR "Unsupported AppleClang version. AppleClang >= 5.1 required.") |
| 24 | + endif() |
| 25 | + else() |
| 26 | + if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.3) |
| 27 | + message(FATAL_ERROR "Unsupported Clang version. Clang >= 3.3 required.") |
| 28 | + endif() |
| 29 | + endif() |
| 30 | + endif() |
| 31 | +endfunction() |
| 32 | + |
| 33 | +CheckCompilerCXX11Flag() |
| 34 | +LIST(APPEND CMAKE_CXX_FLAGS -std=c++11) |
| 35 | + |
5 | 36 | # safe_set_flag
|
6 | 37 | #
|
7 | 38 | # Set a compile flag only if compiler is support
|
@@ -41,9 +72,7 @@ macro(safe_set_nvflag flag_name)
|
41 | 72 | CHECK_C_COMPILER_FLAG(${flag_name} C_COMPILER_SUPPORT_FLAG_${safe_name})
|
42 | 73 | set(safe_name C_COMPILER_SUPPORT_FLAG_${safe_name})
|
43 | 74 | if(${safe_name})
|
44 |
| - set(CUDA_NVCC_FLAGS |
45 |
| - --compiler-options;${flag_name} |
46 |
| - ${CUDA_NVCC_FLAGS}) |
| 75 | + LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler ${flag_name}) |
47 | 76 | endif()
|
48 | 77 | endmacro()
|
49 | 78 |
|
@@ -109,8 +138,22 @@ foreach(flag ${GPU_COMMON_FLAGS})
|
109 | 138 | endforeach()
|
110 | 139 |
|
111 | 140 |
|
| 141 | +set(CUDA_PROPAGATE_HOST_FLAGS OFF) |
| 142 | + |
112 | 143 | # Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc.
|
113 | 144 | # So, don't set these flags here.
|
| 145 | +LIST(APPEND CUDA_NVCC_FLAGS -std=c++11) |
| 146 | +LIST(APPEND CUDA_NVCC_FLAGS --use_fast_math) |
| 147 | + |
| 148 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 149 | + LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_DEBUG}) |
| 150 | +elseif(CMAKE_BUILD_TYPE STREQUAL "Release") |
| 151 | + LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELEASE}) |
| 152 | +elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") |
| 153 | + LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) |
| 154 | +elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") |
| 155 | + LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_MINSIZEREL}) |
| 156 | +endif() |
114 | 157 |
|
115 | 158 | function(specify_cuda_arch cuda_version cuda_arch)
|
116 | 159 | if(${cuda_version} VERSION_GREATER "8.0")
|
|
0 commit comments