aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Manuel Klimek <klimek@google.com>2016-05-24 14:32:07 +0000
committerGravatar Yue Gan <yueg@google.com>2016-05-25 08:34:03 +0000
commitced5ce4bf19e3839632a7d3f83eaf4b6d055c4fd (patch)
treea7e88926887e15721f702ed62c13cb86269ffd9f /src/main/java/com
parent9b820d7972dfe36ce73ef0f644a03b1996944ba6 (diff)
Make linkstamp info use NestedSet.
Before this patch we would store expanded transitive include files in CcLinkParams. -- MOS_MIGRATED_REVID=123103815
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java2
5 files changed, 24 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
index a938294121..a3ec1d01c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -234,7 +234,7 @@ public final class CcLibraryHelper {
private final Set<String> defines = new LinkedHashSet<>();
private final List<TransitiveInfoCollection> implementationDeps = new ArrayList<>();
private final List<TransitiveInfoCollection> interfaceDeps = new ArrayList<>();
- private final List<Artifact> linkstamps = new ArrayList<>();
+ private final NestedSetBuilder<Artifact> linkstamps = NestedSetBuilder.stableOrder();
private final List<Artifact> prerequisites = new ArrayList<>();
private final List<PathFragment> looseIncludeDirs = new ArrayList<>();
private final List<PathFragment> systemIncludeDirs = new ArrayList<>();
@@ -601,8 +601,7 @@ public final class CcLibraryHelper {
*/
public CcLibraryHelper addLinkstamps(Iterable<? extends TransitiveInfoCollection> linkstamps) {
for (TransitiveInfoCollection linkstamp : linkstamps) {
- Iterables.addAll(this.linkstamps,
- linkstamp.getProvider(FileProvider.class).getFilesToBuild());
+ this.linkstamps.addTransitive(linkstamp.getProvider(FileProvider.class).getFilesToBuild());
}
return this;
}
@@ -1120,14 +1119,17 @@ public final class CcLibraryHelper {
final boolean forcePic) {
return new CcLinkParamsStore() {
@Override
- protected void collect(CcLinkParams.Builder builder, boolean linkingStatically,
- boolean linkShared) {
- builder.addLinkstamps(linkstamps, cppCompilationContext);
- builder.addTransitiveTargets(implementationDeps,
- CcLinkParamsProvider.TO_LINK_PARAMS, CcSpecificLinkParamsProvider.TO_LINK_PARAMS);
+ protected void collect(
+ CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) {
+ builder.addLinkstamps(linkstamps.build(), cppCompilationContext);
+ builder.addTransitiveTargets(
+ implementationDeps,
+ CcLinkParamsProvider.TO_LINK_PARAMS,
+ CcSpecificLinkParamsProvider.TO_LINK_PARAMS);
if (!neverlink) {
- builder.addLibraries(ccLinkingOutputs.getPreferredLibraries(linkingStatically,
- /*preferPic=*/linkShared || forcePic));
+ builder.addLibraries(
+ ccLinkingOutputs.getPreferredLibraries(
+ linkingStatically, /*preferPic=*/ linkShared || forcePic));
builder.addLinkOpts(linkopts);
}
}
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 ad10783165..c96877af5d 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
@@ -258,11 +258,9 @@ public final class CcLinkParams {
/**
* Adds a collection of linkstamps.
*/
- public Builder addLinkstamps(Iterable<Artifact> linkstamps, CppCompilationContext context) {
- ImmutableList<Artifact> declaredIncludeSrcs =
- ImmutableList.copyOf(context.getDeclaredIncludeSrcs());
+ public Builder addLinkstamps(NestedSet<Artifact> linkstamps, CppCompilationContext context) {
for (Artifact linkstamp : linkstamps) {
- linkstampsBuilder.add(new Linkstamp(linkstamp, declaredIncludeSrcs));
+ linkstampsBuilder.add(new Linkstamp(linkstamp, context.getDeclaredIncludeSrcs()));
}
return this;
}
@@ -325,9 +323,9 @@ public final class CcLinkParams {
*/
public static final class Linkstamp {
private final Artifact artifact;
- private final ImmutableList<Artifact> declaredIncludeSrcs;
+ private final NestedSet<Artifact> declaredIncludeSrcs;
- private Linkstamp(Artifact artifact, ImmutableList<Artifact> declaredIncludeSrcs) {
+ private Linkstamp(Artifact artifact, NestedSet<Artifact> declaredIncludeSrcs) {
this.artifact = Preconditions.checkNotNull(artifact);
this.declaredIncludeSrcs = Preconditions.checkNotNull(declaredIncludeSrcs);
}
@@ -342,7 +340,7 @@ public final class CcLinkParams {
/**
* Returns the declared includes.
*/
- public ImmutableList<Artifact> getDeclaredIncludeSrcs() {
+ public NestedSet<Artifact> getDeclaredIncludeSrcs() {
return declaredIncludeSrcs;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 82b052324d..7069c8fbcd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
@@ -333,9 +334,9 @@ public class CppHelper {
* <p>Emits a warning on the rule if there are identical linkstamp artifacts with different
* compilation contexts.
*/
- public static Map<Artifact, ImmutableList<Artifact>> resolveLinkstamps(RuleErrorConsumer listener,
- CcLinkParams linkParams) {
- Map<Artifact, ImmutableList<Artifact>> result = new LinkedHashMap<>();
+ public static Map<Artifact, NestedSet<Artifact>> resolveLinkstamps(
+ RuleErrorConsumer listener, CcLinkParams linkParams) {
+ Map<Artifact, NestedSet<Artifact>> result = new LinkedHashMap<>();
for (Linkstamp pair : linkParams.getLinkstamps()) {
Artifact artifact = pair.getArtifact();
if (result.containsKey(artifact)) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index 3c88c70546..3c49d0a2ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -1191,12 +1191,12 @@ public final class CppLinkAction extends AbstractAction implements ExecutionInfo
*
* <p>Link stamps are also automatically added to the inputs.
*/
- public Builder addLinkstamps(Map<Artifact, ImmutableList<Artifact>> linkstamps) {
+ public Builder addLinkstamps(Map<Artifact, NestedSet<Artifact>> linkstamps) {
this.linkstamps.addAll(linkstamps.keySet());
// Add inputs for linkstamping.
if (!linkstamps.isEmpty()) {
addTransitiveCompilationInputs(toolchain.getCompile());
- for (Map.Entry<Artifact, ImmutableList<Artifact>> entry : linkstamps.entrySet()) {
+ for (Map.Entry<Artifact, NestedSet<Artifact>> entry : linkstamps.entrySet()) {
addCompilationInputs(entry.getValue());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index 1a8290d28b..30f4d58962 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -128,7 +128,7 @@ public abstract class NativeDepsHelper {
List<String> linkopts = new ArrayList<>(extraLinkOpts);
linkopts.addAll(linkParams.flattenedLinkopts());
- Map<Artifact, ImmutableList<Artifact>> linkstamps =
+ Map<Artifact, NestedSet<Artifact>> linkstamps =
CppHelper.resolveLinkstamps(ruleContext, linkParams);
List<Artifact> buildInfoArtifacts = linkstamps.isEmpty()
? ImmutableList.<Artifact>of()