Skip to content

Commit 0f05904

Browse files
fmeumWyveraldckolli5
authored
Add register_{execution_platforms,toolchains} directives to MODULE.bazel files (#15852)
These are intended to replace the {execution_platforms,toolchains}_to_register attribtues on the module() directive, which are a bit harder to use since they have to be grouped up together near the top. #15829 RELNOTES: Added new register_{execution_platforms,toolchains} directives to the MODULE.bazel file, to replace the {execution_platforms,toolchains}_to_register attributes on the module() directive. PiperOrigin-RevId: 459714400 Change-Id: If8a25ef92ac695a3f012d54d0e189d8ae25d0833 Co-authored-by: Googler <[email protected]> Co-authored-by: Chenchu K <[email protected]>
1 parent 7bbdddd commit 0f05904

File tree

3 files changed

+62
-12
lines changed

3 files changed

+62
-12
lines changed

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Module.java

+16-7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.common.collect.Maps;
2222
import com.google.devtools.build.lib.cmdline.RepositoryMapping;
2323
import com.google.devtools.build.lib.cmdline.RepositoryName;
24+
import com.google.errorprone.annotations.CanIgnoreReturnValue;
2425
import java.util.Map;
2526
import java.util.function.UnaryOperator;
2627
import javax.annotation.Nullable;
@@ -138,9 +139,7 @@ public static Builder builder() {
138139
.setName("")
139140
.setVersion(Version.EMPTY)
140141
.setKey(ModuleKey.ROOT)
141-
.setCompatibilityLevel(0)
142-
.setExecutionPlatformsToRegister(ImmutableList.of())
143-
.setToolchainsToRegister(ImmutableList.of());
142+
.setCompatibilityLevel(0);
144143
}
145144

146145
/**
@@ -168,11 +167,21 @@ public abstract static class Builder {
168167
/** Optional; defaults to {@code 0}. */
169168
public abstract Builder setCompatibilityLevel(int value);
170169

171-
/** Optional; defaults to an empty list. */
172-
public abstract Builder setExecutionPlatformsToRegister(ImmutableList<String> value);
170+
abstract ImmutableList.Builder<String> executionPlatformsToRegisterBuilder();
173171

174-
/** Optional; defaults to an empty list. */
175-
public abstract Builder setToolchainsToRegister(ImmutableList<String> value);
172+
@CanIgnoreReturnValue
173+
public final Builder addExecutionPlatformsToRegister(Iterable<String> values) {
174+
executionPlatformsToRegisterBuilder().addAll(values);
175+
return this;
176+
}
177+
178+
abstract ImmutableList.Builder<String> toolchainsToRegisterBuilder();
179+
180+
@CanIgnoreReturnValue
181+
public final Builder addToolchainsToRegister(Iterable<String> values) {
182+
toolchainsToRegisterBuilder().addAll(values);
183+
return this;
184+
}
176185

177186
public abstract Builder setDeps(ImmutableMap<String, ModuleKey> value);
178187

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java

+38-2
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,16 @@ public void module(
167167
} catch (ParseException e) {
168168
throw new EvalException("Invalid version in module()", e);
169169
}
170+
// TODO(wyv): migrate users of execution_platforms_to_register and toolchains_to_register to
171+
// register_execution_platforms and register_toolchains, and remove the former two attributes.
170172
module
171173
.setName(name)
172174
.setVersion(parsedVersion)
173175
.setCompatibilityLevel(compatibilityLevel.toInt("compatibility_level"))
174-
.setExecutionPlatformsToRegister(
176+
.addExecutionPlatformsToRegister(
175177
checkAllAbsolutePatterns(
176178
executionPlatformsToRegister, "execution_platforms_to_register"))
177-
.setToolchainsToRegister(
179+
.addToolchainsToRegister(
178180
checkAllAbsolutePatterns(toolchainsToRegister, "toolchains_to_register"));
179181
addRepoNameUsage(name, "as the current module name", thread.getCallerLocation());
180182
}
@@ -246,6 +248,40 @@ public void bazelDep(
246248
addRepoNameUsage(repoName, "by a bazel_dep", thread.getCallerLocation());
247249
}
248250

251+
@StarlarkMethod(
252+
name = "register_execution_platforms",
253+
doc =
254+
"Specifies already-defined execution platforms to be registered when this module is"
255+
+ " selected. Should be absolute target patterns (ie. beginning with either"
256+
+ " <code>@</code> or <code>//</code>). See <a href=\"${link toolchains}\">toolchain"
257+
+ " resolution</a> for more information.",
258+
extraPositionals =
259+
@Param(
260+
name = "platform_labels",
261+
allowedTypes = {@ParamType(type = Sequence.class, generic1 = String.class)},
262+
doc = "The labels of the platforms to register."))
263+
public void registerExecutionPlatforms(Sequence<?> platformLabels) throws EvalException {
264+
module.addExecutionPlatformsToRegister(
265+
checkAllAbsolutePatterns(platformLabels, "register_execution_platforms"));
266+
}
267+
268+
@StarlarkMethod(
269+
name = "register_toolchains",
270+
doc =
271+
"Specifies already-defined toolchains to be registered when this module is selected."
272+
+ " Should be absolute target patterns (ie. beginning with either <code>@</code> or"
273+
+ " <code>//</code>). See <a href=\"${link toolchains}\">toolchain resolution</a> for"
274+
+ " more information.",
275+
extraPositionals =
276+
@Param(
277+
name = "toolchain_labels",
278+
allowedTypes = {@ParamType(type = Sequence.class, generic1 = String.class)},
279+
doc = "The labels of the toolchains to register."))
280+
public void registerToolchains(Sequence<?> toolchainLabels) throws EvalException {
281+
module.addToolchainsToRegister(
282+
checkAllAbsolutePatterns(toolchainLabels, "register_toolchains"));
283+
}
284+
249285
@StarlarkMethod(
250286
name = "use_extension",
251287
doc =

src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ public void testRootModule() throws Exception {
183183
")",
184184
"bazel_dep(name='B',version='1.0')",
185185
"bazel_dep(name='C',version='2.0',repo_name='see')",
186+
"register_toolchains('//my:toolchain3', '//my:toolchain4')",
187+
"register_execution_platforms('//my:platform3', '//my:platform4')",
186188
"single_version_override(module_name='D',version='18')",
187189
"local_path_override(module_name='E',path='somewhere/else')",
188190
"multiple_version_override(module_name='F',versions=['1.0','2.0'])",
@@ -203,9 +205,12 @@ public void testRootModule() throws Exception {
203205
.setVersion(Version.parse("0.1"))
204206
.setKey(ModuleKey.ROOT)
205207
.setCompatibilityLevel(4)
206-
.setExecutionPlatformsToRegister(
207-
ImmutableList.of("//my:platform", "//my:platform2"))
208-
.setToolchainsToRegister(ImmutableList.of("//my:toolchain", "//my:toolchain2"))
208+
.addExecutionPlatformsToRegister(
209+
ImmutableList.of(
210+
"//my:platform", "//my:platform2", "//my:platform3", "//my:platform4"))
211+
.addToolchainsToRegister(
212+
ImmutableList.of(
213+
"//my:toolchain", "//my:toolchain2", "//my:toolchain3", "//my:toolchain4"))
209214
.addDep("B", createModuleKey("B", "1.0"))
210215
.addDep("see", createModuleKey("C", "2.0"))
211216
.build());

0 commit comments

Comments
 (0)