mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-03 06:10:28 +00: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_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
|
If set, this will tell the required compilers to enable device linking
|
||||||
device linking is deferred until a shared library or executable is generated,
|
on the library target. Device linking is an additional link step
|
||||||
allowing for multiple static libraries to resolve device symbols at the same
|
required by some CUDA compilers when :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is
|
||||||
time when they are used by a shared library or executable.
|
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,
|
By default static library targets have this property is disabled,
|
||||||
while shared, module, and executable targets have this property enabled.
|
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}")
|
"<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
|
||||||
endif()
|
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")
|
set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "-Wno-deprecated-gpu-targets")
|
||||||
else()
|
else()
|
||||||
set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "")
|
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_FLAG "-v")
|
||||||
set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
|
set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "cmGeneratorTarget.h"
|
#include "cmGeneratorTarget.h"
|
||||||
#include "cmGlobalGenerator.h"
|
#include "cmGlobalGenerator.h"
|
||||||
#include "cmLocalGenerator.h"
|
#include "cmLocalGenerator.h"
|
||||||
|
#include "cmMakefile.h"
|
||||||
#include "cmStateDirectory.h"
|
#include "cmStateDirectory.h"
|
||||||
#include "cmStateSnapshot.h"
|
#include "cmStateSnapshot.h"
|
||||||
#include "cmStateTypes.h"
|
#include "cmStateTypes.h"
|
||||||
@@ -156,6 +157,10 @@ bool requireDeviceLinking(cmGeneratorTarget& target, cmLocalGenerator& lg,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!lg.GetMakefile()->IsOn("CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (const char* resolveDeviceSymbols =
|
if (const char* resolveDeviceSymbols =
|
||||||
target.GetProperty("CUDA_RESOLVE_DEVICE_SYMBOLS")) {
|
target.GetProperty("CUDA_RESOLVE_DEVICE_SYMBOLS")) {
|
||||||
// If CUDA_RESOLVE_DEVICE_SYMBOLS has been explicitly set we need
|
// If CUDA_RESOLVE_DEVICE_SYMBOLS has been explicitly set we need
|
||||||
|
|||||||
Reference in New Issue
Block a user