mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 21:30:01 -05:00
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
This commit is contained in:
committed by
Brad King
parent
e6897c72e7
commit
d5d1b15654
@@ -34,6 +34,7 @@ static bool cmLinkItemValidForDevice(std::string const& item)
|
|||||||
// * '-lpthread' => pass-along
|
// * '-lpthread' => pass-along
|
||||||
// * '-pthread' => drop
|
// * '-pthread' => drop
|
||||||
// * '-a' => drop
|
// * '-a' => drop
|
||||||
|
// * '-framework Name' (as one string) => drop
|
||||||
return (!cmHasLiteralPrefix(item, "-") || //
|
return (!cmHasLiteralPrefix(item, "-") || //
|
||||||
cmHasLiteralPrefix(item, "-l") || //
|
cmHasLiteralPrefix(item, "-l") || //
|
||||||
cmHasLiteralPrefix(item, "-L") || //
|
cmHasLiteralPrefix(item, "-L") || //
|
||||||
@@ -54,7 +55,13 @@ std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
|
|||||||
typedef cmComputeLinkInformation::ItemVector ItemVector;
|
typedef cmComputeLinkInformation::ItemVector ItemVector;
|
||||||
ItemVector const& items = cli.GetItems();
|
ItemVector const& items = cli.GetItems();
|
||||||
std::string config = cli.GetConfig();
|
std::string config = cli.GetConfig();
|
||||||
|
bool skipItemAfterFramework = false;
|
||||||
for (auto const& item : items) {
|
for (auto const& item : items) {
|
||||||
|
if (skipItemAfterFramework) {
|
||||||
|
skipItemAfterFramework = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (item.Target) {
|
if (item.Target) {
|
||||||
bool skip = false;
|
bool skip = false;
|
||||||
switch (item.Target->GetType()) {
|
switch (item.Target->GetType()) {
|
||||||
@@ -84,6 +91,11 @@ std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
|
|||||||
out += this->ConvertToOutputFormat(
|
out += this->ConvertToOutputFormat(
|
||||||
this->ConvertToLinkReference(item.Value));
|
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)) {
|
} else if (cmLinkItemValidForDevice(item.Value)) {
|
||||||
out += item.Value;
|
out += item.Value;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user