| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| |
| #include "cmLinkLineDeviceComputer.h" |
| #include "cmComputeLinkInformation.h" |
| #include "cmGeneratorTarget.h" |
| #include "cmGlobalNinjaGenerator.h" |
| #include "cmOutputConverter.h" |
| |
| cmLinkLineDeviceComputer::cmLinkLineDeviceComputer( |
| cmOutputConverter* outputConverter, cmStateDirectory stateDir) |
| : cmLinkLineComputer(outputConverter, stateDir) |
| { |
| } |
| |
| cmLinkLineDeviceComputer::~cmLinkLineDeviceComputer() |
| { |
| } |
| |
| std::string cmLinkLineDeviceComputer::ComputeLinkLibraries( |
| cmComputeLinkInformation& cli, std::string const& stdLibString) |
| { |
| // Write the library flags to the build rule. |
| std::ostringstream fout; |
| typedef cmComputeLinkInformation::ItemVector ItemVector; |
| ItemVector const& items = cli.GetItems(); |
| std::string config = cli.GetConfig(); |
| for (ItemVector::const_iterator li = items.begin(); li != items.end(); |
| ++li) { |
| if (!li->Target) { |
| continue; |
| } |
| |
| if (li->Target->GetType() == cmStateEnums::INTERFACE_LIBRARY || |
| li->Target->GetType() == cmStateEnums::SHARED_LIBRARY || |
| li->Target->GetType() == cmStateEnums::MODULE_LIBRARY) { |
| continue; |
| } |
| |
| std::set<std::string> langs; |
| li->Target->GetLanguages(langs, config); |
| if (langs.count("CUDA") == 0) { |
| continue; |
| } |
| |
| if (li->IsPath) { |
| fout << this->ConvertToOutputFormat( |
| this->ConvertToLinkReference(li->Value)); |
| } else { |
| fout << li->Value; |
| } |
| fout << " "; |
| } |
| |
| if (!stdLibString.empty()) { |
| fout << stdLibString << " "; |
| } |
| |
| return fout.str(); |
| } |
| |
| std::string cmLinkLineDeviceComputer::GetLinkerLanguage(cmGeneratorTarget*, |
| std::string const&) |
| { |
| return "CUDA"; |
| } |
| |
| cmNinjaLinkLineDeviceComputer::cmNinjaLinkLineDeviceComputer( |
| cmOutputConverter* outputConverter, cmStateDirectory stateDir, |
| cmGlobalNinjaGenerator const* gg) |
| : cmLinkLineDeviceComputer(outputConverter, stateDir) |
| , GG(gg) |
| { |
| } |
| |
| std::string cmNinjaLinkLineDeviceComputer::ConvertToLinkReference( |
| std::string const& lib) const |
| { |
| return GG->ConvertToNinjaPath(lib); |
| } |