aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar jcater <jcater@google.com>2018-04-27 12:53:19 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-27 12:54:25 -0700
commit758287532e338401146a8bb447161711b4b939c0 (patch)
treef96a237d35c61133b3f7636f231c66012a43bb93 /src/main
parent681f36959d9e12a9599f1e3150f232a114333770 (diff)
Ensure that all aspects which (even very indirectly) call
CppHelper.getToolchainFromPlatformConstraints declare that they require a cc toolchain. PiperOrigin-RevId: 194580065
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/proto/BazelCcProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java17
5 files changed, 27 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java
index 7ebd59a7ae..f14dd9b879 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java
@@ -13,8 +13,6 @@
// limitations under the License.
package com.google.devtools.build.lib.bazel.rules;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
@@ -35,8 +33,7 @@ public class J2ObjcRules implements RuleSet {
@Override
public void init(Builder builder) {
- String toolsRepository = checkNotNull(builder.getToolsRepository());
- J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(toolsRepository);
+ J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(builder);
builder.addNativeAspectClass(j2ObjcAspect);
builder.addRuleDefinition(new J2ObjcLibraryBaseRule());
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/proto/BazelCcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/proto/BazelCcProtoAspect.java
index d14d5386ad..0f7ced3fa5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/proto/BazelCcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/proto/BazelCcProtoAspect.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.bazel.rules.cpp.proto;
-import static com.google.devtools.build.lib.rules.cpp.CppRuleClasses.ccToolchainAttribute;
-
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.rules.cpp.AspectLegalCppSemantics;
import com.google.devtools.build.lib.rules.cpp.proto.CcProtoAspect;
@@ -27,6 +25,6 @@ import com.google.devtools.build.lib.rules.cpp.proto.CcProtoAspect;
*/
public class BazelCcProtoAspect extends CcProtoAspect {
public BazelCcProtoAspect(AspectLegalCppSemantics cppSemantics, RuleDefinitionEnvironment env) {
- super(cppSemantics, ccToolchainAttribute(env));
+ super(cppSemantics, env);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 1b537e433b..c299e6489b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -19,7 +19,9 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import com.google.common.collect.LinkedHashMultimap;
+import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.SetMultimap;
import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
@@ -494,6 +496,12 @@ public final class AspectDefinition {
}
/** Adds the given toolchains as requirements for this aspect. */
+ public Builder addRequiredToolchains(Label... toolchainLabels) {
+ Iterables.addAll(this.requiredToolchains, Lists.newArrayList(toolchainLabels));
+ return this;
+ }
+
+ /** Adds the given toolchains as requirements for this aspect. */
public Builder addRequiredToolchains(List<Label> requiredToolchains) {
this.requiredToolchains.addAll(requiredToolchains);
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index b1b466e2ec..850cc9d19a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredAspect;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.OutputGroupInfo;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
@@ -80,11 +81,12 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
private final CppSemantics cppSemantics;
private final LabelLateBoundDefault<?> ccToolchainAttrValue;
+ private final Label ccToolchainType;
- protected CcProtoAspect(
- AspectLegalCppSemantics cppSemantics, LabelLateBoundDefault<?> ccToolchainAttrValue) {
+ protected CcProtoAspect(AspectLegalCppSemantics cppSemantics, RuleDefinitionEnvironment env) {
this.cppSemantics = cppSemantics;
- this.ccToolchainAttrValue = ccToolchainAttrValue;
+ this.ccToolchainAttrValue = CppRuleClasses.ccToolchainAttribute(env);
+ this.ccToolchainType = CppRuleClasses.ccToolchainTypeAttribute(env);
}
@Override
@@ -113,6 +115,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
.propagateAlongAttribute("deps")
.requiresConfigurationFragments(CppConfiguration.class, ProtoConfiguration.class)
.requireProviders(ProtoSupportDataProvider.class)
+ .addRequiredToolchains(ccToolchainType)
.add(
attr(PROTO_TOOLCHAIN_ATTR, LABEL)
.mandatoryNativeProviders(ImmutableList.of(ProtoLangToolchainProvider.class))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index f9095a8d0e..4c4b926af5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredAspect;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
@@ -56,6 +57,7 @@ import com.google.devtools.build.lib.rules.apple.XcodeConfigRule;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
+import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
@@ -84,8 +86,6 @@ import java.util.stream.Collectors;
public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectFactory {
public static final String NAME = "J2ObjcAspect";
- private final String toolsRepository;
-
private static final ExtraCompileArgs EXTRA_COMPILE_ARGS = new ExtraCompileArgs(
"-fno-strict-overflow");
@@ -96,10 +96,6 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
(rule, attributes, protoConfig) -> protoConfig.protoToolchainForJ2objc());
}
- public J2ObjcAspect(String toolsRepository) {
- this.toolsRepository = toolsRepository;
- }
-
private static final ImmutableList<Attribute> JAVA_DEPENDENT_ATTRIBUTES =
ImmutableList.of(
new Attribute("$jre_lib", Mode.TARGET),
@@ -118,6 +114,14 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
null,
(rule, attributes, j2objcConfig) -> j2objcConfig.deadCodeReport());
+ private final String toolsRepository;
+ private final Label ccToolchainType;
+
+ public J2ObjcAspect(RuleDefinitionEnvironment env) {
+ this.toolsRepository = checkNotNull(env.getToolsRepository());
+ this.ccToolchainType = CppRuleClasses.ccToolchainTypeAttribute(env);
+ }
+
/** Returns whether this aspect should generate J2ObjC protos from this proto rule */
protected boolean shouldAttachToProtoRule(RuleContext ruleContext) {
return true;
@@ -144,6 +148,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
J2ObjcConfiguration.class,
ObjcConfiguration.class,
ProtoConfiguration.class)
+ .addRequiredToolchains(ccToolchainType)
.add(
attr("$j2objc", LABEL)
.cfg(HostTransition.INSTANCE)