Fix toolchain and execution platform registration to use patterns.
This allows more flexibility in registering toolchains and execution
platforms, both in the WORKSPACE and from the command-line.
Change-Id: I6fe75507d1a74de74085b7c927fdf093c152b894
PiperOrigin-RevId: 188813688
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 03f2de6..25c375e 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,8 +203,8 @@
private ImmutableList<Event> events;
private ImmutableList<Postable> posts;
- private ImmutableList<Label> registeredExecutionPlatformLabels;
- private ImmutableList<Label> registeredToolchainLabels;
+ private ImmutableList<String> registeredExecutionPlatforms;
+ private ImmutableList<String> registeredToolchains;
/**
* Package initialization, part 1 of 3: instantiates a new package with the
@@ -340,9 +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);
+ this.registeredExecutionPlatforms = ImmutableList.copyOf(builder.registeredExecutionPlatforms);
+ this.registeredToolchains = ImmutableList.copyOf(builder.registeredToolchains);
}
/**
@@ -659,12 +658,12 @@
return defaultRestrictedTo;
}
- public ImmutableList<Label> getRegisteredExecutionPlatformLabels() {
- return registeredExecutionPlatformLabels;
+ public ImmutableList<String> getRegisteredExecutionPlatforms() {
+ return registeredExecutionPlatforms;
}
- public ImmutableList<Label> getRegisteredToolchainLabels() {
- return registeredToolchainLabels;
+ public ImmutableList<String> getRegisteredToolchains() {
+ return registeredToolchains;
}
@Override
@@ -789,8 +788,8 @@
protected Map<Label, Path> subincludes = null;
protected ImmutableList<Label> skylarkFileDependencies = ImmutableList.of();
- protected List<Label> registeredExecutionPlatformLabels = new ArrayList<>();
- protected List<Label> registeredToolchainLabels = new ArrayList<>();
+ protected List<String> registeredExecutionPlatforms = new ArrayList<>();
+ protected List<String> registeredToolchains = new ArrayList<>();
/**
* True iff the "package" function has already been called in this package.
@@ -1313,12 +1312,12 @@
addRuleUnchecked(rule);
}
- public void addRegisteredExecutionPlatformLabels(List<Label> platforms) {
- this.registeredExecutionPlatformLabels.addAll(platforms);
+ public void addRegisteredExecutionPlatforms(List<String> platforms) {
+ this.registeredExecutionPlatforms.addAll(platforms);
}
- void addRegisteredToolchainLabels(List<Label> toolchains) {
- this.registeredToolchainLabels.addAll(toolchains);
+ void addRegisteredToolchains(List<String> toolchains) {
+ this.registeredToolchains.addAll(toolchains);
}
private Builder beforeBuild(boolean discoverAssumedInputFiles)
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 702f6af..4e7af5f 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
@@ -53,9 +53,7 @@
import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
import com.google.devtools.build.lib.vfs.Path;
import java.io.File;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -275,8 +273,8 @@
if (aPackage.containsErrors()) {
builder.setContainsErrors();
}
- builder.addRegisteredExecutionPlatformLabels(aPackage.getRegisteredExecutionPlatformLabels());
- builder.addRegisteredToolchainLabels(aPackage.getRegisteredToolchainLabels());
+ builder.addRegisteredExecutionPlatforms(aPackage.getRegisteredExecutionPlatforms());
+ builder.addRegisteredToolchains(aPackage.getRegisteredToolchains());
for (Rule rule : aPackage.getTargets(Rule.class)) {
try {
// The old rule references another Package instance and we wan't to keep the invariant that
@@ -416,25 +414,10 @@
SkylarkList<String> platformLabels, Location location, 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(
- location,
- 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, location).pkgBuilder;
- builder.addRegisteredExecutionPlatformLabels(platforms);
+ Package.Builder builder = PackageFactory.getContext(env, location).pkgBuilder;
+ builder.addRegisteredExecutionPlatforms(
+ platformLabels.getContents(String.class, "platform_labels"));
return NONE;
}
@@ -468,26 +451,10 @@
SkylarkList<String> toolchainLabels, Location location, Environment env)
throws EvalException, InterruptedException {
- // Collect the toolchain labels.
- List<Label> toolchains = new ArrayList<>();
- for (String rawLabel :
- toolchainLabels.getContents(String.class, "toolchain_labels")) {
- try {
- toolchains.add(Label.parseAbsolute(rawLabel));
- } catch (LabelSyntaxException e) {
- throw new EvalException(
- location,
- String.format(
- "In register_toolchains: unable to parse toolchain label %s: %s",
- rawLabel, e.getMessage()),
- e);
- }
- }
-
// Add to the package definition for later.
- Package.Builder builder =
- PackageFactory.getContext(env, location).pkgBuilder;
- builder.addRegisteredToolchainLabels(toolchains);
+ Package.Builder builder = PackageFactory.getContext(env, location).pkgBuilder;
+ builder.addRegisteredToolchains(
+ toolchainLabels.getContents(String.class, "toolchain_labels"));
return NONE;
}