| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | /* 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 <set>#include <sstream>#include <vector>#include "cmComputeLinkInformation.h"#include "cmGeneratorTarget.h"#include "cmGlobalNinjaGenerator.h"#include "cmStateDirectory.h"#include "cmStateTypes.h"class cmOutputConverter;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);}
 |