mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 15:20:56 -06:00
CUDA: Compilers can now state they don't require a device linking step
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
CUDA_RESOLVE_DEVICE_SYMBOLS
|
||||
---------------------------
|
||||
|
||||
CUDA only: Enables device linking for the specific library target
|
||||
CUDA only: Enables device linking for the specific library target where
|
||||
required.
|
||||
|
||||
If set this will enable device linking on the library target. Normally
|
||||
device linking is deferred until a shared library or executable is generated,
|
||||
allowing for multiple static libraries to resolve device symbols at the same
|
||||
time when they are used by a shared library or executable.
|
||||
If set, this will tell the required compilers to enable device linking
|
||||
on the library target. Device linking is an additional link step
|
||||
required by some CUDA compilers when :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is
|
||||
enabled. Normally device linking is deferred until a shared library or
|
||||
executable is generated, allowing for multiple static libraries to resolve
|
||||
device symbols at the same time when they are used by a shared library or
|
||||
executable.
|
||||
|
||||
By default static library targets have this property is disabled,
|
||||
while shared, module, and executable targets have this property enabled.
|
||||
|
||||
@@ -171,7 +171,8 @@ if(NOT CMAKE_CUDA_LINK_EXECUTABLE)
|
||||
"<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0.0")
|
||||
if( CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND
|
||||
CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0.0")
|
||||
set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "-Wno-deprecated-gpu-targets")
|
||||
else()
|
||||
set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "")
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE True)
|
||||
set(CMAKE_CUDA_VERBOSE_FLAG "-v")
|
||||
set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "cmGeneratorTarget.h"
|
||||
#include "cmGlobalGenerator.h"
|
||||
#include "cmLocalGenerator.h"
|
||||
#include "cmMakefile.h"
|
||||
#include "cmStateDirectory.h"
|
||||
#include "cmStateSnapshot.h"
|
||||
#include "cmStateTypes.h"
|
||||
@@ -156,6 +157,10 @@ bool requireDeviceLinking(cmGeneratorTarget& target, cmLocalGenerator& lg,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!lg.GetMakefile()->IsOn("CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (const char* resolveDeviceSymbols =
|
||||
target.GetProperty("CUDA_RESOLVE_DEVICE_SYMBOLS")) {
|
||||
// If CUDA_RESOLVE_DEVICE_SYMBOLS has been explicitly set we need
|
||||
|
||||
Reference in New Issue
Block a user