cmLinkLineDeviceComputer.cxx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmLinkLineDeviceComputer.h"
  4. #include <set>
  5. #include <sstream>
  6. #include <vector>
  7. #include "cmComputeLinkInformation.h"
  8. #include "cmGeneratorTarget.h"
  9. #include "cmGlobalNinjaGenerator.h"
  10. #include "cmStateDirectory.h"
  11. #include "cmStateTypes.h"
  12. class cmOutputConverter;
  13. cmLinkLineDeviceComputer::cmLinkLineDeviceComputer(
  14. cmOutputConverter* outputConverter, cmStateDirectory stateDir)
  15. : cmLinkLineComputer(outputConverter, stateDir)
  16. {
  17. }
  18. cmLinkLineDeviceComputer::~cmLinkLineDeviceComputer()
  19. {
  20. }
  21. std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
  22. cmComputeLinkInformation& cli, std::string const& stdLibString)
  23. {
  24. // Write the library flags to the build rule.
  25. std::ostringstream fout;
  26. typedef cmComputeLinkInformation::ItemVector ItemVector;
  27. ItemVector const& items = cli.GetItems();
  28. std::string config = cli.GetConfig();
  29. for (ItemVector::const_iterator li = items.begin(); li != items.end();
  30. ++li) {
  31. if (!li->Target) {
  32. continue;
  33. }
  34. if (li->Target->GetType() == cmStateEnums::INTERFACE_LIBRARY ||
  35. li->Target->GetType() == cmStateEnums::SHARED_LIBRARY ||
  36. li->Target->GetType() == cmStateEnums::MODULE_LIBRARY) {
  37. continue;
  38. }
  39. std::set<std::string> langs;
  40. li->Target->GetLanguages(langs, config);
  41. if (langs.count("CUDA") == 0) {
  42. continue;
  43. }
  44. if (li->IsPath) {
  45. fout << this->ConvertToOutputFormat(
  46. this->ConvertToLinkReference(li->Value));
  47. } else {
  48. fout << li->Value;
  49. }
  50. fout << " ";
  51. }
  52. if (!stdLibString.empty()) {
  53. fout << stdLibString << " ";
  54. }
  55. return fout.str();
  56. }
  57. std::string cmLinkLineDeviceComputer::GetLinkerLanguage(cmGeneratorTarget*,
  58. std::string const&)
  59. {
  60. return "CUDA";
  61. }
  62. cmNinjaLinkLineDeviceComputer::cmNinjaLinkLineDeviceComputer(
  63. cmOutputConverter* outputConverter, cmStateDirectory stateDir,
  64. cmGlobalNinjaGenerator const* gg)
  65. : cmLinkLineDeviceComputer(outputConverter, stateDir)
  66. , GG(gg)
  67. {
  68. }
  69. std::string cmNinjaLinkLineDeviceComputer::ConvertToLinkReference(
  70. std::string const& lib) const
  71. {
  72. return GG->ConvertToNinjaPath(lib);
  73. }