aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
diff options
context:
space:
mode:
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.java54
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);
}