1include(Compiler/CMakeCommonCompilerMacros) 2 3set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE True) 4set(CMAKE_CUDA_VERBOSE_FLAG "-v") 5set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v") 6 7set(_CMAKE_COMPILE_AS_CUDA_FLAG "-x cu") 8set(_CMAKE_CUDA_PTX_FLAG "-ptx") 9set(_CMAKE_CUDA_DEVICE_CODE "-dc") 10 11if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89) 12 # The -forward-unknown-to-host-compiler flag was only 13 # added to nvcc in 10.2 so before that we had no good 14 # way to invoke the CUDA compiler and propagate unknown 15 # flags such as -pthread to the host compiler 16 set(_CMAKE_CUDA_EXTRA_FLAGS "-forward-unknown-to-host-compiler") 17else() 18 set(_CMAKE_CUDA_EXTRA_FLAGS "") 19endif() 20 21if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0.0") 22 set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "-Wno-deprecated-gpu-targets") 23else() 24 set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "") 25endif() 26 27if(CMAKE_CUDA_HOST_COMPILER AND NOT CMAKE_GENERATOR MATCHES "Visual Studio") 28 string(APPEND _CMAKE_CUDA_EXTRA_FLAGS " -ccbin=<CMAKE_CUDA_HOST_COMPILER>") 29endif() 30 31if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89) 32 # The -MD flag was only added to nvcc in 10.2 so 33 # before that we had to invoke the compiler twice 34 # to get header dependency information 35 set(CMAKE_DEPFILE_FLAGS_CUDA "-MD -MT <DEP_TARGET> -MF <DEP_FILE>") 36else() 37 set(CMAKE_CUDA_DEPENDS_EXTRA_COMMANDS "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -M <SOURCE> -MT <OBJECT> -o <DEP_FILE>") 38endif() 39set(CMAKE_CUDA_DEPFILE_FORMAT gcc) 40if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) 41 AND CMAKE_GENERATOR MATCHES "Makefiles|WMake") 42 set(CMAKE_CUDA_DEPENDS_USE_COMPILER TRUE) 43endif() 44 45if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC") 46 set(CMAKE_CUDA_COMPILE_OPTIONS_PIE -Xcompiler=-fPIE) 47 set(CMAKE_CUDA_COMPILE_OPTIONS_PIC -Xcompiler=-fPIC) 48 set(CMAKE_CUDA_COMPILE_OPTIONS_VISIBILITY -Xcompiler=-fvisibility=) 49 # CMAKE_SHARED_LIBRARY_CUDA_FLAGS is sent to the host linker so we 50 # don't need to forward it through nvcc. 51 set(CMAKE_SHARED_LIBRARY_CUDA_FLAGS -fPIC) 52 string(APPEND CMAKE_CUDA_FLAGS_INIT " ") 53 string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -g") 54 string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -O3 -DNDEBUG") 55 string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG") 56 string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG") 57endif() 58set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS -shared) 59set(CMAKE_INCLUDE_SYSTEM_FLAG_CUDA -isystem=) 60 61if (CMAKE_CUDA_SIMULATE_ID STREQUAL "GNU") 62 set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Wl,") 63 set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP ",") 64elseif(CMAKE_CUDA_SIMULATE_ID STREQUAL "Clang") 65 set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Xlinker" " ") 66 set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP) 67endif() 68 69set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG "-Xcompiler=") 70set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG_SEP ",") 71set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG "-Xlinker=") 72set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG_SEP ",") 73 74set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "cudadevrt;cudart_static") 75set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "cudadevrt;cudart") 76set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE "") 77 78if(UNIX AND NOT (CMAKE_SYSTEM_NAME STREQUAL "QNX")) 79 list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl") 80endif() 81 82if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC") 83 # MSVC requires c++14 as the minimum level 84 set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "") 85 set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "") 86 87 # MSVC requires c++14 as the minimum level 88 set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "") 89 set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "") 90 91 if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0) 92 if(CMAKE_CUDA_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.10.25017) 93 set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14") 94 set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14") 95 else() 96 set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "") 97 set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "") 98 endif() 99 endif() 100 101 if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0) 102 if(CMAKE_CUDA_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.11.25505) 103 set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17") 104 set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17") 105 endif() 106 endif() 107 108else() 109 set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "") 110 set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "") 111 112 set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "-std=c++11") 113 set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "-std=c++11") 114 115 if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0) 116 set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03") 117 set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=c++03") 118 set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14") 119 set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14") 120 endif() 121 122 if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0) 123 set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17") 124 set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17") 125 endif() 126 127endif() 128 129# FIXME: investigate use of --options-file. 130# Tell Makefile generator that nvcc does not support @<rspfile> syntax. 131set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0) 132set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0) 133set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0) 134 135if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.0") 136 set(CMAKE_CUDA_RESPONSE_FILE_DEVICE_LINK_FLAG "--options-file ") 137 set(CMAKE_CUDA_RESPONSE_FILE_FLAG "--options-file ") 138endif() 139 140__compiler_check_default_language_standard(CUDA 6.0 03) 141