mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-06 14:19:59 -05:00
CUDA: Use cmLinkLineDeviceComputer in VS generator
Resolve a fixme comment in `ComputeCudaLinkOptions`.
This commit is contained in:
committed by
Brad King
parent
ef10e61b6b
commit
149c952007
@@ -3832,63 +3832,15 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaLinkOptions(
|
||||
return false;
|
||||
}
|
||||
|
||||
// Would like to use:
|
||||
// cmLinkLineDeviceComputer computer(this->LocalGenerator,
|
||||
// this->LocalGenerator->GetStateSnapshot().GetDirectory());
|
||||
// std::string computed_libs = computer.ComputeLinkLibraries(cli,
|
||||
// std::string{}); but it outputs in "<libA> <libB>" format instead of
|
||||
// "<libA>;<libB>"
|
||||
// Note:
|
||||
// Any modification of this algorithm should be reflected also in
|
||||
// cmLinkLineDeviceComputer
|
||||
cmComputeLinkInformation& cli = *pcli;
|
||||
cmLinkLineDeviceComputer computer(
|
||||
this->LocalGenerator,
|
||||
this->LocalGenerator->GetStateSnapshot().GetDirectory());
|
||||
std::vector<BT<std::string>> btLibVec;
|
||||
computer.ComputeLinkLibraries(cli, std::string{}, btLibVec);
|
||||
std::vector<std::string> libVec;
|
||||
const auto& libs = cli.GetItems();
|
||||
for (cmComputeLinkInformation::Item const& l : libs) {
|
||||
|
||||
if (l.Target) {
|
||||
auto managedType = l.Target->GetManagedType(configName);
|
||||
// Do not allow C# targets to be added to the LIB listing. LIB files
|
||||
// are used for linking C++ dependencies. C# libraries do not have lib
|
||||
// files. Instead, they compile down to C# reference libraries (DLL
|
||||
// files). The
|
||||
// `<ProjectReference>` elements added to the vcxproj are enough for
|
||||
// the IDE to deduce the DLL file required by other C# projects that
|
||||
// need its reference library.
|
||||
if (managedType == cmGeneratorTarget::ManagedType::Managed) {
|
||||
continue;
|
||||
}
|
||||
const auto type = l.Target->GetType();
|
||||
|
||||
bool skip = false;
|
||||
switch (type) {
|
||||
case cmStateEnums::SHARED_LIBRARY:
|
||||
case cmStateEnums::MODULE_LIBRARY:
|
||||
case cmStateEnums::INTERFACE_LIBRARY:
|
||||
skip = true;
|
||||
break;
|
||||
case cmStateEnums::STATIC_LIBRARY:
|
||||
skip = l.Target->GetPropertyAsBool("CUDA_RESOLVE_DEVICE_SYMBOLS");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (skip) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (l.IsPath == cmComputeLinkInformation::ItemIsPath::Yes) {
|
||||
std::string path =
|
||||
this->LocalGenerator->MaybeRelativeToCurBinDir(l.Value.Value);
|
||||
ConvertToWindowsSlash(path);
|
||||
if (!cmVS10IsTargetsFile(l.Value.Value)) {
|
||||
libVec.push_back(l.HasFeature() ? l.GetFormattedItem(path).Value
|
||||
: path);
|
||||
}
|
||||
} else {
|
||||
libVec.push_back(l.Value.Value);
|
||||
}
|
||||
for (auto const& item : btLibVec) {
|
||||
libVec.emplace_back(item.Value);
|
||||
}
|
||||
|
||||
cudaLinkOptions.AddFlag("AdditionalDependencies", libVec);
|
||||
|
||||
Reference in New Issue
Block a user