aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java9
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