Add --incompatible_use_platforms_repo_for_constraints

This change adds an incompatible flag to disable constrains bundled with Bazel
in @bazel_tools.

Incompatible change issue:
https://github.com/bazelbuild/bazel/issues/8622

Tracking issue:
https://github.com/bazelbuild/bazel/issues/6516

RELNOTES: Incompatible change `--incompatible_use_platforms_repo_for_constraints` has been added. See https://github.com/bazelbuild/bazel/issues/8622 for details.

Closes #8625.

This is encore of https://github.com/bazelbuild/bazel/commit/332379ad6f8c49b0e087b504d73d3483c529e399. Previous implementation failed with dependency cycle with the configuration. In this attempt I don't use selects, but I've put the incompatible flag checking logic directly into the alias rule. Not nice, but get's thing done.

RELNOTES:
PiperOrigin-RevId: 254357477
diff --git a/site/docs/platforms.md b/site/docs/platforms.md
index 4c3079e..777a6eb 100644
--- a/site/docs/platforms.md
+++ b/site/docs/platforms.md
@@ -88,35 +88,36 @@
 platform(
     name = "linux_x86",
     constraint_values = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
         ":glibc_2_25",
     ],
 )
 ```
 
 Note that it is an error for a platform to specify more than one value of the
-same constraint setting, such as `@bazel_tools//platforms:x86_64` and
-`@bazel_tools//platforms:arm` for `@bazel_tools//platforms:cpu`.
+same constraint setting, such as `@platforms//cpu:x86_64` and
+`@platforms//cpu:arm` for `@platforms//cpu:cpu`.
 
 ## Built-in constraints and platforms
 
 Bazel ships with constraint definitions for the most popular CPU architectures
