Skip to content

Commit db8625c

Browse files
Nero5023meta-codesync[bot]
authored andcommitted
Propagate ConditionalModifierInfo from config_setting with single constraint
Summary: RFC: https://fb.workplace.com/groups/buck2dev/permalink/4179858482302192/ --------- Extend `config_setting` to return a `ConditionalModifierInfo` provider when the `config_setting `has exactly one constraint value. This allows single-constraint `config_settings` to be used as modifiers, inheriting the conditional modifier behavior. Differential Revision: D89706595 fbshipit-source-id: c4e039a18b0036b38a5a4aee5bce686b576d4394
1 parent 474561e commit db8625c

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

prelude/cfg/modifier/common.bzl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,7 @@ def get_modifier_info(
129129
return conditional_modifier_info.key, conditional_modifier_info.inner
130130
cfg_info = modifier_info[ConfigurationInfo]
131131
asserts.true(len(cfg_info.constraints) == 1, "Modifier should only be a single constraint value. Found multiple or none in `{}`".format(modifier))
132-
constraint_value_info = list(cfg_info.constraints.values())[0]
133-
return constraint_value_info.setting.label, constraint_value_info
132+
fail("Internal error: Modifer (`{}` type `{}`) with single constraint value should have ConditionalModifierInfo provider.".format(modifier_info, type(modifier_info)))
134133
fail("Internal error: Found unexpected modifier `{}` type `{}`".format(modifier, type(modifier)))
135134

136135
def _is_subset(a: ConfigurationInfo, b: ConfigurationInfo) -> bool:

prelude/configurations/rules.bzl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
# above-listed licenses.
88

99
load("@prelude//cfg/modifier:constraint_modifier_info.bzl", "make_constraint_modifier_info")
10+
load("@prelude//cfg/modifier:types.bzl", "ConditionalModifierInfo")
1011
load(":util.bzl", "util")
1112

1213
_ExecutionModifierInfo = provider(fields = {
@@ -16,7 +17,14 @@ _ExecutionModifierInfo = provider(fields = {
1617
def config_setting_impl(ctx):
1718
subinfos = [util.constraint_values_to_configuration(ctx.attrs.constraint_values)]
1819
subinfos.append(ConfigurationInfo(constraints = {}, values = ctx.attrs.values))
19-
return [DefaultInfo(), util.configuration_info_union(subinfos)]
20+
cfg_info = util.configuration_info_union(subinfos)
21+
providers = [DefaultInfo(), cfg_info]
22+
if len(ctx.attrs.constraint_values) == 1:
23+
# When only have one constraint, we return an additional ConditionalModifierInfo provider for
24+
# conditional modifier
25+
conditional_modifier_info = ctx.attrs.constraint_values[0][ConditionalModifierInfo]
26+
providers.append(conditional_modifier_info)
27+
return providers
2028

2129
def constraint_setting_impl(ctx):
2230
return [

0 commit comments

Comments
 (0)