Make enabled_features functionally equivalent to cc_feature(..., enabled=True)

BEGIN_PUBLIC
Make enabled_features functionally equivalent to cc_feature(..., enabled=True)

This should allow you to disable an enabled feature elsewhere in the toolchain.

Fixes #233
END_PUBLIC

PiperOrigin-RevId: 666318466
Change-Id: I0b820cb2033d4ce8b141ff74dcd6516b8157c2b4
This commit is contained in:
Googler 2024-08-22 06:06:19 -07:00 committed by Copybara-Service
parent 84fceed887
commit 3a62fd3f5b
2 changed files with 8 additions and 6 deletions

View File

@ -99,7 +99,7 @@ def _convert_args_sequence(args_sequence):
return struct(flag_sets = flag_sets, env_sets = env_sets) return struct(flag_sets = flag_sets, env_sets = env_sets)
def convert_feature(feature): def convert_feature(feature, enabled = False):
if feature.external: if feature.external:
return None return None
@ -107,7 +107,7 @@ def convert_feature(feature):
return legacy_feature( return legacy_feature(
name = feature.name, name = feature.name,
enabled = feature.enabled, enabled = enabled or feature.enabled,
flag_sets = args.flag_sets, flag_sets = args.flag_sets,
env_sets = args.env_sets, env_sets = args.env_sets,
implies = sorted([ft.name for ft in feature.implies.to_list()]), implies = sorted([ft.name for ft in feature.implies.to_list()]),
@ -150,14 +150,17 @@ def convert_toolchain(toolchain):
A struct containing parameters suitable to pass to A struct containing parameters suitable to pass to
cc_common.create_cc_toolchain_config_info. cc_common.create_cc_toolchain_config_info.
""" """
features = [convert_feature(feature) for feature in toolchain.features] features = [
convert_feature(feature, enabled = feature in toolchain.enabled_features)
for feature in toolchain.features
]
features.append(convert_feature(FeatureInfo( features.append(convert_feature(FeatureInfo(
# We reserve names starting with implied_by. This ensures we don't # We reserve names starting with implied_by. This ensures we don't
# conflict with the name of a feature the user creates. # conflict with the name of a feature the user creates.
name = "implied_by_always_enabled", name = "implied_by_always_enabled",
enabled = True, enabled = True,
args = ArgsListInfo(args = toolchain.args), args = ArgsListInfo(args = toolchain.args),
implies = depset([ft for ft in toolchain.enabled_features]), implies = depset([]),
requires_any_of = [], requires_any_of = [],
mutually_exclusive = [], mutually_exclusive = [],
external = False, external = False,

View File

@ -187,7 +187,7 @@ def _toolchain_collects_files_test(env, targets):
env.expect.that_collection(legacy.features).contains_exactly([ env.expect.that_collection(legacy.features).contains_exactly([
legacy_feature( legacy_feature(
name = "simple_feature", name = "simple_feature",
enabled = False, enabled = True,
flag_sets = [legacy_flag_set( flag_sets = [legacy_flag_set(
actions = ["c_compile"], actions = ["c_compile"],
flag_groups = [ flag_groups = [
@ -208,7 +208,6 @@ def _toolchain_collects_files_test(env, targets):
legacy_feature( legacy_feature(
name = "implied_by_always_enabled", name = "implied_by_always_enabled",
enabled = True, enabled = True,
implies = ["simple_feature"],
flag_sets = [legacy_flag_set( flag_sets = [legacy_flag_set(
actions = ["c_compile"], actions = ["c_compile"],
flag_groups = [ flag_groups = [