diff options
author | Robert Maynard <robert.maynard@kitware.com> | 2019-02-27 22:37:17 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-02-28 19:56:11 (GMT) |
commit | d5d1b1565499b293589dd94e8511d8f22e862d47 (patch) | |
tree | 116807f4d81c57ddc45ada107541f16b31b252c6 /Source | |
parent | e6897c72e7c59f7a0b82ed19c1bdb40d42f7adaa (diff) | |
download | CMake-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.cxx | 12 |
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; } |