From ced5ce4bf19e3839632a7d3f83eaf4b6d055c4fd Mon Sep 17 00:00:00 2001 From: Manuel Klimek Date: Tue, 24 May 2016 14:32:07 +0000 Subject: Make linkstamp info use NestedSet. Before this patch we would store expanded transitive include files in CcLinkParams. -- MOS_MIGRATED_REVID=123103815 --- .../build/lib/rules/cpp/CcLibraryHelper.java | 22 ++++++++++++---------- .../devtools/build/lib/rules/cpp/CcLinkParams.java | 12 +++++------- .../devtools/build/lib/rules/cpp/CppHelper.java | 7 ++++--- .../build/lib/rules/cpp/CppLinkAction.java | 4 ++-- .../lib/rules/nativedeps/NativeDepsHelper.java | 2 +- 5 files changed, 24 insertions(+), 23 deletions(-) (limited to 'src/main/java') 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 defines = new LinkedHashSet<>(); private final List implementationDeps = new ArrayList<>(); private final List interfaceDeps = new ArrayList<>(); - private final List linkstamps = new ArrayList<>(); + private final NestedSetBuilder linkstamps = NestedSetBuilder.stableOrder(); private final List prerequisites = new ArrayList<>(); private final List looseIncludeDirs = new ArrayList<>(); private final List systemIncludeDirs = new ArrayList<>(); @@ -601,8 +601,7 @@ public final class CcLibraryHelper { */ public CcLibraryHelper addLinkstamps(Iterable 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 linkstamps, CppCompilationContext context) { - ImmutableList declaredIncludeSrcs = - ImmutableList.copyOf(context.getDeclaredIncludeSrcs()); + public Builder addLinkstamps(NestedSet 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 declaredIncludeSrcs; + private final NestedSet declaredIncludeSrcs; - private Linkstamp(Artifact artifact, ImmutableList declaredIncludeSrcs) { + private Linkstamp(Artifact artifact, NestedSet 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 getDeclaredIncludeSrcs() { + public NestedSet 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 { *

Emits a warning on the rule if there are identical linkstamp artifacts with different * compilation contexts. */ - public static Map> resolveLinkstamps(RuleErrorConsumer listener, - CcLinkParams linkParams) { - Map> result = new LinkedHashMap<>(); + public static Map> resolveLinkstamps( + RuleErrorConsumer listener, CcLinkParams linkParams) { + Map> 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 * *

Link stamps are also automatically added to the inputs. */ - public Builder addLinkstamps(Map> linkstamps) { + public Builder addLinkstamps(Map> linkstamps) { this.linkstamps.addAll(linkstamps.keySet()); // Add inputs for linkstamping. if (!linkstamps.isEmpty()) { addTransitiveCompilationInputs(toolchain.getCompile()); - for (Map.Entry> entry : linkstamps.entrySet()) { + for (Map.Entry> 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 linkopts = new ArrayList<>(extraLinkOpts); linkopts.addAll(linkParams.flattenedLinkopts()); - Map> linkstamps = + Map> linkstamps = CppHelper.resolveLinkstamps(ruleContext, linkParams); List buildInfoArtifacts = linkstamps.isEmpty() ? ImmutableList.of() -- cgit v1.2.3