diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index c37ffa3..b07d02a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -203,6 +203,7 @@
   private ImmutableList<Event> events;
   private ImmutableList<Postable> posts;
 
+  private ImmutableList<Label> registeredExecutionPlatformLabels;
   private ImmutableList<Label> registeredToolchainLabels;
 
   /**
@@ -339,6 +340,8 @@
     this.features = ImmutableSortedSet.copyOf(builder.features);
     this.events = ImmutableList.copyOf(builder.events);
     this.posts = ImmutableList.copyOf(builder.posts);
+    this.registeredExecutionPlatformLabels =
+        ImmutableList.copyOf(builder.registeredExecutionPlatformLabels);
     this.registeredToolchainLabels = ImmutableList.copyOf(builder.registeredToolchainLabels);
   }
 
@@ -656,6 +659,10 @@
     return defaultRestrictedTo;
   }
 
+  public ImmutableList<Label> getRegisteredExecutionPlatformLabels() {
+    return registeredExecutionPlatformLabels;
+  }
+
   public ImmutableList<Label> getRegisteredToolchainLabels() {
     return registeredToolchainLabels;
   }
@@ -775,6 +782,7 @@
     protected Map<Label, Path> subincludes = null;
     protected ImmutableList<Label> skylarkFileDependencies = ImmutableList.of();
 
+    protected List<Label> registeredExecutionPlatformLabels = new ArrayList<>();
     protected List<Label> registeredToolchainLabels = new ArrayList<>();
 
     /**
@@ -1298,6 +1306,10 @@
       addRuleUnchecked(rule);
     }
 
+    public void addRegisteredExecutionPlatformLabels(List<Label> platforms) {
+      this.registeredExecutionPlatformLabels.addAll(platforms);
+    }
+
     void addRegisteredToolchainLabels(List<Label> toolchains) {
       this.registeredToolchainLabels.addAll(toolchains);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 1982200..9e1326b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -274,6 +274,7 @@
     if (aPackage.containsErrors()) {
       builder.setContainsErrors();
     }
+    builder.addRegisteredExecutionPlatformLabels(aPackage.getRegisteredExecutionPlatformLabels());
     builder.addRegisteredToolchainLabels(aPackage.getRegisteredToolchainLabels());
     for (Rule rule : aPackage.getTargets(Rule.class)) {
       try {
@@ -388,6 +389,57 @@
   }
 
   @SkylarkSignature(
+    name = "register_execution_platforms",
+    objectType = Object.class,
+    returnType = NoneType.class,
+    doc = "Registers a platform so that it is available to execute actions.",
+    extraPositionals =
+        @Param(
+          name = "platform_labels",
+          type = SkylarkList.class,
+          generic1 = String.class,
+          doc = "The labels of the platforms to register."
+        ),
+    useAst = true,
+    useEnvironment = true
+  )
+  private static final BuiltinFunction.Factory newRegisterExecutionPlatformsFunction =
+      new BuiltinFunction.Factory("register_execution_platforms") {
+        public BuiltinFunction create(final RuleFactory ruleFactory) {
+          return new BuiltinFunction(
+              "register_execution_platforms",
+              FunctionSignature.POSITIONALS,
+              BuiltinFunction.USE_AST_ENV) {
+            public Object invoke(
+                SkylarkList<String> platformLabels, FuncallExpression ast, Environment env)
+                throws EvalException, InterruptedException {
+
+              // Collect the platform labels.
+              List<Label> platforms = new ArrayList<>();
+              for (String rawLabel : platformLabels.getContents(String.class, "platform_labels")) {
+                try {
+                  platforms.add(Label.parseAbsolute(rawLabel));
+                } catch (LabelSyntaxException e) {
+                  throw new EvalException(
+                      ast.getLocation(),
+                      String.format(
+                          "In register_execution_platforms: unable to parse platform label %s: %s",
+                          rawLabel, e.getMessage()),
+                      e);
+                }
+              }
+
+              // Add to the package definition for later.
+              Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+              builder.addRegisteredExecutionPlatformLabels(platforms);
+
+              return NONE;
+            }
+          };
+        }
+      };
+
+  @SkylarkSignature(
     name = "register_toolchains",
     objectType = Object.class,
     returnType = NoneType.class,
@@ -484,6 +536,8 @@
       boolean allowOverride, RuleFactory ruleFactory) {
     Map<String, BaseFunction> map = new HashMap<>();
     map.put("bind", newBindFunction(ruleFactory));
+    map.put(
+        "register_execution_platforms", newRegisterExecutionPlatformsFunction.apply(ruleFactory));
     map.put("register_toolchains", newRegisterToolchainsFunction.apply(ruleFactory));
     for (String ruleClass : ruleFactory.getRuleClassNames()) {
       if (!map.containsKey(ruleClass)) {
