diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java index 1cb110aab1..1f2428f1da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java @@ -192,7 +192,9 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { } Artifact binary = ruleContext.getBinArtifact(binaryPath); - if (isLinkShared(ruleContext) && !CppFileTypes.SHARED_LIBRARY.matches(binary.getFilename())) { + if (isLinkShared(ruleContext) + && !CppFileTypes.SHARED_LIBRARY.matches(binary.getFilename()) + && !CppFileTypes.VERSIONED_SHARED_LIBRARY.matches(binary.getFilename())) { ruleContext.attributeError("linkshared", "'linkshared' used in non-shared library"); return null; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index 35f16bfbbc..2b0d081268 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -1537,8 +1537,14 @@ public class CppLinkActionBuilder { String name = inputArtifact.getFilename(); boolean inputIsWholeArchive = !isRuntimeLinkerInput && needWholeArchive; if (CppFileTypes.SHARED_LIBRARY.matches(name)) { + // Use normal shared library resolution rules for shared libraries. String libName = name.replaceAll("(^lib|\\.(so|dylib)$)", ""); librariesToLink.addValue(new LibraryToLinkValue("-l" + libName, inputIsWholeArchive)); + } else if (CppFileTypes.VERSIONED_SHARED_LIBRARY.matches(name)) { + // Versioned shared libraries require the exact library filename, e.g.: + // -lfoo -> libfoo.so + // -l:libfoo.so.1 -> libfoo.so.1 + librariesToLink.addValue(new LibraryToLinkValue("-l:" + name, inputIsWholeArchive)); } else { // Interface shared objects have a non-standard extension // that the linker won't be able to find. So use the |