-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix WORKSPACE toolchain resolution with
--enable_bzlmod
The canonical repo name of the `platforms` module is now forced to be `platforms`, which ensures that `@platforms` constraints used by toolchains defined in `WORKSPACE` match those referenced by the auto-configured host platform provided by `local_config_platform`. Fixes #17289 Closes #18624. PiperOrigin-RevId: 539710874 Change-Id: I171f308b06e7ec7559641b49b4c8c53dddac0d3c
- Loading branch information
1 parent
e262538
commit 343ab03
Showing
2 changed files
with
86 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -588,6 +588,84 @@ def testNativeModuleNameAndVersion(self): | |
self.assertIn('@@bar~override reporting in: [email protected]', stderr) | ||
self.assertIn('@@quux reporting in: None@None', stderr) | ||
|
||
def testWorkspaceToolchainRegistrationWithPlatformsConstraint(self): | ||
"""Regression test for https://github.com/bazelbuild/bazel/issues/17289.""" | ||
self.ScratchFile('MODULE.bazel') | ||
self.ScratchFile( | ||
'WORKSPACE', ['register_toolchains("//:my_toolchain_toolchain")'] | ||
) | ||
os.remove(self.Path('WORKSPACE.bzlmod')) | ||
|
||
self.ScratchFile( | ||
'BUILD.bazel', | ||
[ | ||
'load(":defs.bzl", "get_host_os", "my_consumer", "my_toolchain")', | ||
'toolchain_type(name = "my_toolchain_type")', | ||
'my_toolchain(', | ||
' name = "my_toolchain",', | ||
' my_value = "Hello, Bzlmod!",', | ||
')', | ||
'toolchain(', | ||
' name = "my_toolchain_toolchain",', | ||
' toolchain = ":my_toolchain",', | ||
' toolchain_type = ":my_toolchain_type",', | ||
' target_compatible_with = [', | ||
' "@platforms//os:" + get_host_os(),', | ||
' ],', | ||
')', | ||
'my_consumer(', | ||
' name = "my_consumer",', | ||
')', | ||
], | ||
) | ||
|
||
self.ScratchFile( | ||
'defs.bzl', | ||
[ | ||
( | ||
'load("@local_config_platform//:constraints.bzl",' | ||
' "HOST_CONSTRAINTS")' | ||
), | ||
'def _my_toolchain_impl(ctx):', | ||
' return [', | ||
' platform_common.ToolchainInfo(', | ||
' my_value = ctx.attr.my_value,', | ||
' ),', | ||
' ]', | ||
'my_toolchain = rule(', | ||
' implementation = _my_toolchain_impl,', | ||
' attrs = {', | ||
' "my_value": attr.string(),', | ||
' },', | ||
')', | ||
'def _my_consumer(ctx):', | ||
' my_toolchain_info = ctx.toolchains["//:my_toolchain_type"]', | ||
' out = ctx.actions.declare_file(ctx.attr.name)', | ||
( | ||
' ctx.actions.write(out, "my_value =' | ||
' {}".format(my_toolchain_info.my_value))' | ||
), | ||
' return [DefaultInfo(files = depset([out]))]', | ||
'my_consumer = rule(', | ||
' implementation = _my_consumer,', | ||
' attrs = {},', | ||
' toolchains = ["//:my_toolchain_type"],', | ||
')', | ||
'def get_host_os():', | ||
' for constraint in HOST_CONSTRAINTS:', | ||
' if constraint.startswith("@platforms//os:"):', | ||
' return constraint.removeprefix("@platforms//os:")', | ||
], | ||
) | ||
|
||
self.RunBazel([ | ||
'build', | ||
'//:my_consumer', | ||
'--toolchain_resolution_debug=//:my_toolchain_type', | ||
]) | ||
with open(self.Path('bazel-bin/my_consumer'), 'r') as f: | ||
self.assertEqual(f.read().strip(), 'my_value = Hello, Bzlmod!') | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |