diff options
Diffstat (limited to 'src/main')
3 files changed, 28 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index 843b267242..0a67458846 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -665,11 +665,11 @@ public class BazelRuleClassProvider { // TODO(ulfjack): Depending on objcProtoAspect from here is a layering violation. ObjcProtoAspect objcProtoAspect = new ObjcProtoAspect(); builder.addNativeAspectClass(objcProtoAspect); + builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect)); + builder.addRuleDefinition(new AppleStaticLibraryRule(objcProtoAspect)); builder.addRuleDefinition(new ObjcProtoLibraryRule(objcProtoAspect)); - builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect)); builder.addRuleDefinition(new AppleCcToolchainRule()); - builder.addRuleDefinition(new AppleStaticLibraryRule()); builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(toolsRepository)); builder.addRuleDefinition(new AppleWatch1ExtensionRule()); builder.addRuleDefinition(new AppleWatch2ExtensionRule()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index da0408743f..70f0c7648f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; @@ -36,6 +37,7 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; + import java.util.List; import java.util.Set; @@ -79,6 +81,10 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { ImmutableListMultimap<BuildConfiguration, CcLinkParamsProvider> configToCcAvoidDepsMap = ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.SPLIT, CcLinkParamsProvider.class); + Iterable<ObjcProtoProvider> avoidProtoProviders = + ruleContext.getPrerequisites(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.TARGET, + ObjcProtoProvider.class); + NestedSet<Artifact> protosToAvoid = protoArtifactsToAvoid(avoidProtoProviders); Set<BuildConfiguration> childConfigurations = getChildConfigurations(ruleContext); @@ -95,7 +101,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { for (BuildConfiguration childConfig : childConfigurations) { ProtobufSupport protoSupport = - new ProtobufSupport(ruleContext, childConfig) + new ProtobufSupport(ruleContext, childConfig, protosToAvoid) .registerGenerationActions() .registerCompilationActions(); @@ -192,4 +198,15 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { return configToProvider.keySet(); } + + private static NestedSet<Artifact> protoArtifactsToAvoid( + Iterable<ObjcProtoProvider> avoidedProviders) { + NestedSetBuilder<Artifact> avoidArtifacts = NestedSetBuilder.stableOrder(); + for (ObjcProtoProvider avoidProvider : avoidedProviders) { + for (NestedSet<Artifact> avoidProviderOutputGroup : avoidProvider.getProtoGroups()) { + avoidArtifacts.addTransitive(avoidProviderOutputGroup); + } + } + return avoidArtifacts.build(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java index a0d0dc9b30..c837f1964c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java @@ -35,6 +35,12 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; */ public class AppleStaticLibraryRule implements RuleDefinition { + private final ObjcProtoAspect objcProtoAspect; + + public AppleStaticLibraryRule(ObjcProtoAspect objcProtoAspect) { + this.objcProtoAspect = objcProtoAspect; + } + /** * Template for the fat archive output (using Apple's "lipo" tool to combine .a archive files of * multiple architectures). @@ -80,7 +86,8 @@ public class AppleStaticLibraryRule implements RuleDefinition { .mandatoryNativeProviders( ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class)) .cfg(splitTransitionProvider) - .allowedFileTypes()) + .allowedFileTypes() + .aspect(objcProtoAspect)) /*<!-- #BLAZE_RULE(apple_static_library).IMPLICIT_OUTPUTS --> <ul> <li><code><var>name</var>_lipo.a</code>: a 'lipo'ed archive file. All transitive |