mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 12:09:48 +00:00
CUDA: Filter out non-static libraries during device linking
Since commit v3.12.0-rc1~278^2 (CUDA: Pass more link libraries to device linking, 2018-03-27) we consider every link library during device linking and use `-Xnvlink` to pass those that do not end in `.a`. However, nvlink breaks on versioned shared library names such as `.so.1`. Work around this problem by not passing library paths that do not end in `.a` or `.lib`. nvlink would not find device symbols in them anyway. Fixes: #18504
This commit is contained in:
parent
e1dc842cc1
commit
3c31ec7a0a
@ -77,15 +77,15 @@ std::string cmLinkLineDeviceComputer::ComputeLinkLibraries(
|
||||
|
||||
std::string out;
|
||||
if (item.IsPath) {
|
||||
// nvcc understands absolute paths to libraries ending in '.a' should
|
||||
// be passed to nvlink. Other extensions like '.so' or '.dylib' are
|
||||
// rejected by the nvcc front-end even though nvlink knows to ignore
|
||||
// them. Bypass the front-end via '-Xnvlink'.
|
||||
if (!cmHasLiteralSuffix(item.Value, ".a")) {
|
||||
out += "-Xnvlink ";
|
||||
// nvcc understands absolute paths to libraries ending in '.a' or '.lib'.
|
||||
// These should be passed to nvlink. Other extensions need to be left
|
||||
// out because nvlink may not understand or need them. Even though it
|
||||
// can tolerate '.so' or '.dylib' it cannot tolerate '.so.1'.
|
||||
if (cmHasLiteralSuffix(item.Value, ".a") ||
|
||||
cmHasLiteralSuffix(item.Value, ".lib")) {
|
||||
out += this->ConvertToOutputFormat(
|
||||
this->ConvertToLinkReference(item.Value));
|
||||
}
|
||||
out +=
|
||||
this->ConvertToOutputFormat(this->ConvertToLinkReference(item.Value));
|
||||
} else if (cmLinkItemValidForDevice(item.Value)) {
|
||||
out += item.Value;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user