mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 19:00:54 -06:00
CUDA: Avoid unnecessary allocation and GetLinkLanguage()
There's no reason to allocate the cmNinjaLinkLineDeviceComputer on the heap. We can also assume the link language as CUDA in cmLocalGenerator::GetDeviceLinkFlags().
This commit is contained in:
@@ -1410,25 +1410,23 @@ std::vector<BT<std::string>> cmLocalGenerator::GetStaticLibraryFlags(
|
||||
}
|
||||
|
||||
void cmLocalGenerator::GetDeviceLinkFlags(
|
||||
cmLinkLineComputer* linkLineComputer, const std::string& config,
|
||||
cmLinkLineComputer& linkLineComputer, const std::string& config,
|
||||
std::string& linkLibs, std::string& linkFlags, std::string& frameworkPath,
|
||||
std::string& linkPath, cmGeneratorTarget* target)
|
||||
{
|
||||
cmGeneratorTarget::DeviceLinkSetter setter(*target);
|
||||
|
||||
cmComputeLinkInformation* pcli = target->GetLinkInformation(config);
|
||||
const std::string linkLanguage =
|
||||
linkLineComputer->GetLinkerLanguage(target, config);
|
||||
|
||||
if (pcli) {
|
||||
// Compute the required device link libraries when
|
||||
// resolving gpu lang device symbols
|
||||
this->OutputLinkLibraries(pcli, linkLineComputer, linkLibs, frameworkPath,
|
||||
this->OutputLinkLibraries(pcli, &linkLineComputer, linkLibs, frameworkPath,
|
||||
linkPath);
|
||||
}
|
||||
|
||||
std::vector<std::string> linkOpts;
|
||||
target->GetLinkOptions(linkOpts, config, linkLanguage);
|
||||
target->GetLinkOptions(linkOpts, config, "CUDA");
|
||||
// LINK_OPTIONS are escaped.
|
||||
this->AppendCompileOptions(linkFlags, linkOpts);
|
||||
}
|
||||
|
||||
@@ -496,7 +496,7 @@ public:
|
||||
|
||||
/** Fill out these strings for the given target. Libraries to link,
|
||||
* flags, and linkflags. */
|
||||
void GetDeviceLinkFlags(cmLinkLineComputer* linkLineComputer,
|
||||
void GetDeviceLinkFlags(cmLinkLineComputer& linkLineComputer,
|
||||
const std::string& config, std::string& linkLibs,
|
||||
std::string& linkFlags, std::string& frameworkPath,
|
||||
std::string& linkPath, cmGeneratorTarget* target);
|
||||
|
||||
@@ -855,16 +855,14 @@ void cmNinjaNormalTargetGenerator::WriteNvidiaDeviceLinkStatement(
|
||||
vars["TARGET_FILE"] =
|
||||
localGen.ConvertToOutputFormat(output, cmOutputConverter::SHELL);
|
||||
|
||||
std::unique_ptr<cmLinkLineComputer> linkLineComputer(
|
||||
new cmNinjaLinkLineDeviceComputer(
|
||||
this->GetLocalGenerator(),
|
||||
this->GetLocalGenerator()->GetStateSnapshot().GetDirectory(),
|
||||
globalGen));
|
||||
linkLineComputer->SetUseNinjaMulti(globalGen->IsMultiConfig());
|
||||
cmNinjaLinkLineDeviceComputer linkLineComputer(
|
||||
this->GetLocalGenerator(),
|
||||
this->GetLocalGenerator()->GetStateSnapshot().GetDirectory(), globalGen);
|
||||
linkLineComputer.SetUseNinjaMulti(globalGen->IsMultiConfig());
|
||||
|
||||
localGen.GetDeviceLinkFlags(linkLineComputer.get(), config,
|
||||
vars["LINK_LIBRARIES"], vars["LINK_FLAGS"],
|
||||
frameworkPath, linkPath, genTarget);
|
||||
localGen.GetDeviceLinkFlags(linkLineComputer, config, vars["LINK_LIBRARIES"],
|
||||
vars["LINK_FLAGS"], frameworkPath, linkPath,
|
||||
genTarget);
|
||||
|
||||
this->addPoolNinjaVariable("JOB_POOL_LINK", genTarget, vars);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user