aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java18
2 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index b8c0727bee..4df20e40ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -608,6 +608,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
cppConfiguration.isLipoContextCollector(),
cppConfiguration.processHeadersInDependencies(),
CppHelper.usePic(ruleContext, false));
+ NestedSet<Artifact> artifactsToForce = collectHiddenTopLevelArtifacts(ruleContext);
builder
.setFilesToBuild(filesToBuild)
.add(CppCompilationContext.class, cppCompilationContext)
@@ -630,11 +631,23 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
.addOutputGroup(
OutputGroupProvider.TEMP_FILES, getTemps(cppConfiguration, ccCompilationOutputs))
.addOutputGroup(OutputGroupProvider.FILES_TO_COMPILE, filesToCompile)
+ .addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, artifactsToForce)
.addOutputGroup(
OutputGroupProvider.COMPILATION_PREREQUISITES,
CcCommon.collectCompilationPrerequisites(ruleContext, cppCompilationContext));
}
+ private static NestedSet<Artifact> collectHiddenTopLevelArtifacts(RuleContext ruleContext) {
+ // Ensure that we build all the dependencies, otherwise users may get confused.
+ NestedSetBuilder<Artifact> artifactsToForceBuilder = NestedSetBuilder.stableOrder();
+ for (OutputGroupProvider dep :
+ ruleContext.getPrerequisites("deps", Mode.TARGET, OutputGroupProvider.class)) {
+ artifactsToForceBuilder.addTransitive(
+ dep.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL));
+ }
+ return artifactsToForceBuilder.build();
+ }
+
private static NestedSet<Artifact> collectExecutionDynamicLibraryArtifacts(
RuleContext ruleContext,
List<LibraryToLink> executionDynamicLibraries) {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 5b6f44362c..fdab980be9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -734,6 +734,24 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
}
@Test
+ public void testProcessHeadersInDependenciesOfBinaries() throws Exception {
+ AnalysisMock.get()
+ .ccSupport()
+ .setupCrosstool(mockToolsConfig, MockCcSupport.HEADER_PROCESSING_FEATURE_CONFIGURATION);
+ useConfiguration("--features=parse_headers", "--process_headers_in_dependencies");
+ ConfiguredTarget x =
+ scratchConfiguredTarget(
+ "foo",
+ "x",
+ "cc_binary(name = 'x', deps = [':y'])",
+ "cc_library(name = 'y', hdrs = ['y.h'])");
+ assertThat(
+ ActionsTestUtil.baseArtifactNames(
+ getOutputGroup(x, OutputGroupProvider.HIDDEN_TOP_LEVEL)))
+ .contains("y.h.processed");
+ }
+
+ @Test
public void testDoNotProcessHeadersInDependencies() throws Exception {
AnalysisMock.get()
.ccSupport()