diff options
author | 2017-04-04 20:14:45 +0000 | |
---|---|---|
committer | 2017-04-05 15:19:00 +0200 | |
commit | d6d27083b526a9288bd9bd1d35e0442b5c9f7ab6 (patch) | |
tree | fdd01e55ccb8d84a8bc958d2bae67564536626ec /src/main/java/com | |
parent | d705c98773afd3d08f7c04f71263b23f3dbc98f7 (diff) |
objc_proto_library does not pick up generated cc code in compile actions.
PiperOrigin-RevId: 152169986
Diffstat (limited to 'src/main/java/com')
6 files changed, 90 insertions, 17 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 83eb0ff321..3154b16a34 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 @@ -300,6 +300,7 @@ public final class CcLibraryHelper { private CcToolchainProvider ccToolchain; private final FdoSupportProvider fdoSupport; private String linkedArtifactNameSuffix = ""; + private boolean useDeps = true; /** * Creates a CcLibraryHelper. @@ -912,6 +913,15 @@ public final class CcLibraryHelper { } /** + * Causes actions generated from this CcLibraryHelper not to use build semantics (includes, + * headers, srcs) from dependencies. + */ + public CcLibraryHelper doNotUseDeps() { + this.useDeps = false; + return this; + } + + /** * Create the C++ compile and link actions, and the corresponding C++-related providers. * * @throws RuleErrorException @@ -1318,9 +1328,11 @@ public final class CcLibraryHelper { contextBuilder.addIncludeDir(publicHeaders.getVirtualIncludePath()); } - contextBuilder.mergeDependentContexts( - AnalysisUtils.getProviders(deps, CppCompilationContext.class)); - contextBuilder.mergeDependentContexts(depContexts); + if (useDeps) { + contextBuilder.mergeDependentContexts( + AnalysisUtils.getProviders(deps, CppCompilationContext.class)); + contextBuilder.mergeDependentContexts(depContexts); + } CppHelper.mergeToolchainDependentContext(ruleContext, ccToolchain, contextBuilder); // But defines come after those inherited from deps. diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index 6532052044..e999d9ee09 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -309,6 +309,7 @@ public abstract class CompilationSupport { protected final AppleConfiguration appleConfiguration; protected final CompilationAttributes attributes; protected final IntermediateArtifacts intermediateArtifacts; + protected final boolean useDeps; /** * Creates a new compilation support for the given rule and build configuration. @@ -327,13 +328,15 @@ public abstract class CompilationSupport { RuleContext ruleContext, BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, - CompilationAttributes compilationAttributes) { + CompilationAttributes compilationAttributes, + boolean useDeps) { this.ruleContext = ruleContext; this.buildConfiguration = buildConfiguration; this.objcConfiguration = buildConfiguration.getFragment(ObjcConfiguration.class); this.appleConfiguration = buildConfiguration.getFragment(AppleConfiguration.class); this.attributes = compilationAttributes; this.intermediateArtifacts = intermediateArtifacts; + this.useDeps = useDeps; } /** @@ -343,7 +346,18 @@ public abstract class CompilationSupport { * @param ruleContext the RuleContext for the calling target */ public static CompilationSupport create(RuleContext ruleContext) { - return createForConfig(ruleContext, ruleContext.getConfiguration()); + return createForConfig(ruleContext, ruleContext.getConfiguration(), /*useDeps=*/true); + } + + /** + * Returns a CompilationSupport instance, the type of which is determined from the + * --experimental_objc_crosstool flag. If this is an instance of + * {@link CrosstoolCompilationSupport}, dependencies will not be used. + */ + public static CompilationSupport createWithoutDeps(RuleContext ruleContext) { + CompilationSupport result = createForConfig(ruleContext, ruleContext.getConfiguration(), + /*useDeps=*/false); + return result; } /** @@ -356,10 +370,24 @@ public abstract class CompilationSupport { */ public static CompilationSupport createForConfig(RuleContext ruleContext, BuildConfiguration buildConfiguration) { + return createForConfig(ruleContext, buildConfiguration, /*useDeps=*/true); + } + + /** + * Returns a CompilationSupport instance, the type of which is determined from the + * --experimental_objc_crosstool flag. The result can be either {@link LegacyCompilationSupport} + * or {@link CrosstoolCompilationSupport}. + * + * @param ruleContext the RuleContext for the calling target + * @param buildConfiguration the configuration for the calling target + * @param useDeps true if deps should be used + */ + public static CompilationSupport createForConfig(RuleContext ruleContext, + BuildConfiguration buildConfiguration, boolean useDeps) { return createWithSelectedImplementation(ruleContext, buildConfiguration, ObjcRuleClasses.intermediateArtifacts(ruleContext, buildConfiguration), - CompilationAttributes.Builder.fromRuleContext(ruleContext).build()); + CompilationAttributes.Builder.fromRuleContext(ruleContext).build(), useDeps); } /** @@ -375,10 +403,11 @@ public abstract class CompilationSupport { return createWithSelectedImplementation(ruleContext, config, ObjcRuleClasses.intermediateArtifacts(ruleContext, config), - compilationAttributes); + compilationAttributes, + /*useDeps=*/true); } - /** + /** * Returns a CompilationSupport instance, the type of which is determined from the * --experimental_objc_crosstool flag. * @@ -392,12 +421,36 @@ public abstract class CompilationSupport { BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, CompilationAttributes compilationAttributes) { + return createWithSelectedImplementation( + ruleContext, + buildConfiguration, + intermediateArtifacts, + compilationAttributes, + /*useDeps=*/true); + } + + /** + * Returns a CompilationSupport instance, the type of which is determined from the + * --experimental_objc_crosstool flag. + * + * @param ruleContext the RuleContext for the calling target + * @param buildConfiguration the configuration for the calling target + * @param intermediateArtifacts IntermediateArtifacts for deriving artifact paths + * @param compilationAttributes attributes of the calling target + * @param useDeps true if deps should be used + */ + static CompilationSupport createWithSelectedImplementation( + RuleContext ruleContext, + BuildConfiguration buildConfiguration, + IntermediateArtifacts intermediateArtifacts, + CompilationAttributes compilationAttributes, + boolean useDeps) { return buildConfiguration.getFragment(ObjcConfiguration.class).getObjcCrosstoolMode() == ObjcCrosstoolMode.ALL ? new CrosstoolCompilationSupport(ruleContext, buildConfiguration, intermediateArtifacts, - compilationAttributes) + compilationAttributes, useDeps) : new LegacyCompilationSupport(ruleContext, buildConfiguration, intermediateArtifacts, - compilationAttributes); + compilationAttributes, useDeps); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index b2642f1e33..ca8bd2e869 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java @@ -123,7 +123,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { ruleContext, ruleContext.getConfiguration(), ObjcRuleClasses.intermediateArtifacts(ruleContext), - CompilationAttributes.Builder.fromRuleContext(ruleContext).build()); + CompilationAttributes.Builder.fromRuleContext(ruleContext).build(), + /*useDeps=*/true); } /** @@ -133,12 +134,14 @@ public class CrosstoolCompilationSupport extends CompilationSupport { * @param buildConfiguration the configuration for the calling target * @param intermediateArtifacts IntermediateArtifacts for deriving artifact paths * @param compilationAttributes attributes of the calling target + * @param useDeps true if deps should be used */ public CrosstoolCompilationSupport(RuleContext ruleContext, BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, - CompilationAttributes compilationAttributes) { - super(ruleContext, buildConfiguration, intermediateArtifacts, compilationAttributes); + CompilationAttributes compilationAttributes, + boolean useDeps) { + super(ruleContext, buildConfiguration, intermediateArtifacts, compilationAttributes, useDeps); } @Override @@ -388,6 +391,9 @@ public class CrosstoolCompilationSupport extends CompilationSupport { if (pchHdr != null) { result.addNonModuleMapHeader(pchHdr); } + if (!useDeps) { + result.doNotUseDeps(); + } return result; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java index 17bc6215ff..27b3b83491 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java @@ -143,8 +143,9 @@ public class LegacyCompilationSupport extends CompilationSupport { RuleContext ruleContext, BuildConfiguration buildConfiguration, IntermediateArtifacts intermediateArtifacts, - CompilationAttributes compilationAttributes) { - super(ruleContext, buildConfiguration, intermediateArtifacts, compilationAttributes); + CompilationAttributes compilationAttributes, + boolean useDeps) { + super(ruleContext, buildConfiguration, intermediateArtifacts, compilationAttributes, useDeps); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index 2505835104..422c07999f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java @@ -193,7 +193,8 @@ final class ProtobufSupport { ruleContext, buildConfiguration, intermediateArtifacts, - new CompilationAttributes.Builder().build()) + new CompilationAttributes.Builder().build(), + /*useDeps=*/false) .registerCompileAndArchiveActions(common, userHeaderSearchPaths); actionId++; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java index 0a19cb18ca..a9810c54ea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java @@ -97,7 +97,7 @@ final class ProtocolBuffers2Support { */ public ProtocolBuffers2Support registerCompilationActions() throws RuleErrorException, InterruptedException { - CompilationSupport.create(ruleContext) + CompilationSupport.createWithoutDeps(ruleContext) .registerCompileAndArchiveActions(getCommon()); return this; } |