forked from bazelbuild/bazel
-
Notifications
You must be signed in to change notification settings - Fork 0
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
(bazelbuild…
…#18649) 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 bazelbuild#17289 Closes bazelbuild#18624. PiperOrigin-RevId: 539710874 Change-Id: I171f308b06e7ec7559641b49b4c8c53dddac0d3c Co-authored-by: Fabian Meumertzheim <[email protected]>
- Loading branch information
1 parent
7f93a2a
commit 9310618
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 |
---|---|---|
|
@@ -557,6 +557,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() |