|
|
|
@ -2,6 +2,37 @@
|
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
|
include(CheckCCompilerFlag)
|
|
|
|
|
include(CheckCXXSymbolExists)
|
|
|
|
|
|
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
|
|
|
|
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel"
|
|
|
|
|
FORCE)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
function(CheckCompilerCXX11Flag)
|
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
|
|
|
if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.8)
|
|
|
|
|
message(FATAL_ERROR "Unsupported GCC version. GCC >= 4.8 required.")
|
|
|
|
|
endif()
|
|
|
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
|
|
|
# cmake >= 3.0 compiler id "AppleClang" on Mac OS X, otherwise "Clang"
|
|
|
|
|
# Apple Clang is a different compiler than upstream Clang which havs different version numbers.
|
|
|
|
|
# https://gist.github.com/yamaya/2924292
|
|
|
|
|
if(APPLE) # cmake < 3.0 compiler id "Clang" on Mac OS X
|
|
|
|
|
if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.1)
|
|
|
|
|
message(FATAL_ERROR "Unsupported AppleClang version. AppleClang >= 5.1 required.")
|
|
|
|
|
endif()
|
|
|
|
|
else()
|
|
|
|
|
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.3)
|
|
|
|
|
message(FATAL_ERROR "Unsupported Clang version. Clang >= 3.3 required.")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
CheckCompilerCXX11Flag()
|
|
|
|
|
LIST(APPEND CMAKE_CXX_FLAGS -std=c++11)
|
|
|
|
|
|
|
|
|
|
# safe_set_flag
|
|
|
|
|
#
|
|
|
|
|
# Set a compile flag only if compiler is support
|
|
|
|
@ -41,9 +72,7 @@ macro(safe_set_nvflag flag_name)
|
|
|
|
|
CHECK_C_COMPILER_FLAG(${flag_name} C_COMPILER_SUPPORT_FLAG_${safe_name})
|
|
|
|
|
set(safe_name C_COMPILER_SUPPORT_FLAG_${safe_name})
|
|
|
|
|
if(${safe_name})
|
|
|
|
|
set(CUDA_NVCC_FLAGS
|
|
|
|
|
--compiler-options;${flag_name}
|
|
|
|
|
${CUDA_NVCC_FLAGS})
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler ${flag_name})
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
@ -111,6 +140,17 @@ endforeach()
|
|
|
|
|
|
|
|
|
|
# Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc.
|
|
|
|
|
# So, don't set these flags here.
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS --use_fast_math)
|
|
|
|
|
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_DEBUG})
|
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELEASE})
|
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
|
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
|
|
|
|
|
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_MINSIZEREL})
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
function(specify_cuda_arch cuda_version cuda_arch)
|
|
|
|
|
if(${cuda_version} VERSION_GREATER "8.0")
|
|
|
|
|