diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java index 75b5662b1e..afb863101c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java @@ -69,15 +69,19 @@ public final class CcLinkParams { private final NestedSet<LinkOptions> linkOpts; private final NestedSet<Linkstamp> linkstamps; private final NestedSet<LibraryToLink> libraries; + private final NestedSet<Artifact> executionDynamicLibraries; private final ExtraLinkTimeLibraries extraLinkTimeLibraries; - private CcLinkParams(NestedSet<LinkOptions> linkOpts, - NestedSet<Linkstamp> linkstamps, - NestedSet<LibraryToLink> libraries, - ExtraLinkTimeLibraries extraLinkTimeLibraries) { + private CcLinkParams( + NestedSet<LinkOptions> linkOpts, + NestedSet<Linkstamp> linkstamps, + NestedSet<LibraryToLink> libraries, + NestedSet<Artifact> executionDynamicLibraries, + ExtraLinkTimeLibraries extraLinkTimeLibraries) { this.linkOpts = linkOpts; this.linkstamps = linkstamps; this.libraries = libraries; + this.executionDynamicLibraries = executionDynamicLibraries; this.extraLinkTimeLibraries = extraLinkTimeLibraries; } @@ -106,6 +110,11 @@ public final class CcLinkParams { return libraries; } + /** @return the executionDynamicLibraries */ + public NestedSet<Artifact> getExecutionDynamicLibraries() { + return executionDynamicLibraries; + } + /** * The extra link time libraries; will be null if there are no such libraries. */ @@ -146,6 +155,8 @@ public final class CcLinkParams { NestedSetBuilder.compileOrder(); private final NestedSetBuilder<LibraryToLink> librariesBuilder = NestedSetBuilder.linkOrder(); + private final NestedSetBuilder<Artifact> executionDynamicLibrariesBuilder = + NestedSetBuilder.stableOrder(); /** * A builder for the list of link time libraries. Most builds @@ -176,8 +187,12 @@ public final class CcLinkParams { if (extraLinkTimeLibrariesBuilder != null) { extraLinkTimeLibraries = extraLinkTimeLibrariesBuilder.build(); } - return new CcLinkParams(linkOptsBuilder.build(), linkstampsBuilder.build(), - librariesBuilder.build(), extraLinkTimeLibraries); + return new CcLinkParams( + linkOptsBuilder.build(), + linkstampsBuilder.build(), + librariesBuilder.build(), + executionDynamicLibrariesBuilder.build(), + extraLinkTimeLibraries); } public boolean add(CcLinkParamsStore store) { @@ -263,6 +278,7 @@ public final class CcLinkParams { linkOptsBuilder.addTransitive(args.getLinkopts()); linkstampsBuilder.addTransitive(args.getLinkstamps()); librariesBuilder.addTransitive(args.getLibraries()); + executionDynamicLibrariesBuilder.addTransitive(args.getExecutionDynamicLibraries()); if (args.getExtraLinkTimeLibraries() != null) { if (extraLinkTimeLibrariesBuilder == null) { extraLinkTimeLibrariesBuilder = ExtraLinkTimeLibraries.builder(); @@ -306,6 +322,12 @@ public final class CcLinkParams { return this; } + /** Adds a collection of library artifacts. */ + public Builder addExecutionDynamicLibraries(Iterable<Artifact> libraries) { + executionDynamicLibrariesBuilder.addAll(libraries); + return this; + } + /** * Adds an extra link time library, a library that is actually * built at link time. @@ -334,6 +356,10 @@ public final class CcLinkParams { if (!neverlink) { addLibraries(linkingOutputs.getPreferredLibraries(linkingStatically, linkShared || context.getFragment(CppConfiguration.class).forcePic())); + if (!linkingStatically) { + addExecutionDynamicLibraries( + LinkerInputs.toLibraryArtifacts(linkingOutputs.getExecutionDynamicLibraries())); + } addLinkOpts(linkopts); } return this; @@ -388,12 +414,12 @@ public final class CcLinkParams { } } - /** - * Empty CcLinkParams. - */ - public static final CcLinkParams EMPTY = new CcLinkParams( - NestedSetBuilder.<LinkOptions>emptySet(Order.LINK_ORDER), - NestedSetBuilder.<Linkstamp>emptySet(Order.COMPILE_ORDER), - NestedSetBuilder.<LibraryToLink>emptySet(Order.LINK_ORDER), - null); + /** Empty CcLinkParams. */ + public static final CcLinkParams EMPTY = + new CcLinkParams( + NestedSetBuilder.<LinkOptions>emptySet(Order.LINK_ORDER), + NestedSetBuilder.<Linkstamp>emptySet(Order.COMPILE_ORDER), + NestedSetBuilder.<LibraryToLink>emptySet(Order.LINK_ORDER), + NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), + null); } |