summaryrefslogtreecommitdiff
path: root/Source/cmNinjaNormalTargetGenerator.h
diff options
context:
space:
mode:
authorRaul Tambre <raul@tambre.ee>2020-09-05 19:40:02 +0300
committerBrad King <brad.king@kitware.com>2020-09-24 15:19:54 -0400
commitc63fe018353cf6afb30980c4cac7493be7cd0a82 (patch)
tree68d2daf0cd8ab91a9feaa49392607c6cfecd2ac4 /Source/cmNinjaNormalTargetGenerator.h
parentc98ec731f90eb0180c89108b7d2e42263b66d1ed (diff)
downloadcmake-c63fe018353cf6afb30980c4cac7493be7cd0a82.tar.gz
CUDA: Clang separable compilation
For NVCC the compiler takes care of device linking when passed the "-dlink" flag. Clang doesn't support such magic and requires the buildsystem to do the work that NVCC does behind the scenes. The implementation is based on Bazel's device linking documentation: https://github.com/tensorflow/tensorflow/blob/7cabcdf073abad8c46e9dda62bb8fa4682d2061e/third_party/nccl/build_defs.bzl.tpl#L259 Closes: #20726
Diffstat (limited to 'Source/cmNinjaNormalTargetGenerator.h')
-rw-r--r--Source/cmNinjaNormalTargetGenerator.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/Source/cmNinjaNormalTargetGenerator.h b/Source/cmNinjaNormalTargetGenerator.h
index 25e40d0e5a..ffc405c702 100644
--- a/Source/cmNinjaNormalTargetGenerator.h
+++ b/Source/cmNinjaNormalTargetGenerator.h
@@ -21,18 +21,31 @@ public:
private:
std::string LanguageLinkerRule(const std::string& config) const;
std::string LanguageLinkerDeviceRule(const std::string& config) const;
+ std::string LanguageLinkerCudaDeviceRule(const std::string& config) const;
+ std::string LanguageLinkerCudaDeviceCompileRule(
+ const std::string& config) const;
+ std::string LanguageLinkerCudaFatbinaryRule(const std::string& config) const;
const char* GetVisibleTypeName() const;
void WriteLanguagesRules(const std::string& config);
void WriteLinkRule(bool useResponseFile, const std::string& config);
- void WriteDeviceLinkRule(bool useResponseFile, const std::string& config);
+ void WriteDeviceLinkRules(const std::string& config);
+ void WriteNvidiaDeviceLinkRule(bool useResponseFile,
+ const std::string& config);
void WriteLinkStatement(const std::string& config,
const std::string& fileConfig, bool firstForConfig);
void WriteDeviceLinkStatement(const std::string& config,
const std::string& fileConfig,
bool firstForConfig);
+ void WriteDeviceLinkStatements(const std::string& config,
+ const std::vector<std::string>& architectures,
+ const std::string& output);
+ void WriteNvidiaDeviceLinkStatement(const std::string& config,
+ const std::string& fileConfig,
+ const std::string& outputDir,
+ const std::string& output);
void WriteObjectLibStatement(const std::string& config);