aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar juliexxia <juliexxia@google.com>2017-09-14 17:20:48 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-14 18:48:47 +0200
commit84cdaa377d8d52d447ee4510c6636327751beb03 (patch)
tree74af6fa0fcb51c1ca527bd2cb05aa9c81add502f /src/main/java/com/google/devtools/build
parenta8c0c8dfad38437bc617b4b66d271bc0beb1b7c1 (diff)
Implement PlatformBaseRule which describes the common settings for all platform-related rules
PiperOrigin-RevId: 168690846
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSettingRule.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java56
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java11
5 files changed, 62 insertions, 38 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 d6e4f3eafb..5d9e7b0d9d 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
@@ -154,6 +154,7 @@ import com.google.devtools.build.lib.rules.objc.ObjcProtoLibraryRule;
import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses;
import com.google.devtools.build.lib.rules.platform.ConstraintSettingRule;
import com.google.devtools.build.lib.rules.platform.ConstraintValueRule;
+import com.google.devtools.build.lib.rules.platform.PlatformBaseRule;
import com.google.devtools.build.lib.rules.platform.PlatformCommon;
import com.google.devtools.build.lib.rules.platform.PlatformRule;
import com.google.devtools.build.lib.rules.platform.ToolchainRule;
@@ -233,6 +234,7 @@ public class BazelRuleClassProvider {
builder.addConfigurationOptions(PlatformOptions.class);
builder.addConfigurationFragment(new PlatformConfigurationLoader());
+ builder.addRuleDefinition(new PlatformBaseRule());
builder.addRuleDefinition(new ConstraintSettingRule());
builder.addRuleDefinition(new ConstraintValueRule());
builder.addRuleDefinition(new PlatformRule());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSettingRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSettingRule.java
index 6b239834ac..da849f05e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSettingRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSettingRule.java
@@ -14,14 +14,9 @@
package com.google.devtools.build.lib.rules.platform;
-import static com.google.devtools.build.lib.packages.Attribute.attr;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
-import com.google.devtools.build.lib.syntax.Type;
/** Rule definition for {@link ConstraintSetting}. */
public class ConstraintSettingRule implements RuleDefinition {
@@ -29,23 +24,14 @@ public class ConstraintSettingRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
- return builder
- .override(
- attr("tags", Type.STRING_LIST)
- // No need to show up in ":all", etc. target patterns.
- .value(ImmutableList.of("manual"))
- .nonconfigurable("low-level attribute, used in platform configuration"))
- .removeAttribute("deps")
- .removeAttribute("data")
- .exemptFromConstraintChecking("this rule *defines* a constraint")
- .build();
+ return builder.build();
}
@Override
public RuleDefinition.Metadata getMetadata() {
return RuleDefinition.Metadata.builder()
.name(RULE_NAME)
- .ancestors(BaseRuleClasses.RuleBase.class)
+ .ancestors(PlatformBaseRule.class)
.factoryClass(ConstraintSetting.class)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
index b2ebaa0457..40adb352f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
@@ -17,13 +17,11 @@ package com.google.devtools.build.lib.rules.platform;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.RuleClass;
-import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileTypeSet;
/** Rule definition for {@link ConstraintValue}. */
@@ -34,12 +32,6 @@ public class ConstraintValueRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
return builder
- .override(
- attr("tags", Type.STRING_LIST)
- // No need to show up in ":all", etc. target patterns.
- .value(ImmutableList.of("manual"))
- .nonconfigurable("low-level attribute, used in platform configuration"))
-
/* <!-- #BLAZE_RULE(constraint_value).ATTRIBUTE(constraint_setting) -->
The constraint_setting rule this value is applied to.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
@@ -50,9 +42,6 @@ public class ConstraintValueRule implements RuleDefinition {
.allowedFileTypes(FileTypeSet.NO_FILE)
.mandatoryProviders(
ImmutableList.of(ConstraintSettingInfo.PROVIDER.id())))
- .removeAttribute("deps")
- .removeAttribute("data")
- .exemptFromConstraintChecking("this rule *defines* a constraint")
.build();
}
@@ -60,7 +49,7 @@ public class ConstraintValueRule implements RuleDefinition {
public Metadata getMetadata() {
return Metadata.builder()
.name(RULE_NAME)
- .ancestors(BaseRuleClasses.RuleBase.class)
+ .ancestors(PlatformBaseRule.class)
.factoryClass(ConstraintValue.class)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java
new file mode 100644
index 0000000000..b11fb911a8
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java
@@ -0,0 +1,56 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.rules.platform;
+
+import static com.google.devtools.build.lib.packages.Attribute.attr;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.BaseRuleClasses;
+import com.google.devtools.build.lib.analysis.RuleDefinition;
+import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.packages.RuleClass;
+import com.google.devtools.build.lib.syntax.Type;
+
+/**
+ * Describes the common settings for all platform-related rules.
+ */
+public class PlatformBaseRule implements RuleDefinition{
+
+ private static final String RULE_NAME = "$platform_base_rule";
+
+ @Override
+ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
+ return builder
+ .override(
+ attr("tags", Type.STRING_LIST)
+ // No need to show up in ":all", etc. target patterns.
+ .value(ImmutableList.of("manual"))
+ .nonconfigurable("low-level attribute, used in platform configuration"))
+ .exemptFromConstraintChecking("this rule helps *define* a constraint")
+ .removeAttribute("deps")
+ .removeAttribute("data")
+ .build();
+ }
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(RULE_NAME)
+ .type(RuleClass.Builder.RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
index aef9d42377..74e824f9f6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.rules.platform;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
@@ -41,11 +40,6 @@ public class PlatformRule implements RuleDefinition {
/* <!-- #BLAZE_RULE(platform).NAME -->
<!-- #END_BLAZE_RULE.NAME --> */
return builder
- .override(
- attr("tags", Type.STRING_LIST)
- // No need to show up in ":all", etc. target patterns.
- .value(ImmutableList.of("manual"))
- .nonconfigurable("low-level attribute, used in platform configuration"))
/* <!-- #BLAZE_RULE(platform).ATTRIBUTE(constraint_values) -->
The constraint_values that define this platform.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
@@ -85,9 +79,6 @@ public class PlatformRule implements RuleDefinition {
.allowedFileTypes(FileTypeSet.NO_FILE)
.mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id()))
.undocumented("Should only be used by internal packages."))
- .removeAttribute("deps")
- .removeAttribute("data")
- .exemptFromConstraintChecking("this rule is part of constraint definition")
.build();
}
@@ -95,7 +86,7 @@ public class PlatformRule implements RuleDefinition {
public Metadata getMetadata() {
return Metadata.builder()
.name(RULE_NAME)
- .ancestors(BaseRuleClasses.RuleBase.class)
+ .ancestors(PlatformBaseRule.class)
.factoryClass(Platform.class)
.build();
}