Просмотр исходного кода

CUDA: Filter out -framework arguments during device linking

The filter in commit e768d96c74 (CUDA: Filter out host link flags during
device linking, 2018-10-22, v3.13.0-rc2~4^2~2^2) removes `-framework`
but not the framework name that comes after it.  Revise the logic to
remove both.

Fixes: #18911
Robert Maynard 6 лет назад
Родитель
Сommit
d5d1b15654
1 измененных файлов с 12 добавлено и 0 удалено
  1. 12 0
      Source/cmLinkLineDeviceComputer.cxx

+ 12 - 0
Source/cmLinkLineDeviceComputer.cxx

@@ -34,6 +34,7 @@ static bool cmLinkItemValidForDevice(std::string const& item)
   // * '-lpthread' => pass-along
   // * '-pthread' => drop
   // * '-a' => drop
+  // * '-framework Name' (as one string) => drop
   return (!cmHasLiteralPrefix(item, "-") || //
           cmHasLiteralPrefix(item, "-l") || //
           cmHasLiteralPrefix(item, "-L") || //
@@ -54,7 +55,13 @@ std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
   typedef cmComputeLinkInformation::ItemVector ItemVector;
   ItemVector const& items = cli.GetItems();
   std::string config = cli.GetConfig();
+  bool skipItemAfterFramework = false;
   for (auto const& item : items) {
+    if (skipItemAfterFramework) {
+      skipItemAfterFramework = false;
+      continue;
+    }
+
     if (item.Target) {
       bool skip = false;
       switch (item.Target->GetType()) {
@@ -84,6 +91,11 @@ std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
         out += this->ConvertToOutputFormat(
           this->ConvertToLinkReference(item.Value));
       }
+    } else if (item.Value == "-framework") {
+      // This is the first part of '-framework Name' where the framework
+      // name is specified as a following item.  Ignore both.
+      skipItemAfterFramework = true;
+      continue;
     } else if (cmLinkItemValidForDevice(item.Value)) {
       out += item.Value;
     }