summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2019-02-27 22:37:17 (GMT)
committerBrad King <brad.king@kitware.com>2019-02-28 19:56:11 (GMT)
commitd5d1b1565499b293589dd94e8511d8f22e862d47 (patch)
tree116807f4d81c57ddc45ada107541f16b31b252c6 /Source
parente6897c72e7c59f7a0b82ed19c1bdb40d42f7adaa (diff)
downloadCMake-d5d1b1565499b293589dd94e8511d8f22e862d47.zip
CMake-d5d1b1565499b293589dd94e8511d8f22e862d47.tar.gz
CMake-d5d1b1565499b293589dd94e8511d8f22e862d47.tar.bz2
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
Diffstat (limited to 'Source')
-rw-r--r--Source/cmLinkLineDeviceComputer.cxx12
1 files changed, 12 insertions, 0 deletions
diff --git a/Source/cmLinkLineDeviceComputer.cxx b/Source/cmLinkLineDeviceComputer.cxx
index a403dc9..211d03b 100644
--- a/Source/cmLinkLineDeviceComputer.cxx
+++ b/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;
}