-and operating systems. These are all located in the package
-`@bazel_tools//platforms`:
+and operating systems. These are all located in the repository
+`@platforms`. This repository is developed at
+[github.com/bazelbuild/platforms](https://github.com/bazelbuild/platforms):
 
-*  `:cpu` for the CPU architecture, with values `:x86_32`, `:x86_64`, `:ppc`,
-   `:arm`, `:s390x`
-*  `:os` for the operating system, with values `:android`, `:freebsd`, `:ios`,
-   `:linux`, `:osx`, `:windows`
+*  `//cpu:cpu` for the CPU architecture, with values `//cpu:x86_32`,
+   `//cpu:x86_64`, `//cpu:ppc`, `//cpu:arm`, `//cpu:s390x`
+*  `//os:os` for the operating system, with values `//os:android`,
+   `//os:freebsd`, `//os:ios`, `//os:linux`, `//os:osx`, `//os:windows`
 
 There are also the following special platform definitions:
 
-*  `:host_platform` - represents the CPU and operating system for the host
-   environment
+*  `@bazel_tools//platforms:host_platform` - represents the CPU and operating
+   system for the host environment
 
-*  `:target_platform` - represents the CPU and operating system for the target
-   environment
+*  `@bazel_tools//platforms:target_platform` - represents the CPU and operating
+   system for the target environment
 
 The CPU values used by these two platforms can be specified with the
 `--host_cpu` and `--cpu` flags.
diff --git a/site/docs/toolchains.md b/site/docs/toolchains.md
index 998f623..747af15 100644
--- a/site/docs/toolchains.md
+++ b/site/docs/toolchains.md
@@ -104,14 +104,14 @@
 config_setting(
     name = "on_linux",
     constraint_values = [
-        "@bazel_tools//platforms:linux",
+        "@platforms//os:linux",
     ],
 )
 
 config_setting(
     name = "on_windows",
     constraint_values = [
-        "@bazel_tools//platforms:windows",
+        "@platforms//os:windows",
     ],
 )
 
@@ -276,12 +276,12 @@
 toolchain(
     name = "barc_linux_toolchain",
     exec_compatible_with = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
     ],
     toolchain = ":barc_linux",
     toolchain_type = ":toolchain_type",
@@ -290,12 +290,12 @@
 toolchain(
     name = "barc_windows_toolchain",
     exec_compatible_with = [
-        "@bazel_tools//platforms:windows",
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//os:windows",
+        "@platforms//cpu:x86_64",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:windows",
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//os:windows",
+        "@platforms//cpu:x86_64",
     ],
     toolchain = ":barc_windows",
     toolchain_type = ":toolchain_type",
@@ -336,7 +336,7 @@
 platform(
     name = "my_target_platform",
     constraint_values = [
-        "@bazel_tools//platforms:linux",
+        "@platforms//os:linux",
     ],
 )
 
@@ -351,7 +351,7 @@
 ```
 
 Bazel will see that `//my_pkg:my_bar_binary` is being built with a platform that
-has `@bazel_tools//platforms:linux` and therefore resolve the
+has `@platforms//os:linux` and therefore resolve the
 `//bar_tools:toolchain_type` reference to `//bar_tools:barc_linux_toolchain`.
 This will end up building `//bar_tools:barc_linux` but not
 `//barc_tools:barc_windows`.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
index c03f9ed..61b9d94 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
@@ -69,6 +69,18 @@
   public boolean mergeGenfilesDirectory;
 
   @Option(
+      name = "incompatible_use_platforms_repo_for_constraints",
+      defaultValue = "false",
+      documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS,
+      effectTags = {OptionEffectTag.AFFECTS_OUTPUTS},
+      metadataTags = {
+        OptionMetadataTag.INCOMPATIBLE_CHANGE,
+        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+      },
+      help = "If true, constraint settings from @bazel_tools are removed.")
+  public boolean usePlatformsRepoForConstraints;
+
+  @Option(
       name = "define",
       converter = Converters.AssignmentConverter.class,
       defaultValue = "",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
index 1209c5d..3537991 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
@@ -81,17 +81,17 @@
   static String cpuToConstraint(CPU cpu) {
     switch (cpu) {
       case X86_32:
-        return "@bazel_tools//platforms:x86_32";
+        return "@platforms//cpu:x86_32";
       case X86_64:
-        return "@bazel_tools//platforms:x86_64";
+        return "@platforms//cpu:x86_64";
       case PPC:
-        return "@bazel_tools//platforms:ppc";
+        return "@platforms//cpu:ppc";
       case ARM:
-        return "@bazel_tools//platforms:arm";
+        return "@platforms//cpu:arm";
       case AARCH64:
-        return "@bazel_tools//platforms:aarch64";
+        return "@platforms//cpu:aarch64";
       case S390X:
-        return "@bazel_tools//platforms:s390x";
+        return "@platforms//cpu:s390x";
       default:
         // Unknown, so skip it.
         return null;
@@ -102,13 +102,13 @@
   static String osToConstraint(OS os) {
     switch (os) {
       case DARWIN:
-        return "@bazel_tools//platforms:osx";
+        return "@platforms//os:osx";
       case FREEBSD:
-        return "@bazel_tools//platforms:freebsd";
+        return "@platforms//os:freebsd";
       case LINUX:
-        return "@bazel_tools//platforms:linux";
+        return "@platforms//os:linux";
       case WINDOWS:
-        return "@bazel_tools//platforms:windows";
+        return "@platforms//os:windows";
       default:
         // Unknown, so skip it.
         return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/Alias.java b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
index 5348588..8570039 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/Alias.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
@@ -28,6 +28,7 @@
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.analysis.VisibilityProvider;
 import com.google.devtools.build.lib.analysis.VisibilityProviderImpl;
+import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.util.FileTypeSet;
@@ -44,6 +45,22 @@
   public ConfiguredTarget create(RuleContext ruleContext)
       throws InterruptedException, RuleErrorException, ActionConflictException {
     ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite("actual", Mode.TARGET);
+
+    // TODO(b/129045294): Remove once the flag is flipped.
+    if (ruleContext.getLabel().getCanonicalForm().startsWith("@bazel_tools//platforms")
+        && ruleContext
+            .getConfiguration()
+            .getOptions()
+            .get(CoreOptions.class)
+            .usePlatformsRepoForConstraints) {
+      throw ruleContext.throwWithRuleError(
+          "Constraints from @bazel_tools//platforms have been "
+              + "removed. Please use constraints from @platforms repository embedded in "
+              + "Bazel, or preferably declare dependency on "
+              + "https://github.com/bazelbuild/platforms. See "
+              + "https://github.com/bazelbuild/bazel/issues/8622 for details.");
+    }
+
     return new AliasConfiguredTarget(
         ruleContext,
         actual,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
index 7522324..25aedb6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
@@ -327,7 +327,7 @@
   config_setting(
       name = "64bit_glibc_2_25",
       constraint_values = [
-          "@bazel_tools//platforms:x86_64",
+          "@platforms//cpu:x86_64",
           "//example:glibc_2_25",
       ]
   )
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 511619a..e9416be 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
@@ -67,7 +67,7 @@
 <p>Each <code>constraint_setting</code> has an extensible set of associated
 <code>constraint_value</code>s. Usually these are defined in the same package, but sometimes a
 different package will introduce new values for an existing setting. For instance, the predefined
-setting <code>@bazel_tools//platforms:cpu</code> can be extended with a custom value in order to
+setting <code>@platforms//cpu:cpu</code> can be extended with a custom value in order to
 define a platform targeting an obscure cpu architecture.
 
 <!-- #END_BLAZE_RULE -->*/
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 43ccf34..2ca844a 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
@@ -67,7 +67,7 @@
 <pre class="code">
 constraint_value(
     name = "mips",
-    constraint_setting = "@bazel_tools//platforms:cpu",
+    constraint_setting = "@platforms//cpu:cpu",
 )
 </pre>
 
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 c54d05a..bafdb7b 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
@@ -49,7 +49,7 @@
 
         <p>Each <code>constraint_value</code> in this list must be for a different
         <code>constraint_setting</code>. For example, you cannot define a platform that requires the
-        cpu architecture to be both <code>@bazel_tools//platforms:x86_64</code> and
+        cpu architecture to be both <code>@platforms//cpu:x86_64</code> and
         <code>@bazel_tools//platforms:arm</code>.
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(
@@ -130,8 +130,8 @@
 platform(
     name = "linux_arm",
     constraint_values = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:arm",
+        "@platforms//os:linux",
+        "@platforms//cpu:arm",
     ],
 )
 </pre>
@@ -177,8 +177,8 @@
 platform(
     name = "parent",
     constraint_values = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:arm",
+        "@platforms//os:linux",
+        "@platforms//cpu:arm",
     ],
     remote_execution_properties = """
       parent properties
@@ -188,7 +188,7 @@
     name = "child_a",
     parents = [":parent"],
     constraint_values = [
-        "@bazel_tools//platforms:x86_64",
+        "@platforms//cpu:x86_64",
     ],
     remote_execution_properties = """
       child a properties
@@ -210,8 +210,8 @@
 
   <ul>
     <li>
-      "child_a" has the constraint values "@bazel_tools//platforms:linux" (inherited from the
-      parent) and "@bazel_tools//platforms:x86_64" (set directly on the platform). It has the
+      "child_a" has the constraint values "@platforms//os:linux" (inherited from the
+      parent) and "@platforms//cpu:x86_64" (set directly on the platform). It has the
       "remote_execution_properties" set to "child a properties"
     </li>
     <li>
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index edf34a1..6240424 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -67,12 +67,14 @@
   @Override
   public List<String> getWorkspaceContents(MockToolsConfig config) {
     String bazelToolWorkspace = config.getPath("/bazel_tools_workspace").getPathString();
+    String bazelPlatformsWorkspace = config.getPath("/platforms").getPathString();
     String localConfigPlatformWorkspace =
         config.getPath("/local_config_platform_workspace").getPathString();
 
     return new ArrayList<>(
         ImmutableList.of(
             "local_repository(name = 'bazel_tools', path = '" + bazelToolWorkspace + "')",
+            "local_repository(name = 'platforms', path = '" + bazelPlatformsWorkspace + "')",
             "local_repository(name = 'local_config_xcode', path = '/local_config_xcode')",
             "local_repository(name = 'com_google_protobuf', path = '/protobuf')",
             "bind(name = 'android/sdk', actual='@bazel_tools//tools/android:sdk')",
@@ -99,6 +101,25 @@
     config.create("/local_config_xcode/WORKSPACE");
     config.create("/protobuf/WORKSPACE");
     config.overwrite("WORKSPACE", workspaceContents.toArray(new String[workspaceContents.size()]));
+    config.create("/platforms/WORKSPACE", "workspace(name = 'platforms')");
+    config.create("/platforms/BUILD");
+    config.create(
+        "/platforms/cpu/BUILD",
+        "constraint_setting(name = 'cpu')",
+        "constraint_value(name = 'x86_32', constraint_setting = ':cpu')",
+        "constraint_value(name = 'x86_64', constraint_setting = ':cpu')",
+        "constraint_value(name = 'ppc', constraint_setting = ':cpu')",
+        "constraint_value(name = 'arm', constraint_setting = ':cpu')",
+        "constraint_value(name = 'aarch64', constraint_setting = ':cpu')",
+        "constraint_value(name = 's390x', constraint_setting = ':cpu')");
+
+    config.create(
+        "/platforms/os/BUILD",
+        "constraint_setting(name = 'os')",
+        "constraint_value(name = 'linux', constraint_setting = ':os')",
+        "constraint_value(name = 'osx', constraint_setting = ':os')",
+        "constraint_value(name = 'freebsd', constraint_setting = ':os')",
+        "constraint_value(name = 'windows', constraint_setting = ':os')");
     config.create("/bazel_tools_workspace/WORKSPACE", "workspace(name = 'bazel_tools')");
     Runfiles runfiles = Runfiles.create();
     for (String filename :
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
index 663d62d..bc509e0 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
@@ -45,12 +45,12 @@
     public static Collection createInputValues() {
       return ImmutableList.of(
           // CPU value tests.
-          new Object[] {CPU.X86_64, "@bazel_tools//platforms:x86_64"},
-          new Object[] {CPU.X86_32, "@bazel_tools//platforms:x86_32"},
-          new Object[] {CPU.PPC, "@bazel_tools//platforms:ppc"},
-          new Object[] {CPU.ARM, "@bazel_tools//platforms:arm"},
-          new Object[] {CPU.AARCH64, "@bazel_tools//platforms:aarch64"},
-          new Object[] {CPU.S390X, "@bazel_tools//platforms:s390x"});
+          new Object[] {CPU.X86_64, "@platforms//cpu:x86_64"},
+          new Object[] {CPU.X86_32, "@platforms//cpu:x86_32"},
+          new Object[] {CPU.PPC, "@platforms//cpu:ppc"},
+          new Object[] {CPU.ARM, "@platforms//cpu:arm"},
+          new Object[] {CPU.AARCH64, "@platforms//cpu:aarch64"},
+          new Object[] {CPU.S390X, "@platforms//cpu:s390x"});
     }
 
     private final CPU testCpu;
@@ -81,10 +81,10 @@
     public static Collection createInputValues() {
       return ImmutableList.of(
           // OS value tests.
-          new Object[] {OS.LINUX, "@bazel_tools//platforms:linux"},
-          new Object[] {OS.DARWIN, "@bazel_tools//platforms:osx"},
-          new Object[] {OS.FREEBSD, "@bazel_tools//platforms:freebsd"},
-          new Object[] {OS.WINDOWS, "@bazel_tools//platforms:windows"});
+          new Object[] {OS.LINUX, "@platforms//os:linux"},
+          new Object[] {OS.DARWIN, "@platforms//os:osx"},
+          new Object[] {OS.FREEBSD, "@platforms//os:freebsd"},
+          new Object[] {OS.WINDOWS, "@platforms//os:windows"});
     }
 
     private final OS testOs;
@@ -112,9 +112,9 @@
   @RunWith(JUnit4.class)
   public static class FunctionTest extends BuildViewTestCase {
     private static final ConstraintSettingInfo CPU_CONSTRAINT =
-        ConstraintSettingInfo.create(Label.parseAbsoluteUnchecked("@bazel_tools//platforms:cpu"));
+        ConstraintSettingInfo.create(Label.parseAbsoluteUnchecked("@platforms//cpu:cpu"));
     private static final ConstraintSettingInfo OS_CONSTRAINT =
-        ConstraintSettingInfo.create(Label.parseAbsoluteUnchecked("@bazel_tools//platforms:os"));
+        ConstraintSettingInfo.create(Label.parseAbsoluteUnchecked("@platforms//os:os"));
 
     @Test
     public void generateConfigRepository() throws Exception {
diff --git a/src/test/shell/bazel/platforms_test.sh b/src/test/shell/bazel/platforms_test.sh
index 6db625a..d33a6c6 100755
--- a/src/test/shell/bazel/platforms_test.sh
+++ b/src/test/shell/bazel/platforms_test.sh
@@ -71,5 +71,12 @@
     fail "Bazel failed to build @platforms"
 }
 
+function test_incompatible_use_platforms_repo_for_constraints() {
+  # We test that a built-in @platforms repository is buildable.
+  bazel build --incompatible_use_platforms_repo_for_constraints @bazel_tools//platforms:all &> \
+    $TEST_log && fail "Build passed when we expected an error."
+  expect_log "Constraints from @bazel_tools//platforms have been removed."
+}
+
 run_suite "platform mapping test"
 
diff --git a/src/test/shell/integration/discard_graph_edges_test.sh b/src/test/shell/integration/discard_graph_edges_test.sh
index 926dc79..3bf1f9b 100755
--- a/src/test/shell/integration/discard_graph_edges_test.sh
+++ b/src/test/shell/integration/discard_graph_edges_test.sh
@@ -271,7 +271,7 @@
   package_count="$(extract_histogram_count "$histo_file" \
       'devtools\.build\.lib\..*\.Package$')"
   # A few packages aren't cleared.
-  [[ "$package_count" -le 17 ]] \
+  [[ "$package_count" -le 18 ]] \
       || fail "package count $package_count too high"
   glob_count="$(extract_histogram_count "$histo_file" "GlobValue$")"
   [[ "$glob_count" -le 1 ]] \
diff --git a/src/test/shell/testenv.sh b/src/test/shell/testenv.sh
index 73316d4..25ecb73 100755
--- a/src/test/shell/testenv.sh
+++ b/src/test/shell/testenv.sh
@@ -408,7 +408,7 @@
   name = "py_toolchain",
   toolchain = ":py_runtime_pair",
   toolchain_type = "@bazel_tools//tools/python:toolchain_type",
-  target_compatible_with = ["@bazel_tools//platforms:windows"],
+  target_compatible_with = ["@platforms//os:windows"],
 )
 EOF
 }
diff --git a/tools/cpp/BUILD b/tools/cpp/BUILD
index ad1b12a..e9da96d 100644
--- a/tools/cpp/BUILD
+++ b/tools/cpp/BUILD
@@ -169,10 +169,10 @@
 toolchain(
     name = "cc-toolchain-ppc",
     exec_compatible_with = [
-        "@bazel_tools//platforms:ppc",
+        "@platforms//cpu:ppc",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:ppc",
+        "@platforms//cpu:ppc",
     ],
     toolchain = ":cc-compiler-ppc",
     toolchain_type = ":toolchain_type",
@@ -196,10 +196,10 @@
 toolchain(
     name = "cc-toolchain-s390x",
     exec_compatible_with = [
-        "@bazel_tools//platforms:s390x",
+        "@platforms//cpu:s390x",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:s390x",
+        "@platforms//cpu:s390x",
     ],
     toolchain = ":cc-compiler-s390x",
     toolchain_type = ":toolchain_type",
@@ -225,8 +225,8 @@
     exec_compatible_with = [
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:arm",
-        "@bazel_tools//platforms:android",
+        "@platforms//cpu:arm",
+        "@platforms//os:android",
     ],
     toolchain = ":cc-compiler-armeabi-v7a",
     toolchain_type = ":toolchain_type",
@@ -250,12 +250,12 @@
 toolchain(
     name = "cc-toolchain-k8",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:linux",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:linux",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:linux",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:linux",
     ],
     toolchain = ":cc-compiler-k8",
     toolchain_type = ":toolchain_type",
@@ -289,12 +289,12 @@
 toolchain(
     name = "cc-toolchain-darwin",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:osx",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:osx",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:osx",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:osx",
     ],
     toolchain = ":cc-compiler-darwin",
     toolchain_type = ":toolchain_type",
@@ -328,12 +328,12 @@
 toolchain(
     name = "cc-toolchain-freebsd",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:freebsd",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:freebsd",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:freebsd",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:freebsd",
     ],
     toolchain = ":cc-compiler-freebsd",
     toolchain_type = ":toolchain_type",
@@ -367,12 +367,12 @@
 toolchain(
     name = "cc-toolchain-x64_windows",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     toolchain = ":cc-compiler-x64_windows",
     toolchain_type = ":toolchain_type",
@@ -406,13 +406,13 @@
 toolchain(
     name = "cc-toolchain-x64_windows_msvc",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
         ":msvc",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     toolchain = ":cc-compiler-x64_windows_msvc",
     toolchain_type = ":toolchain_type",
diff --git a/tools/cpp/BUILD.static.freebsd b/tools/cpp/BUILD.static.freebsd
index 5dd2a8e..b21dc3d 100644
--- a/tools/cpp/BUILD.static.freebsd
+++ b/tools/cpp/BUILD.static.freebsd
@@ -62,12 +62,12 @@
 toolchain(
     name = "cc-toolchain-freebsd",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:freebsd",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:freebsd",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:freebsd",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:freebsd",
     ],
     toolchain = ":cc-compiler-freebsd",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
@@ -97,11 +97,11 @@
 toolchain(
     name = "cc-toolchain-armeabi-v7a",
     exec_compatible_with = [
-        "@bazel_tools//platforms:arm",
+        "@platforms//cpu:arm",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:arm",
-        "@bazel_tools//platforms:android",
+        "@platforms//cpu:arm",
+        "@platforms//os:android",
     ],
     toolchain = ":cc-compiler-armeabi-v7a",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
diff --git a/tools/cpp/BUILD.toolchains.tpl b/tools/cpp/BUILD.toolchains.tpl
index 024d8bf..7aa08d0 100644
--- a/tools/cpp/BUILD.toolchains.tpl
+++ b/tools/cpp/BUILD.toolchains.tpl
@@ -11,8 +11,8 @@
     name = "cc-toolchain-armeabi-v7a",
     exec_compatible_with = HOST_CONSTRAINTS,
     target_compatible_with = [
-        "@bazel_tools//platforms:arm",
-        "@bazel_tools//platforms:android",
+        "@platforms//cpu:arm",
+        "@platforms//os:android",
     ],
     toolchain = "@local_config_cc//:cc-compiler-armabi-v7a",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
diff --git a/tools/cpp/BUILD.windows.tpl b/tools/cpp/BUILD.windows.tpl
index bd45b58..18df650 100644
--- a/tools/cpp/BUILD.windows.tpl
+++ b/tools/cpp/BUILD.windows.tpl
@@ -75,13 +75,13 @@
 toolchain(
     name = "cc-toolchain-x64_windows_msys",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
         "@bazel_tools//tools/cpp:msys",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     toolchain = ":cc-compiler-x64_windows_msys",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
@@ -121,13 +121,13 @@
 toolchain(
     name = "cc-toolchain-x64_windows_mingw",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
         "@bazel_tools//tools/cpp:mingw",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     toolchain = ":cc-compiler-x64_windows_mingw",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
@@ -186,12 +186,12 @@
 toolchain(
     name = "cc-toolchain-x64_windows",
     exec_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:x86_64",
-        "@bazel_tools//platforms:windows",
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
     ],
     toolchain = ":cc-compiler-x64_windows",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
@@ -219,8 +219,8 @@
     exec_compatible_with = [
     ],
     target_compatible_with = [
-        "@bazel_tools//platforms:arm",
-        "@bazel_tools//platforms:android",
+        "@platforms//cpu:arm",
+        "@platforms//os:android",
     ],
     toolchain = ":cc-compiler-armeabi-v7a",
     toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
diff --git a/tools/osx/crosstool/BUILD.toolchains b/tools/osx/crosstool/BUILD.toolchains
index 178ab86..8fa7e4a 100644
--- a/tools/osx/crosstool/BUILD.toolchains
+++ b/tools/osx/crosstool/BUILD.toolchains
@@ -7,8 +7,8 @@
         name = "cc-toolchain-" + arch,
         exec_compatible_with = [
             # These only execute on macOS.
-            "@bazel_tools//platforms:osx",
-            "@bazel_tools//platforms:x86_64",
+            "@platforms//os:osx",
+            "@platforms//cpu:x86_64",
         ],
         target_compatible_with = OSX_TOOLS_CONSTRAINTS[arch],
         toolchain = "@local_config_cc//:cc-compiler-" + arch,
diff --git a/tools/osx/crosstool/osx_archs.bzl b/tools/osx/crosstool/osx_archs.bzl
index 8c37eb0..a8788a4 100644
--- a/tools/osx/crosstool/osx_archs.bzl
+++ b/tools/osx/crosstool/osx_archs.bzl
@@ -37,17 +37,17 @@
 # TODO(apple-rules): Rename osx constraint to macOS.
 # TODO(apple-rules): Add constraints for watchos and tvos.
 OSX_TOOLS_CONSTRAINTS = {
-    "darwin_x86_64": ["@bazel_tools//platforms:osx", "@bazel_tools//platforms:x86_64"],
-    "ios_i386": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:x86_32"],
-    "ios_x86_64": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:x86_64"],
-    "watchos_i386": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:x86_32"],
-    "watchos_x86_64": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:x86_64"],
-    "tvos_x86_64": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:x86_64"],
-    "armeabi-v7a": ["@bazel_tools//platforms:arm"],
-    "ios_armv7": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:arm"],
-    "ios_arm64": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:aarch64"],
-    "ios_arm64e": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:aarch64"],
-    "watchos_armv7k": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:arm"],
-    "watchos_arm64_32": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:aarch64"],
-    "tvos_arm64": ["@bazel_tools//platforms:ios", "@bazel_tools//platforms:aarch64"],
+    "darwin_x86_64": ["@platforms//os:osx", "@platforms//cpu:x86_64"],
+    "ios_i386": ["@platforms//os:ios", "@platforms//cpu:x86_32"],
+    "ios_x86_64": ["@platforms//os:ios", "@platforms//cpu:x86_64"],
+    "watchos_i386": ["@platforms//os:ios", "@platforms//cpu:x86_32"],
+    "watchos_x86_64": ["@platforms//os:ios", "@platforms//cpu:x86_64"],
+    "tvos_x86_64": ["@platforms//os:ios", "@platforms//cpu:x86_64"],
+    "armeabi-v7a": ["@platforms//cpu:arm"],
+    "ios_armv7": ["@platforms//os:ios", "@platforms//cpu:arm"],
+    "ios_arm64": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
+    "ios_arm64e": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
+    "watchos_armv7k": ["@platforms//os:ios", "@platforms//cpu:arm"],
+    "watchos_arm64_32": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
+    "tvos_arm64": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
 }
diff --git a/tools/platforms/BUILD b/tools/platforms/BUILD
index f0dc074..aedc392 100644
--- a/tools/platforms/BUILD
+++ b/tools/platforms/BUILD
@@ -1,5 +1,7 @@
-# Standard constraint_setting and constraint_values to be used in platforms.
-
+# Deprecated. Do not use. Use targets in @platforms//cpu and @platforms//os.
+# This package will be removed by
+# --incompatible_use_platforms_repo_for_constraints. See
+# https://github.com/bazelbuild/bazel/issues/8622 for details.
 package(
     default_visibility = ["//visibility:public"],
 )
@@ -16,70 +18,74 @@
     srcs = glob(["**"]),
 )
 
-# These match values in //src/main/java/com/google/devtools/build/lib/util:CPU.java
-constraint_setting(name = "cpu")
+alias(
+    name = "cpu",
+    actual = "@platforms//cpu:cpu",
+)
 
-constraint_value(
+alias(
     name = "x86_32",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:x86_32",
 )
 
-constraint_value(
+alias(
     name = "x86_64",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:x86_64",
 )
 
-constraint_value(
+alias(
     name = "ppc",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:ppc",
 )
 
-constraint_value(
+alias(
     name = "arm",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:arm",
 )
 
-constraint_value(
+alias(
     name = "aarch64",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:aarch64",
 )
 
-constraint_value(
+alias(
     name = "s390x",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:s390x",
 )
 
-# These match values in //src/main/java/com/google/devtools/build/lib/util:OS.java
-constraint_setting(name = "os")
+alias(
+    name = "os",
+    actual = "@platforms//os:os",
+)
 
-constraint_value(
+alias(
     name = "osx",
-    constraint_setting = ":os",
+    actual = "@platforms//os:osx",
 )
 
-constraint_value(
+alias(
     name = "ios",
-    constraint_setting = ":os",
+    actual = "@platforms//os:ios",
 )
 
-constraint_value(
+alias(
     name = "freebsd",
-    constraint_setting = ":os",
+    actual = "@platforms//os:freebsd",
 )
 
-constraint_value(
+alias(
     name = "android",
-    constraint_setting = ":os",
+    actual = "@platforms//os:android",
 )
 
-constraint_value(
+alias(
     name = "linux",
-    constraint_setting = ":os",
+    actual = "@platforms//os:linux",
 )
 
-constraint_value(
+alias(
     name = "windows",
-    constraint_setting = ":os",
+    actual = "@platforms//os:windows",
 )
 
 # A default platform with nothing defined.
@@ -92,19 +98,19 @@
     constraint_values = [
     ],
     cpu_constraints = [
-        ":x86_32",
-        ":x86_64",
-        ":ppc",
-        ":arm",
-        ":aarch64",
-        ":s390x",
+        "@platforms//cpu:x86_32",
+        "@platforms//cpu:x86_64",
+        "@platforms//cpu:ppc",
+        "@platforms//cpu:arm",
+        "@platforms//cpu:aarch64",
+        "@platforms//cpu:s390x",
     ],
     host_platform = True,
     os_constraints = [
-        ":osx",
-        ":freebsd",
-        ":linux",
-        ":windows",
+        "@platforms//os:osx",
+        "@platforms//os:freebsd",
+        "@platforms//os:linux",
+        "@platforms//os:windows",
     ],
 )
 
@@ -113,18 +119,18 @@
     constraint_values = [
     ],
     cpu_constraints = [
-        ":x86_32",
-        ":x86_64",
-        ":ppc",
-        ":arm",
-        ":aarch64",
-        ":s390x",
+        "@platforms//cpu:x86_32",
+        "@platforms//cpu:x86_64",
+        "@platforms//cpu:ppc",
+        "@platforms//cpu:arm",
+        "@platforms//cpu:aarch64",
+        "@platforms//cpu:s390x",
     ],
     os_constraints = [
-        ":osx",
-        ":freebsd",
-        ":linux",
-        ":windows",
+        "@platforms//os:osx",
+        "@platforms//os:freebsd",
+        "@platforms//os:linux",
+        "@platforms//os:windows",
     ],
     target_platform = True,
 )
diff --git a/tools/platforms/BUILD.tools b/tools/platforms/BUILD.tools
index 862c554..f7eece8 100644
--- a/tools/platforms/BUILD.tools
+++ b/tools/platforms/BUILD.tools
@@ -1,73 +1,79 @@
-# Standard constraint_setting and constraint_values to be used in platforms.
-
+# Deprecated. Do not use. Use targets in @platforms//cpu and @platforms//os.
+# This package will be removed by
+# --incompatible_use_platforms_repo_for_constraints. See
+# https://github.com/bazelbuild/bazel/issues/8622 for details.
 package(
     default_visibility = ["//visibility:public"],
 )
 
-# These match values in //src/main/java/com/google/devtools/build/lib/util:CPU.java
-constraint_setting(name = "cpu")
+alias(
+    name = "cpu",
+    actual = "@platforms//cpu:cpu",
+)
 
-constraint_value(
+alias(
     name = "x86_32",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:x86_32",
 )
 
-constraint_value(
+alias(
     name = "x86_64",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:x86_64",
 )
 
-constraint_value(
+alias(
     name = "ppc",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:ppc",
 )
 
-constraint_value(
+alias(
     name = "arm",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:arm",
 )
 
-constraint_value(
+alias(
     name = "aarch64",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:aarch64",
 )
 
-constraint_value(
+alias(
     name = "s390x",
-    constraint_setting = ":cpu",
+    actual = "@platforms//cpu:s390x",
 )
 
-# These match values in //src/main/java/com/google/devtools/build/lib/util:OS.java
-constraint_setting(name = "os")
+alias(
+    name = "os",
+    actual = "@platforms//os:os",
+)
 
-constraint_value(
+alias(
     name = "osx",
-    constraint_setting = ":os",
+    actual = "@platforms//os:osx",
 )
 
-constraint_value(
+alias(
     name = "ios",
-    constraint_setting = ":os",
+    actual = "@platforms//os:ios",
 )
 
-constraint_value(
+alias(
     name = "freebsd",
-    constraint_setting = ":os",
+    actual = "@platforms//os:freebsd",
 )
 
-constraint_value(
+alias(
     name = "android",
-    constraint_setting = ":os",
+    actual = "@platforms//os:android",
 )
 
-constraint_value(
+alias(
     name = "linux",
-    constraint_setting = ":os",
+    actual = "@platforms//os:linux",
 )
 
-constraint_value(
+alias(
     name = "windows",
-    constraint_setting = ":os",
+    actual = "@platforms//os:windows",
 )
 
 # A default platform with nothing defined.
@@ -80,19 +86,19 @@
     constraint_values = [
     ],
     cpu_constraints = [
-        ":x86_32",
-        ":x86_64",
-        ":ppc",
-        ":arm",
-        ":aarch64",
-        ":s390x",
+        "@platforms//cpu:x86_32",
+        "@platforms//cpu:x86_64",
+        "@platforms//cpu:ppc",
+        "@platforms//cpu:arm",
+        "@platforms//cpu:aarch64",
+        "@platforms//cpu:s390x",
     ],
     host_platform = True,
     os_constraints = [
-        ":osx",
-        ":freebsd",
-        ":linux",
-        ":windows",
+        "@platforms//os:osx",
+        "@platforms//os:freebsd",
+        "@platforms//os:linux",
+        "@platforms//os:windows",
     ],
 )
 
@@ -101,18 +107,19 @@
     constraint_values = [
     ],
     cpu_constraints = [
-        ":x86_32",
-        ":x86_64",
-        ":ppc",
-        ":arm",
-        ":aarch64",
-        ":s390x",
+        "@platforms//cpu:x86_32",
+        "@platforms//cpu:x86_64",
+        "@platforms//cpu:ppc",
+        "@platforms//cpu:arm",
+        "@platforms//cpu:aarch64",
+        "@platforms//cpu:s390x",
     ],
     os_constraints = [
-        ":osx",
-        ":freebsd",
-        ":linux",
-        ":windows",
+        "@platforms//os:osx",
+        "@platforms//os:freebsd",
+        "@platforms//os:linux",
+        "@platforms//os:windows",
     ],
     target_platform = True,
 )
+