aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-02-24 10:28:26 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-02-24 10:28:26 +0000
commit3f4d4e971e67dfd0956e408afb7b61352edb9827 (patch)
tree359e682d26faa268471b65947c47d647fcaafe75 /src/main/java/com/google/devtools/build/lib/rules/cpp
parentff031541d2e2da9175a3d8176aaa386d8f69c9b4 (diff)
Remove FilesToCompileProvider and CompilationPrerequisitesProvider and replace them with output groups.
-- MOS_MIGRATED_REVID=87038548
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java37
3 files changed, 33 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 295640f2f1..7cbe43e1d7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -22,13 +22,12 @@ import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
import com.google.devtools.build.lib.analysis.AnalysisUtils;
-import com.google.devtools.build.lib.analysis.CompilationPrerequisitesProvider;
import com.google.devtools.build.lib.analysis.FileProvider;
-import com.google.devtools.build.lib.analysis.FilesToCompileProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TempsProvider;
+import com.google.devtools.build.lib.analysis.TopLevelArtifactProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -594,7 +593,7 @@ public final class CcCommon {
/**
* Collects compilation prerequisite artifacts.
*/
- static CompilationPrerequisitesProvider collectCompilationPrerequisites(
+ static NestedSet<Artifact> collectCompilationPrerequisites(
RuleContext ruleContext, CppCompilationContext context) {
// TODO(bazel-team): Use context.getCompilationPrerequisites() instead.
NestedSetBuilder<Artifact> prerequisites = NestedSetBuilder.stableOrder();
@@ -605,7 +604,7 @@ public final class CcCommon {
}
}
prerequisites.addTransitive(context.getDeclaredIncludeSrcs());
- return new CompilationPrerequisitesProvider(prerequisites.build());
+ return prerequisites.build();
}
/**
@@ -711,13 +710,13 @@ public final class CcCommon {
collectTransitiveCcNativeLibraries(ruleContext, linkingOutputs.getDynamicLibraries())))
.add(InstrumentedFilesProvider.class, getInstrumentedFilesProvider(
instrumentedObjectFiles))
- .add(FilesToCompileProvider.class, new FilesToCompileProvider(
- getFilesToCompile(ccCompilationOutputs)))
- .add(CompilationPrerequisitesProvider.class,
- collectCompilationPrerequisites(ruleContext, cppCompilationContext))
.add(TempsProvider.class, new TempsProvider(getTemps(ccCompilationOutputs)))
.add(CppDebugFileProvider.class, new CppDebugFileProvider(
- dwoArtifacts.getDwoArtifacts(),
- dwoArtifacts.getPicDwoArtifacts()));
+ dwoArtifacts.getDwoArtifacts(), dwoArtifacts.getPicDwoArtifacts()))
+ .addOutputGroup(TopLevelArtifactProvider.FILES_TO_COMPILE,
+ NestedSetBuilder.wrap(Order.STABLE_ORDER, getFilesToCompile(ccCompilationOutputs)))
+ .addOutputGroup(TopLevelArtifactProvider.COMPILATION_PREREQUISITES,
+ collectCompilationPrerequisites(ruleContext, cppCompilationContext));
+
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index 81cd014650..d85a6fa091 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -259,6 +259,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory {
targetBuilder
.setFilesToBuild(filesToBuild)
.addProviders(info.getProviders())
+ .addOutputGroups(info.getOutputGroups())
.add(InstrumentedFilesProvider.class, instrumentedFilesProvider)
.add(RunfilesProvider.class, RunfilesProvider.withData(staticRunfiles, sharedRunfiles))
// Remove this?
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 cc36586067..4d7179816c 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
@@ -18,18 +18,18 @@ import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AnalysisUtils;
-import com.google.devtools.build.lib.analysis.CompilationPrerequisitesProvider;
import com.google.devtools.build.lib.analysis.FileProvider;
-import com.google.devtools.build.lib.analysis.FilesToCompileProvider;
import com.google.devtools.build.lib.analysis.LanguageDependentFragment;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.TempsProvider;
+import com.google.devtools.build.lib.analysis.TopLevelArtifactProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -48,12 +48,12 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
@@ -85,17 +85,21 @@ public final class CcLibraryHelper {
* context.
*/
public static final class Info {
- private final Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers;
+ private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>
+ providers;
+ private final ImmutableMap<String, NestedSet<Artifact>> outputGroups;
private final CcCompilationOutputs compilationOutputs;
private final CcLinkingOutputs linkingOutputs;
private final CcLinkingOutputs linkingOutputsExcludingPrecompiledLibraries;
private final CppCompilationContext context;
private Info(Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers,
+ Map<String, NestedSet<Artifact>> outputGroups,
CcCompilationOutputs compilationOutputs, CcLinkingOutputs linkingOutputs,
CcLinkingOutputs linkingOutputsExcludingPrecompiledLibraries,
CppCompilationContext context) {
- this.providers = Collections.unmodifiableMap(providers);
+ this.providers = ImmutableMap.copyOf(providers);
+ this.outputGroups = ImmutableMap.copyOf(outputGroups);
this.compilationOutputs = compilationOutputs;
this.linkingOutputs = linkingOutputs;
this.linkingOutputsExcludingPrecompiledLibraries =
@@ -107,6 +111,10 @@ public final class CcLibraryHelper {
return providers;
}
+ public ImmutableMap<String, NestedSet<Artifact>> getOutputGroups() {
+ return outputGroups;
+ }
+
public CcCompilationOutputs getCcCompilationOutputs() {
return compilationOutputs;
}
@@ -538,8 +546,8 @@ public final class CcLibraryHelper {
}
/**
- * Enables the output of {@link FilesToCompileProvider} and {@link
- * CompilationPrerequisitesProvider}.
+ * Enables the output of the {@code files_to_compile} and {@code compilation_prerequisites}
+ * output groups.
*/
// TODO(bazel-team): We probably need to adjust this for the multi-language rules.
public CcLibraryHelper enableCompileProviders() {
@@ -642,10 +650,10 @@ public final class CcLibraryHelper {
dwoArtifacts.getDwoArtifacts(), dwoArtifacts.getPicDwoArtifacts()));
providers.put(TransitiveLipoInfoProvider.class, collectTransitiveLipoInfo(ccOutputs));
providers.put(TempsProvider.class, getTemps(ccOutputs));
+ Map<String, NestedSet<Artifact>> outputGroups = new TreeMap<>();
if (emitCompileProviders) {
- providers.put(FilesToCompileProvider.class, new FilesToCompileProvider(
- getFilesToCompile(ccOutputs)));
- providers.put(CompilationPrerequisitesProvider.class,
+ outputGroups.put(TopLevelArtifactProvider.FILES_TO_COMPILE, getFilesToCompile(ccOutputs));
+ outputGroups.put(TopLevelArtifactProvider.COMPILATION_PREREQUISITES,
CcCommon.collectCompilationPrerequisites(ruleContext, cppCompilationContext));
}
@@ -666,7 +674,7 @@ public final class CcLibraryHelper {
providers.put(CcLinkParamsProvider.class, new CcLinkParamsProvider(
createCcLinkParamsStore(ccLinkingOutputs, cppCompilationContext, forcePic)));
}
- return new Info(providers, ccOutputs, ccLinkingOutputs, originalLinkingOutputs,
+ return new Info(providers, outputGroups, ccOutputs, ccLinkingOutputs, originalLinkingOutputs,
cppCompilationContext);
}
@@ -868,9 +876,10 @@ public final class CcLibraryHelper {
: new TempsProvider(compilationOutputs.getTemps());
}
- private ImmutableList<Artifact> getFilesToCompile(CcCompilationOutputs compilationOutputs) {
+ private NestedSet<Artifact> getFilesToCompile(CcCompilationOutputs compilationOutputs) {
return ruleContext.getFragment(CppConfiguration.class).isLipoContextCollector()
- ? ImmutableList.<Artifact>of()
- : compilationOutputs.getObjectFiles(CppHelper.usePic(ruleContext, false));
+ ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
+ : NestedSetBuilder.<Artifact>wrap(Order.STABLE_ORDER,
+ compilationOutputs.getObjectFiles(CppHelper.usePic(ruleContext, false)));
}
}