aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar lpino <lpino@google.com>2018-02-05 09:39:32 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-05 09:41:16 -0800
commit6d032941384ec7b7baf040e47680712e26fa3857 (patch)
tree34094a79b39cc6a0ed54c7d49d1fbf247abcdd33
parent73fcc7a72d70245280f63d171c654babf1cc579a (diff)
Simplify RuleClassProviders by making most RuleSets have their own class.
PiperOrigin-RevId: 184540561
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java308
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java80
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/GenericRules.java72
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java102
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/ObjcRules.java116
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRules.java52
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java9
10 files changed, 446 insertions, 303 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 20ce7e1d10..1671176a71 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
@@ -21,12 +21,8 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
-import com.google.devtools.build.lib.analysis.PlatformConfigurationLoader;
-import com.google.devtools.build.lib.analysis.PlatformOptions;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule;
import com.google.devtools.build.lib.bazel.rules.BazelToolchainType.BazelToolchainTypeRule;
-import com.google.devtools.build.lib.bazel.rules.CcToolchainType.CcToolchainTypeRule;
import com.google.devtools.build.lib.bazel.rules.android.AndroidNdkRepositoryRule;
import com.google.devtools.build.lib.bazel.rules.android.AndroidSdkRepositoryRule;
import com.google.devtools.build.lib.bazel.rules.android.BazelAarImportRule;
@@ -34,24 +30,9 @@ import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidBinaryRule;
import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidLibraryRule;
import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidLocalTestRule;
import com.google.devtools.build.lib.bazel.rules.android.BazelAndroidSemantics;
-import com.google.devtools.build.lib.bazel.rules.common.BazelFilegroupRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcBinaryRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcImportRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcIncLibraryRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcLibraryRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcTestRule;
-import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppSemantics;
import com.google.devtools.build.lib.bazel.rules.cpp.proto.BazelCcProtoAspect;
import com.google.devtools.build.lib.bazel.rules.genrule.BazelGenRuleRule;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaBinaryRule;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaBuildInfoFactory;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaImportRule;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaLibraryRule;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaPluginRule;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics;
-import com.google.devtools.build.lib.bazel.rules.java.BazelJavaTestRule;
import com.google.devtools.build.lib.bazel.rules.java.proto.BazelJavaLiteProtoAspect;
import com.google.devtools.build.lib.bazel.rules.java.proto.BazelJavaLiteProtoLibraryRule;
import com.google.devtools.build.lib.bazel.rules.java.proto.BazelJavaProtoAspect;
@@ -76,7 +57,6 @@ import com.google.devtools.build.lib.bazel.rules.workspace.NewGitRepositoryRule;
import com.google.devtools.build.lib.bazel.rules.workspace.NewHttpArchiveRule;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
-import com.google.devtools.build.lib.rules.Alias.AliasRule;
import com.google.devtools.build.lib.rules.android.AarImportBaseRule;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration;
import com.google.devtools.build.lib.rules.android.AndroidDeviceRule;
@@ -93,76 +73,17 @@ import com.google.devtools.build.lib.rules.android.AndroidSkylarkCommon;
import com.google.devtools.build.lib.rules.android.ApkInfo;
import com.google.devtools.build.lib.rules.android.DeviceBrokerInfo;
import com.google.devtools.build.lib.rules.android.DexArchiveAspect;
-import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
-import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
-import com.google.devtools.build.lib.rules.apple.AppleToolchain;
-import com.google.devtools.build.lib.rules.apple.XcodeConfigAlias.XcodeConfigAliasRule;
-import com.google.devtools.build.lib.rules.apple.XcodeConfigRule;
-import com.google.devtools.build.lib.rules.apple.XcodeVersionRule;
-import com.google.devtools.build.lib.rules.apple.cpp.AppleCcToolchainRule;
-import com.google.devtools.build.lib.rules.apple.swift.SwiftCommandLineOptions;
-import com.google.devtools.build.lib.rules.apple.swift.SwiftConfiguration;
import com.google.devtools.build.lib.rules.config.ConfigRules;
import com.google.devtools.build.lib.rules.core.CoreRules;
-import com.google.devtools.build.lib.rules.cpp.CcImportRule;
-import com.google.devtools.build.lib.rules.cpp.CcIncLibraryRule;
-import com.google.devtools.build.lib.rules.cpp.CcModule;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainAlias;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainRule;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainSuiteRule;
-import com.google.devtools.build.lib.rules.cpp.CppBuildInfo;
-import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader;
-import com.google.devtools.build.lib.rules.cpp.CppOptions;
-import com.google.devtools.build.lib.rules.cpp.CpuTransformer;
import com.google.devtools.build.lib.rules.cpp.proto.CcProtoAspect;
import com.google.devtools.build.lib.rules.cpp.proto.CcProtoLibraryRule;
import com.google.devtools.build.lib.rules.cpp.transitions.LipoDataTransitionRuleSet;
-import com.google.devtools.build.lib.rules.extra.ActionListenerRule;
-import com.google.devtools.build.lib.rules.extra.ExtraActionRule;
-import com.google.devtools.build.lib.rules.genquery.GenQueryRule;
import com.google.devtools.build.lib.rules.genrule.GenRuleBaseRule;
-import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
-import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
-import com.google.devtools.build.lib.rules.java.JavaInfo;
-import com.google.devtools.build.lib.rules.java.JavaOptions;
-import com.google.devtools.build.lib.rules.java.JavaPackageConfigurationRule;
-import com.google.devtools.build.lib.rules.java.JavaRuleClasses.IjarBaseRule;
-import com.google.devtools.build.lib.rules.java.JavaRuntimeAlias;
-import com.google.devtools.build.lib.rules.java.JavaRuntimeRule;
-import com.google.devtools.build.lib.rules.java.JavaRuntimeSuiteRule;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
-import com.google.devtools.build.lib.rules.java.JavaSkylarkCommon;
-import com.google.devtools.build.lib.rules.java.JavaToolchainAlias;
-import com.google.devtools.build.lib.rules.java.JavaToolchainRule;
-import com.google.devtools.build.lib.rules.java.ProguardLibraryRule;
-import com.google.devtools.build.lib.rules.java.proto.JavaProtoSkylarkCommon;
-import com.google.devtools.build.lib.rules.objc.AppleBinaryRule;
-import com.google.devtools.build.lib.rules.objc.AppleSkylarkCommon;
-import com.google.devtools.build.lib.rules.objc.AppleStaticLibraryRule;
-import com.google.devtools.build.lib.rules.objc.AppleStubBinaryRule;
-import com.google.devtools.build.lib.rules.objc.IosDeviceRule;
import com.google.devtools.build.lib.rules.objc.J2ObjcAspect;
-import com.google.devtools.build.lib.rules.objc.J2ObjcCommandLineOptions;
-import com.google.devtools.build.lib.rules.objc.J2ObjcConfiguration;
import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryBaseRule;
import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryRule;
-import com.google.devtools.build.lib.rules.objc.ObjcBuildInfoFactory;
-import com.google.devtools.build.lib.rules.objc.ObjcBundleLibraryRule;
-import com.google.devtools.build.lib.rules.objc.ObjcBundleRule;
-import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions;
-import com.google.devtools.build.lib.rules.objc.ObjcConfigurationLoader;
-import com.google.devtools.build.lib.rules.objc.ObjcFrameworkRule;
-import com.google.devtools.build.lib.rules.objc.ObjcImportRule;
-import com.google.devtools.build.lib.rules.objc.ObjcLibraryRule;
-import com.google.devtools.build.lib.rules.objc.ObjcProtoAspect;
-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;
+import com.google.devtools.build.lib.rules.platform.PlatformRules;
import com.google.devtools.build.lib.rules.proto.BazelProtoLibraryRule;
import com.google.devtools.build.lib.rules.proto.ProtoConfiguration;
import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainRule;
@@ -170,7 +91,6 @@ import com.google.devtools.build.lib.rules.python.PythonConfigurationLoader;
import com.google.devtools.build.lib.rules.python.PythonOptions;
import com.google.devtools.build.lib.rules.repository.CoreWorkspaceRules;
import com.google.devtools.build.lib.rules.repository.NewLocalRepositoryRule;
-import com.google.devtools.build.lib.rules.test.TestSuiteRule;
import com.google.devtools.build.lib.rules.test.TestingSupportRules;
import com.google.devtools.build.lib.util.ResourceFileLoader;
import java.io.IOException;
@@ -234,67 +154,6 @@ public class BazelRuleClassProvider {
}
};
- public static final RuleSet PLATFORM_RULES =
- new RuleSet() {
- @Override
- public void init(Builder builder) {
- builder.addConfigurationOptions(PlatformOptions.class);
- builder.addConfigurationFragment(new PlatformConfigurationLoader());
-
- builder.addRuleDefinition(new PlatformBaseRule());
- builder.addRuleDefinition(new ConstraintSettingRule());
- builder.addRuleDefinition(new ConstraintValueRule());
- builder.addRuleDefinition(new PlatformRule());
-
- builder.addRuleDefinition(new ToolchainRule());
-
- builder.addSkylarkAccessibleTopLevels("platform_common", new PlatformCommon());
- }
-
- @Override
- public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE);
- }
- };
-
- public static final RuleSet GENERIC_RULES =
- new RuleSet() {
- @Override
- public void init(Builder builder) {
- builder.addRuleDefinition(new EnvironmentRule());
-
- builder.addRuleDefinition(new AliasRule());
- builder.addRuleDefinition(new BazelFilegroupRule());
- builder.addRuleDefinition(new TestSuiteRule());
- builder.addRuleDefinition(new GenQueryRule());
-
- try {
- builder.addWorkspaceFilePrefix(
- ResourceFileLoader.loadResource(BazelRuleClassProvider.class, "tools.WORKSPACE")
- // Hackily select the java_toolchain based on the host JDK version. JDK 8 and
- // 9 host_javabases require different toolchains, e.g. to use --patch-module
- // instead of -Xbootclasspath/p:.
- .replace(
- "%java_toolchain%",
- isJdk8OrEarlier()
- ? "@bazel_tools//tools/jdk:toolchain_jdk8"
- : "@bazel_tools//tools/jdk:toolchain_jdk9"));
-
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- }
-
- @Override
- public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE);
- }
- };
-
- private static boolean isJdk8OrEarlier() {
- return Double.parseDouble(System.getProperty("java.class.version")) <= 52.0;
- }
-
public static final RuleSet PROTO_RULES =
new RuleSet() {
@Override
@@ -327,41 +186,6 @@ public class BazelRuleClassProvider {
}
};
- public static final RuleSet CPP_RULES =
- new RuleSet() {
- @Override
- public void init(Builder builder) {
- builder.addSkylarkAccessibleTopLevels("cc_common", CcModule.INSTANCE);
-
- builder.addConfig(CppOptions.class, new CppConfigurationLoader(CpuTransformer.IDENTITY));
- builder.addBuildInfoFactory(new CppBuildInfo());
-
- builder.addRuleDefinition(new CcToolchainRule());
- builder.addRuleDefinition(new CcToolchainSuiteRule());
- builder.addRuleDefinition(new CcToolchainAlias.CcToolchainAliasRule());
- builder.addRuleDefinition(new CcIncLibraryRule());
- builder.addRuleDefinition(new CcImportRule());
- builder.addRuleDefinition(new CcToolchainTypeRule());
- builder.addRuleDefinition(new BazelCppRuleClasses.CcLinkingRule());
- builder.addRuleDefinition(new BazelCppRuleClasses.CcDeclRule());
- builder.addRuleDefinition(new BazelCppRuleClasses.CcBaseRule());
- builder.addRuleDefinition(
- new BazelCppRuleClasses.CcRule(TOOLS_REPOSITORY + "//tools/def_parser:def_parser"));
- builder.addRuleDefinition(new BazelCppRuleClasses.CcBinaryBaseRule());
- builder.addRuleDefinition(new BazelCcBinaryRule());
- builder.addRuleDefinition(new BazelCcTestRule());
- builder.addRuleDefinition(new BazelCppRuleClasses.CcLibraryBaseRule());
- builder.addRuleDefinition(new BazelCcLibraryRule());
- builder.addRuleDefinition(new BazelCcIncLibraryRule());
- builder.addRuleDefinition(new BazelCcImportRule());
- }
-
- @Override
- public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, PLATFORM_RULES);
- }
- };
-
public static final RuleSet CPP_PROTO_RULES =
new RuleSet() {
@Override
@@ -373,56 +197,7 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES);
- }
- };
-
- public static final RuleSet JAVA_RULES =
- new RuleSet() {
- @Override
- public void init(Builder builder) {
- builder.addConfigurationOptions(JavaOptions.class);
- builder.addConfigurationFragment(new JavaConfigurationLoader());
-
- builder.addBuildInfoFactory(new BazelJavaBuildInfoFactory());
-
- builder.addRuleDefinition(new BazelJavaRuleClasses.BaseJavaBinaryRule());
- builder.addRuleDefinition(new IjarBaseRule());
- builder.addRuleDefinition(new BazelJavaRuleClasses.JavaBaseRule());
- builder.addRuleDefinition(new ProguardLibraryRule());
- builder.addRuleDefinition(new JavaImportBaseRule());
- builder.addRuleDefinition(new BazelJavaRuleClasses.JavaRule());
- builder.addRuleDefinition(new BazelJavaBinaryRule());
- builder.addRuleDefinition(new BazelJavaLibraryRule());
- builder.addRuleDefinition(new BazelJavaImportRule());
- builder.addRuleDefinition(new BazelJavaTestRule());
- builder.addRuleDefinition(new BazelJavaPluginRule());
- builder.addRuleDefinition(new JavaToolchainRule());
- builder.addRuleDefinition(new JavaPackageConfigurationRule());
- builder.addRuleDefinition(new JavaRuntimeRule());
- builder.addRuleDefinition(new JavaRuntimeSuiteRule());
- builder.addRuleDefinition(new JavaRuntimeAlias.JavaRuntimeAliasRule());
- builder.addRuleDefinition(new JavaToolchainAlias.JavaToolchainAliasRule());
-
- builder.addRuleDefinition(new ExtraActionRule());
- builder.addRuleDefinition(new ActionListenerRule());
-
- builder.addSkylarkAccessibleTopLevels("java_common",
- new JavaSkylarkCommon(BazelJavaSemantics.INSTANCE));
- builder.addSkylarkAccessibleTopLevels("JavaInfo", JavaInfo.PROVIDER);
- builder.addSkylarkAccessibleTopLevels("java_proto_common", JavaProtoSkylarkCommon.class);
-
- try {
- builder.addWorkspaceFilePrefix(
- ResourceFileLoader.loadResource(BazelJavaRuleClasses.class, "jdk.WORKSPACE"));
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- }
-
- @Override
- public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES);
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE);
}
};
@@ -442,7 +217,7 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, JAVA_RULES);
+ return ImmutableList.of(CoreRules.INSTANCE, JavaRules.INSTANCE);
}
};
@@ -495,7 +270,7 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES, JAVA_RULES);
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE, JavaRules.INSTANCE);
}
};
@@ -517,67 +292,7 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES);
- }
- };
-
- public static final RuleSet OBJC_RULES =
- new RuleSet() {
- @Override
- public void init(Builder builder) {
- String toolsRepository = checkNotNull(builder.getToolsRepository());
-
- // objc_proto_library should go into a separate RuleSet!
- // TODO(ulfjack): Depending on objcProtoAspect from here is a layering violation.
- ObjcProtoAspect objcProtoAspect = new ObjcProtoAspect();
-
- builder.addBuildInfoFactory(new ObjcBuildInfoFactory());
- builder.addSkylarkAccessibleTopLevels(
- "apple_common", new AppleSkylarkCommon(objcProtoAspect));
-
- builder.addConfig(ObjcCommandLineOptions.class, new ObjcConfigurationLoader());
- builder.addConfig(AppleCommandLineOptions.class, new AppleConfiguration.Loader());
- builder.addConfig(SwiftCommandLineOptions.class, new SwiftConfiguration.Loader());
- // j2objc shouldn't be here!
- builder.addConfig(J2ObjcCommandLineOptions.class, new J2ObjcConfiguration.Loader());
-
- builder.addNativeAspectClass(objcProtoAspect);
- builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect));
- builder.addRuleDefinition(new AppleStaticLibraryRule(objcProtoAspect));
- builder.addRuleDefinition(new AppleStubBinaryRule());
- builder.addRuleDefinition(new ObjcProtoLibraryRule(objcProtoAspect));
-
- builder.addRuleDefinition(new AppleCcToolchainRule());
- builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(toolsRepository));
- builder.addRuleDefinition(new IosDeviceRule());
- builder.addRuleDefinition(new ObjcBundleRule());
- builder.addRuleDefinition(new ObjcBundleLibraryRule());
- builder.addRuleDefinition(new ObjcFrameworkRule());
- builder.addRuleDefinition(new ObjcImportRule());
- builder.addRuleDefinition(new ObjcLibraryRule());
- builder.addRuleDefinition(new ObjcRuleClasses.CoptsRule());
- builder.addRuleDefinition(new ObjcRuleClasses.BundlingRule());
- builder.addRuleDefinition(new ObjcRuleClasses.DylibDependingRule(objcProtoAspect));
- builder.addRuleDefinition(new ObjcRuleClasses.CompilingRule());
- builder.addRuleDefinition(new ObjcRuleClasses.LinkingRule(objcProtoAspect));
- builder.addRuleDefinition(new ObjcRuleClasses.PlatformRule());
- builder.addRuleDefinition(new ObjcRuleClasses.MultiArchPlatformRule(objcProtoAspect));
- builder.addRuleDefinition(new ObjcRuleClasses.ResourcesRule());
- builder.addRuleDefinition(new ObjcRuleClasses.AlwaysLinkRule());
- builder.addRuleDefinition(new ObjcRuleClasses.SdkFrameworksDependerRule());
- builder.addRuleDefinition(new ObjcRuleClasses.CompileDependencyRule());
- builder.addRuleDefinition(new ObjcRuleClasses.ResourceToolsRule());
- builder.addRuleDefinition(new ObjcRuleClasses.XcrunRule());
- builder.addRuleDefinition(new ObjcRuleClasses.LibtoolRule());
- builder.addRuleDefinition(new ObjcRuleClasses.CrosstoolRule());
- builder.addRuleDefinition(new XcodeConfigRule());
- builder.addRuleDefinition(new XcodeConfigAliasRule());
- builder.addRuleDefinition(new XcodeVersionRule());
- }
-
- @Override
- public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES);
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE);
}
};
@@ -595,7 +310,8 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return ImmutableList.of(CoreRules.INSTANCE, CPP_RULES, JAVA_RULES, OBJC_RULES);
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE, JavaRules.INSTANCE,
+ ObjcRules.INSTANCE);
}
};
@@ -631,18 +347,18 @@ public class BazelRuleClassProvider {
BAZEL_SETUP,
CoreRules.INSTANCE,
CoreWorkspaceRules.INSTANCE,
- GENERIC_RULES,
+ GenericRules.INSTANCE,
ConfigRules.INSTANCE,
- PLATFORM_RULES,
+ PlatformRules.INSTANCE,
PROTO_RULES,
SH_RULES,
- CPP_RULES,
+ CcRules.INSTANCE,
CPP_PROTO_RULES,
- JAVA_RULES,
+ JavaRules.INSTANCE,
JAVA_PROTO_RULES,
ANDROID_RULES,
PYTHON_RULES,
- OBJC_RULES,
+ ObjcRules.INSTANCE,
J2OBJC_RULES,
TestingSupportRules.INSTANCE,
VARIOUS_WORKSPACE_RULES,
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java
new file mode 100644
index 0000000000..6d606d483a
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java
@@ -0,0 +1,80 @@
+// Copyright 2018 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.bazel.rules;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
+import com.google.devtools.build.lib.bazel.rules.CcToolchainType.CcToolchainTypeRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcBinaryRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcImportRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcIncLibraryRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcLibraryRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcTestRule;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.rules.cpp.CcImportRule;
+import com.google.devtools.build.lib.rules.cpp.CcIncLibraryRule;
+import com.google.devtools.build.lib.rules.cpp.CcModule;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainAlias.CcToolchainAliasRule;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainRule;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainSuiteRule;
+import com.google.devtools.build.lib.rules.cpp.CppBuildInfo;
+import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader;
+import com.google.devtools.build.lib.rules.cpp.CppOptions;
+import com.google.devtools.build.lib.rules.cpp.CpuTransformer;
+import com.google.devtools.build.lib.rules.platform.PlatformRules;
+
+/**
+ * Rules for C++ support in Bazel.
+ */
+public class CcRules implements RuleSet {
+ public static final CcRules INSTANCE = new CcRules();
+
+ private CcRules() {
+ // Use the static INSTANCE field instead.
+ }
+
+ @Override
+ public void init(Builder builder) {
+ builder.addSkylarkAccessibleTopLevels("cc_common", CcModule.INSTANCE);
+
+ builder.addConfig(CppOptions.class, new CppConfigurationLoader(CpuTransformer.IDENTITY));
+ builder.addBuildInfoFactory(new CppBuildInfo());
+
+ builder.addRuleDefinition(new CcToolchainRule());
+ builder.addRuleDefinition(new CcToolchainSuiteRule());
+ builder.addRuleDefinition(new CcToolchainAliasRule());
+ builder.addRuleDefinition(new CcIncLibraryRule());
+ builder.addRuleDefinition(new CcImportRule());
+ builder.addRuleDefinition(new CcToolchainTypeRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcLinkingRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcDeclRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcBaseRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcRule(
+ BazelRuleClassProvider.TOOLS_REPOSITORY + "//tools/def_parser:def_parser"));
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcBinaryBaseRule());
+ builder.addRuleDefinition(new BazelCcBinaryRule());
+ builder.addRuleDefinition(new BazelCcTestRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcLibraryBaseRule());
+ builder.addRuleDefinition(new BazelCcLibraryRule());
+ builder.addRuleDefinition(new BazelCcIncLibraryRule());
+ builder.addRuleDefinition(new BazelCcImportRule());
+ }
+
+ @Override
+ public ImmutableList<RuleSet> requires() {
+ return ImmutableList.of(CoreRules.INSTANCE, PlatformRules.INSTANCE);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/GenericRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/GenericRules.java
new file mode 100644
index 0000000000..321f4256f7
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/GenericRules.java
@@ -0,0 +1,72 @@
+// Copyright 2018 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.bazel.rules;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
+import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule;
+import com.google.devtools.build.lib.bazel.rules.common.BazelFilegroupRule;
+import com.google.devtools.build.lib.rules.Alias.AliasRule;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.rules.genquery.GenQueryRule;
+import com.google.devtools.build.lib.rules.test.TestSuiteRule;
+import com.google.devtools.build.lib.util.ResourceFileLoader;
+import java.io.IOException;
+
+/**
+ * A set of generic rules that provide miscellaneous capabilities to Bazel.
+ */
+public class GenericRules implements RuleSet {
+ public static final GenericRules INSTANCE = new GenericRules();
+
+ private GenericRules() {
+ // Use the static INSTANCE field instead.
+ }
+
+ @Override
+ public void init(Builder builder) {
+ builder.addRuleDefinition(new EnvironmentRule());
+
+ builder.addRuleDefinition(new AliasRule());
+ builder.addRuleDefinition(new BazelFilegroupRule());
+ builder.addRuleDefinition(new TestSuiteRule());
+ builder.addRuleDefinition(new GenQueryRule());
+
+ try {
+ builder.addWorkspaceFilePrefix(
+ ResourceFileLoader.loadResource(BazelRuleClassProvider.class, "tools.WORKSPACE")
+ // Hackily select the java_toolchain based on the host JDK version. JDK 8 and
+ // 9 host_javabases require different toolchains, e.g. to use --patch-module
+ // instead of -Xbootclasspath/p:.
+ .replace(
+ "%java_toolchain%",
+ isJdk8OrEarlier()
+ ? "@bazel_tools//tools/jdk:toolchain_jdk8"
+ : "@bazel_tools//tools/jdk:toolchain_jdk9"));
+
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public ImmutableList<RuleSet> requires() {
+ return ImmutableList.of(CoreRules.INSTANCE);
+ }
+
+ private static boolean isJdk8OrEarlier() {
+ return Double.parseDouble(System.getProperty("java.class.version")) <= 52.0;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
new file mode 100644
index 0000000000..aeecf0a21f
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
@@ -0,0 +1,102 @@
+// Copyright 2018 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.bazel.rules;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaBinaryRule;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaBuildInfoFactory;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaImportRule;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaLibraryRule;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaPluginRule;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics;
+import com.google.devtools.build.lib.bazel.rules.java.BazelJavaTestRule;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.rules.extra.ActionListenerRule;
+import com.google.devtools.build.lib.rules.extra.ExtraActionRule;
+import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
+import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
+import com.google.devtools.build.lib.rules.java.JavaInfo;
+import com.google.devtools.build.lib.rules.java.JavaOptions;
+import com.google.devtools.build.lib.rules.java.JavaPackageConfigurationRule;
+import com.google.devtools.build.lib.rules.java.JavaRuleClasses.IjarBaseRule;
+import com.google.devtools.build.lib.rules.java.JavaRuntimeAlias;
+import com.google.devtools.build.lib.rules.java.JavaRuntimeRule;
+import com.google.devtools.build.lib.rules.java.JavaRuntimeSuiteRule;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkCommon;
+import com.google.devtools.build.lib.rules.java.JavaToolchainAlias;
+import com.google.devtools.build.lib.rules.java.JavaToolchainRule;
+import com.google.devtools.build.lib.rules.java.ProguardLibraryRule;
+import com.google.devtools.build.lib.rules.java.proto.JavaProtoSkylarkCommon;
+import com.google.devtools.build.lib.util.ResourceFileLoader;
+import java.io.IOException;
+
+/**
+ * Rules for Java support in Bazel.
+ */
+public class JavaRules implements RuleSet {
+ public static final JavaRules INSTANCE = new JavaRules();
+
+ private JavaRules() {
+ // Use the static INSTANCE field instead.
+ }
+
+ @Override
+ public void init(Builder builder) {
+ builder.addConfigurationOptions(JavaOptions.class);
+ builder.addConfigurationFragment(new JavaConfigurationLoader());
+
+ builder.addBuildInfoFactory(new BazelJavaBuildInfoFactory());
+
+ builder.addRuleDefinition(new BazelJavaRuleClasses.BaseJavaBinaryRule());
+ builder.addRuleDefinition(new IjarBaseRule());
+ builder.addRuleDefinition(new BazelJavaRuleClasses.JavaBaseRule());
+ builder.addRuleDefinition(new ProguardLibraryRule());
+ builder.addRuleDefinition(new JavaImportBaseRule());
+ builder.addRuleDefinition(new BazelJavaRuleClasses.JavaRule());
+ builder.addRuleDefinition(new BazelJavaBinaryRule());
+ builder.addRuleDefinition(new BazelJavaLibraryRule());
+ builder.addRuleDefinition(new BazelJavaImportRule());
+ builder.addRuleDefinition(new BazelJavaTestRule());
+ builder.addRuleDefinition(new BazelJavaPluginRule());
+ builder.addRuleDefinition(new JavaToolchainRule());
+ builder.addRuleDefinition(new JavaPackageConfigurationRule());
+ builder.addRuleDefinition(new JavaRuntimeRule());
+ builder.addRuleDefinition(new JavaRuntimeSuiteRule());
+ builder.addRuleDefinition(new JavaRuntimeAlias.JavaRuntimeAliasRule());
+ builder.addRuleDefinition(new JavaToolchainAlias.JavaToolchainAliasRule());
+
+ builder.addRuleDefinition(new ExtraActionRule());
+ builder.addRuleDefinition(new ActionListenerRule());
+
+ builder.addSkylarkAccessibleTopLevels("java_common",
+ new JavaSkylarkCommon(BazelJavaSemantics.INSTANCE));
+ builder.addSkylarkAccessibleTopLevels("JavaInfo", JavaInfo.PROVIDER);
+ builder.addSkylarkAccessibleTopLevels("java_proto_common", JavaProtoSkylarkCommon.class);
+
+ try {
+ builder.addWorkspaceFilePrefix(
+ ResourceFileLoader.loadResource(BazelJavaRuleClasses.class, "jdk.WORKSPACE"));
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public ImmutableList<RuleSet> requires() {
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ObjcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ObjcRules.java
new file mode 100644
index 0000000000..505bbecb43
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ObjcRules.java
@@ -0,0 +1,116 @@
+// Copyright 2018 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.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;
+import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
+import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigAlias.XcodeConfigAliasRule;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigRule;
+import com.google.devtools.build.lib.rules.apple.XcodeVersionRule;
+import com.google.devtools.build.lib.rules.apple.cpp.AppleCcToolchainRule;
+import com.google.devtools.build.lib.rules.apple.swift.SwiftCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.swift.SwiftConfiguration;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.rules.objc.AppleBinaryRule;
+import com.google.devtools.build.lib.rules.objc.AppleSkylarkCommon;
+import com.google.devtools.build.lib.rules.objc.AppleStaticLibraryRule;
+import com.google.devtools.build.lib.rules.objc.AppleStubBinaryRule;
+import com.google.devtools.build.lib.rules.objc.IosDeviceRule;
+import com.google.devtools.build.lib.rules.objc.J2ObjcCommandLineOptions;
+import com.google.devtools.build.lib.rules.objc.J2ObjcConfiguration;
+import com.google.devtools.build.lib.rules.objc.ObjcBuildInfoFactory;
+import com.google.devtools.build.lib.rules.objc.ObjcBundleLibraryRule;
+import com.google.devtools.build.lib.rules.objc.ObjcBundleRule;
+import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions;
+import com.google.devtools.build.lib.rules.objc.ObjcConfigurationLoader;
+import com.google.devtools.build.lib.rules.objc.ObjcFrameworkRule;
+import com.google.devtools.build.lib.rules.objc.ObjcImportRule;
+import com.google.devtools.build.lib.rules.objc.ObjcLibraryRule;
+import com.google.devtools.build.lib.rules.objc.ObjcProtoAspect;
+import com.google.devtools.build.lib.rules.objc.ObjcProtoLibraryRule;
+import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses;
+
+/**
+ * Rules for Objective-C support in Bazel.
+ */
+public class ObjcRules implements RuleSet {
+ public static final ObjcRules INSTANCE = new ObjcRules();
+
+ protected ObjcRules() {
+ // Use the static INSTANCE field instead.
+ }
+
+ @Override
+ public void init(Builder builder) {
+ String toolsRepository = checkNotNull(builder.getToolsRepository());
+
+ // objc_proto_library should go into a separate RuleSet!
+ // TODO(ulfjack): Depending on objcProtoAspect from here is a layering violation.
+ ObjcProtoAspect objcProtoAspect = new ObjcProtoAspect();
+
+ builder.addBuildInfoFactory(new ObjcBuildInfoFactory());
+ builder.addSkylarkAccessibleTopLevels(
+ "apple_common", new AppleSkylarkCommon(objcProtoAspect));
+
+ builder.addConfig(ObjcCommandLineOptions.class, new ObjcConfigurationLoader());
+ builder.addConfig(AppleCommandLineOptions.class, new AppleConfiguration.Loader());
+ builder.addConfig(SwiftCommandLineOptions.class, new SwiftConfiguration.Loader());
+ // j2objc shouldn't be here!
+ builder.addConfig(J2ObjcCommandLineOptions.class, new J2ObjcConfiguration.Loader());
+
+ builder.addNativeAspectClass(objcProtoAspect);
+ builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect));
+ builder.addRuleDefinition(new AppleStaticLibraryRule(objcProtoAspect));
+ builder.addRuleDefinition(new AppleStubBinaryRule());
+ builder.addRuleDefinition(new ObjcProtoLibraryRule(objcProtoAspect));
+
+ builder.addRuleDefinition(new AppleCcToolchainRule());
+ builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(toolsRepository));
+ builder.addRuleDefinition(new IosDeviceRule());
+ builder.addRuleDefinition(new ObjcBundleRule());
+ builder.addRuleDefinition(new ObjcBundleLibraryRule());
+ builder.addRuleDefinition(new ObjcFrameworkRule());
+ builder.addRuleDefinition(new ObjcImportRule());
+ builder.addRuleDefinition(new ObjcLibraryRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CoptsRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.BundlingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.DylibDependingRule(objcProtoAspect));
+ builder.addRuleDefinition(new ObjcRuleClasses.CompilingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.LinkingRule(objcProtoAspect));
+ builder.addRuleDefinition(new ObjcRuleClasses.PlatformRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.MultiArchPlatformRule(objcProtoAspect));
+ builder.addRuleDefinition(new ObjcRuleClasses.ResourcesRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.AlwaysLinkRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.SdkFrameworksDependerRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CompileDependencyRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.ResourceToolsRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.XcrunRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.LibtoolRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CrosstoolRule());
+ builder.addRuleDefinition(new XcodeConfigRule());
+ builder.addRuleDefinition(new XcodeConfigAliasRule());
+ builder.addRuleDefinition(new XcodeVersionRule());
+ }
+
+ @Override
+ public ImmutableList<RuleSet> requires() {
+ return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD b/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
index 9908d64d28..c564fce0de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
@@ -15,6 +15,7 @@ java_library(
]),
deps = [
"//src/main/java/com/google/devtools/build/lib:build-base",
+ "//src/main/java/com/google/devtools/build/lib:core-rules",
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRules.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRules.java
new file mode 100644
index 0000000000..6eaa8859ed
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRules.java
@@ -0,0 +1,52 @@
+// Copyright 2018 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 com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
+import com.google.devtools.build.lib.analysis.PlatformConfigurationLoader;
+import com.google.devtools.build.lib.analysis.PlatformOptions;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+
+/**
+ * Rules for supporting different platforms in Bazel.
+ */
+public class PlatformRules implements RuleSet {
+ public static final PlatformRules INSTANCE = new PlatformRules();
+
+ protected PlatformRules() {
+ // Use the static INSTANCE field instead.
+ }
+
+ @Override
+ public void init(Builder builder) {
+ builder.addConfigurationOptions(PlatformOptions.class);
+ builder.addConfigurationFragment(new PlatformConfigurationLoader());
+
+ builder.addRuleDefinition(new PlatformBaseRule());
+ builder.addRuleDefinition(new ConstraintSettingRule());
+ builder.addRuleDefinition(new ConstraintValueRule());
+ builder.addRuleDefinition(new PlatformRule());
+
+ builder.addRuleDefinition(new ToolchainRule());
+
+ builder.addSkylarkAccessibleTopLevels("platform_common", new PlatformCommon());
+ }
+
+ @Override
+ public ImmutableList<RuleSet> requires() {
+ return ImmutableList.of(CoreRules.INSTANCE);
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
index ba69b6d721..502a048cbb 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
@@ -96,7 +96,7 @@ public class BazelRuleClassProviderTest {
@Test
public void genericConsistency() {
- checkModule(BazelRuleClassProvider.GENERIC_RULES);
+ checkModule(GenericRules.INSTANCE);
}
@Test
@@ -116,12 +116,12 @@ public class BazelRuleClassProviderTest {
@Test
public void cppConsistency() {
- checkModule(BazelRuleClassProvider.CPP_RULES);
+ checkModule(CcRules.INSTANCE);
}
@Test
public void javaConsistency() {
- checkModule(BazelRuleClassProvider.JAVA_RULES);
+ checkModule(JavaRules.INSTANCE);
}
@Test
@@ -136,7 +136,7 @@ public class BazelRuleClassProviderTest {
@Test
public void objcConsistency() {
- checkModule(BazelRuleClassProvider.OBJC_RULES);
+ checkModule(ObjcRules.INSTANCE);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 3aeeecd08a..73fb388424 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -30,6 +30,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
+ "//src/main/java/com/google/devtools/build/lib/rules/platform",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index 68edd89798..644761235e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -33,12 +33,15 @@ import com.google.devtools.build.lib.analysis.mock.BazelAnalysisMock;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider;
+import com.google.devtools.build.lib.bazel.rules.CcRules;
+import com.google.devtools.build.lib.bazel.rules.GenericRules;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.rules.ToolchainType;
import com.google.devtools.build.lib.rules.core.CoreRules;
import com.google.devtools.build.lib.rules.cpp.transitions.LipoDataTransitionRuleSet;
+import com.google.devtools.build.lib.rules.platform.PlatformRules;
import com.google.devtools.build.lib.rules.repository.CoreWorkspaceRules;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.OsUtils;
@@ -973,9 +976,9 @@ public class CcCommonTest extends BuildViewTestCase {
BazelRuleClassProvider.BAZEL_SETUP.init(builder);
CoreRules.INSTANCE.init(builder);
CoreWorkspaceRules.INSTANCE.init(builder);
- BazelRuleClassProvider.PLATFORM_RULES.init(builder);
- BazelRuleClassProvider.GENERIC_RULES.init(builder);
- BazelRuleClassProvider.CPP_RULES.init(builder);
+ PlatformRules.INSTANCE.init(builder);
+ GenericRules.INSTANCE.init(builder);
+ CcRules.INSTANCE.init(builder);
return builder.build();
}