|
|
@@ -0,0 +1,74 @@
|
|
|
+/* 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();
|
|
|
+}
|
|
|
+
|
|
|
+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);
|
|
|
+}
|