mirror of https://github.com/bazelbuild/rules_cc
Remove support for args from action_type_config.
BEGIN_PUBLIC Remove support for args from action_type_config. Args in individual action type configs result in redundant configuration, where both the cc_args and the cc_action_type_config control which actions they're enabled for. Instead of: ``` cc_args(name = "compile_args", action_types = [":c_compile", ":cpp_compile]) cc_action_type_config(name = "c_compile_config", actions = [":c_compile"], args = [":compile_args"]) cc_action_type_config(name = "cpp_compile_config", actions = [":cpp_compile"], args = [":compile_args"]) cc_toolchain(action_type_configs = [":c_compile_config", ":cpp_compile_config"]) ``` We should force users to write the following: ``` cc_args(name = "compile_args", action_types = [":c_compile", ":cpp_compile]) cc_action_type_config(name = "c_compile_config", actions = [":c_compile"]) cc_action_type_config(name = "cpp_compile_config", actions = [":cpp_compile"]) cc_toolchain(action_type_configs = [":c_compile_config", ":cpp_compile_config"], args = [":compile_args"]) ``` END_PUBLIC PiperOrigin-RevId: 642432029 Change-Id: I1aa7c1752f4d915d8c84c17a06314ae9ad2c69f0
This commit is contained in:
parent
1cf35f02db
commit
ac3f19bac7
|
@ -13,11 +13,9 @@
|
|||
# limitations under the License.
|
||||
"""Implementation of cc_action_type_config."""
|
||||
|
||||
load("//cc/toolchains/impl:args_utils.bzl", "get_action_type")
|
||||
load(
|
||||
"//cc/toolchains/impl:collect.bzl",
|
||||
"collect_action_types",
|
||||
"collect_args_lists",
|
||||
"collect_features",
|
||||
"collect_files",
|
||||
"collect_tools",
|
||||
|
@ -27,7 +25,6 @@ load(
|
|||
"ActionTypeConfigInfo",
|
||||
"ActionTypeConfigSetInfo",
|
||||
"ActionTypeSetInfo",
|
||||
"ArgsListInfo",
|
||||
"FeatureSetInfo",
|
||||
)
|
||||
|
||||
|
@ -39,20 +36,17 @@ def _cc_action_type_config_impl(ctx):
|
|||
|
||||
tools = tuple(collect_tools(ctx, ctx.attr.tools))
|
||||
implies = collect_features(ctx.attr.implies)
|
||||
args_list = collect_args_lists(ctx.attr.args, ctx.label)
|
||||
files = collect_files(ctx.attr.data)
|
||||
|
||||
configs = {}
|
||||
for action_type in collect_action_types(ctx.attr.action_types).to_list():
|
||||
for_action = get_action_type(args_list, action_type)
|
||||
configs[action_type] = ActionTypeConfigInfo(
|
||||
label = ctx.label,
|
||||
action_type = action_type,
|
||||
tools = tools,
|
||||
args = for_action.args,
|
||||
implies = implies,
|
||||
files = ctx.runfiles(
|
||||
transitive_files = depset(transitive = [files, for_action.files]),
|
||||
transitive_files = depset(transitive = [files]),
|
||||
).merge_all([tool.runfiles for tool in tools]),
|
||||
)
|
||||
|
||||
|
@ -80,12 +74,6 @@ A tool can be a `cc_tool`, or a binary.
|
|||
|
||||
If multiple tools are specified, the first tool that has `with_features` that
|
||||
satisfy the currently enabled feature set is used.
|
||||
""",
|
||||
),
|
||||
"args": attr.label_list(
|
||||
providers = [ArgsListInfo],
|
||||
doc = """Labels that point to `cc_arg`s / `cc_arg_list`s that are
|
||||
unconditionally bound to the specified actions.
|
||||
""",
|
||||
),
|
||||
"implies": attr.label_list(
|
||||
|
|
|
@ -163,7 +163,6 @@ ActionTypeConfigInfo = provider(
|
|||
"label": "(Label) The label defining this provider. Place in error messages to simplify debugging",
|
||||
"action_type": "(ActionTypeInfo) The type of the action",
|
||||
"tools": "(Sequence[ToolInfo]) The tool applied to the action will be the first tool in the sequence with a feature set that matches the feature configuration",
|
||||
"args": "(Sequence[ArgsInfo]) Set of flag sets the action sets",
|
||||
"implies": "(depset[FeatureInfo]) Set of features implied by this action config",
|
||||
"files": "(runfiles) The files required to run these actions",
|
||||
},
|
||||
|
|
|
@ -136,8 +136,6 @@ def convert_tool(tool):
|
|||
|
||||
def _convert_action_type_config(atc):
|
||||
implies = sorted([ft.name for ft in atc.implies.to_list()])
|
||||
if atc.args:
|
||||
implies.append("implied_by_%s" % atc.action_type.name)
|
||||
|
||||
return legacy_action_config(
|
||||
action_name = atc.action_type.name,
|
||||
|
@ -167,22 +165,10 @@ def convert_toolchain(toolchain):
|
|||
mutually_exclusive = [],
|
||||
external = False,
|
||||
)))
|
||||
action_configs = []
|
||||
for atc in toolchain.action_type_configs.values():
|
||||
# Action configs don't take in an env like they do a flag set.
|
||||
# In order to support them, we create a feature with the env that the action
|
||||
# config will enable, and imply it in the action config.
|
||||
if atc.args:
|
||||
features.append(convert_feature(FeatureInfo(
|
||||
name = "implied_by_%s" % atc.action_type.name,
|
||||
enabled = False,
|
||||
args = ArgsListInfo(args = atc.args),
|
||||
implies = depset([]),
|
||||
requires_any_of = [],
|
||||
mutually_exclusive = [],
|
||||
external = False,
|
||||
)))
|
||||
action_configs.append(_convert_action_type_config(atc))
|
||||
action_configs = [
|
||||
_convert_action_type_config(atc)
|
||||
for atc in toolchain.action_type_configs.values()
|
||||
]
|
||||
|
||||
return struct(
|
||||
features = sorted([ft for ft in features if ft != None], key = lambda ft: ft.name),
|
||||
|
|
|
@ -116,8 +116,6 @@ def _validate_action_config(self, known_features, fail):
|
|||
_validate_implies(self, known_features, fail = fail)
|
||||
for tool in self.tools:
|
||||
_validate_tool(tool, known_features, fail = fail)
|
||||
for args in self.args:
|
||||
_validate_args(args, known_features, fail = fail)
|
||||
|
||||
def _validate_feature(self, known_features, fail):
|
||||
_validate_requires_any_of_feature_set(self, known_features, fail = fail)
|
||||
|
|
|
@ -7,7 +7,6 @@ util.helper_target(
|
|||
cc_action_type_config,
|
||||
name = "file_map",
|
||||
action_types = ["//tests/rule_based_toolchain/actions:all_compile"],
|
||||
args = ["//tests/rule_based_toolchain/args_list"],
|
||||
data = [
|
||||
"//tests/rule_based_toolchain/testdata:multiple2",
|
||||
],
|
||||
|
|
|
@ -31,36 +31,16 @@ _TOOL_FILES = [
|
|||
_ADDITIONAL_FILES = [
|
||||
"tests/rule_based_toolchain/testdata/multiple2",
|
||||
]
|
||||
_C_COMPILE_FILES = [
|
||||
"tests/rule_based_toolchain/testdata/file1",
|
||||
"tests/rule_based_toolchain/testdata/multiple1",
|
||||
]
|
||||
_CPP_COMPILE_FILES = [
|
||||
"tests/rule_based_toolchain/testdata/file2",
|
||||
"tests/rule_based_toolchain/testdata/multiple1",
|
||||
]
|
||||
|
||||
collect_action_type_configs = result_fn_wrapper(_collect_action_type_configs)
|
||||
|
||||
def _files_taken_test(env, targets):
|
||||
configs = env.expect.that_target(targets.file_map).provider(ActionTypeConfigSetInfo).configs()
|
||||
c_compile = configs.get(targets.c_compile[ActionTypeInfo])
|
||||
c_compile.files().contains_exactly(
|
||||
_C_COMPILE_FILES + _TOOL_FILES + _ADDITIONAL_FILES,
|
||||
)
|
||||
c_compile.args().contains_exactly([
|
||||
targets.c_compile_args.label,
|
||||
targets.all_compile_args.label,
|
||||
])
|
||||
c_compile.files().contains_exactly(_TOOL_FILES + _ADDITIONAL_FILES)
|
||||
|
||||
cpp_compile = configs.get(targets.cpp_compile[ActionTypeInfo])
|
||||
cpp_compile.files().contains_exactly(
|
||||
_CPP_COMPILE_FILES + _TOOL_FILES + _ADDITIONAL_FILES,
|
||||
)
|
||||
cpp_compile.args().contains_exactly([
|
||||
targets.cpp_compile_args.label,
|
||||
targets.all_compile_args.label,
|
||||
])
|
||||
cpp_compile.files().contains_exactly(_TOOL_FILES + _ADDITIONAL_FILES)
|
||||
|
||||
def _merge_distinct_configs_succeeds_test(env, targets):
|
||||
configs = env.expect.that_value(
|
||||
|
@ -95,10 +75,6 @@ TARGETS = [
|
|||
":cpp_compile_config",
|
||||
"//tests/rule_based_toolchain/actions:c_compile",
|
||||
"//tests/rule_based_toolchain/actions:cpp_compile",
|
||||
"//tests/rule_based_toolchain/args_list:c_compile_args",
|
||||
"//tests/rule_based_toolchain/args_list:cpp_compile_args",
|
||||
"//tests/rule_based_toolchain/args_list:all_compile_args",
|
||||
"//tests/rule_based_toolchain/args_list:args_list",
|
||||
]
|
||||
|
||||
TESTS = {
|
||||
|
|
|
@ -191,7 +191,6 @@ _ActionTypeConfigFactory = generate_factory(
|
|||
dict(
|
||||
action_type = _ActionTypeFactory,
|
||||
tools = ProviderSequence(_ToolFactory),
|
||||
args = ProviderSequence(_ArgsFactory),
|
||||
implies = ProviderDepset(_FeatureFactory),
|
||||
files = runfiles_subject,
|
||||
),
|
||||
|
|
|
@ -80,7 +80,6 @@ util.helper_target(
|
|||
cc_action_type_config,
|
||||
name = "compile_config",
|
||||
action_types = ["//tests/rule_based_toolchain/actions:all_compile"],
|
||||
args = [":cpp_compile_args"],
|
||||
tools = [
|
||||
"//tests/rule_based_toolchain/tool:wrapped_tool",
|
||||
],
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
load(
|
||||
"//cc:cc_toolchain_config_lib.bzl",
|
||||
legacy_action_config = "action_config",
|
||||
legacy_env_entry = "env_entry",
|
||||
legacy_env_set = "env_set",
|
||||
legacy_feature = "feature",
|
||||
legacy_flag_group = "flag_group",
|
||||
legacy_flag_set = "flag_set",
|
||||
|
@ -223,20 +221,6 @@ def _toolchain_collects_files_test(env, targets):
|
|||
],
|
||||
)],
|
||||
),
|
||||
legacy_feature(
|
||||
name = "implied_by_cpp_compile",
|
||||
enabled = False,
|
||||
flag_sets = [legacy_flag_set(
|
||||
actions = ["cpp_compile"],
|
||||
flag_groups = [
|
||||
legacy_flag_group(flags = ["cpp_compile_args"]),
|
||||
],
|
||||
)],
|
||||
env_sets = [legacy_env_set(
|
||||
actions = ["cpp_compile"],
|
||||
env_entries = [legacy_env_entry(key = "CPP_COMPILE", value = "1")],
|
||||
)],
|
||||
),
|
||||
]).in_order()
|
||||
|
||||
exe = tc.action_type_configs().get(
|
||||
|
@ -252,7 +236,7 @@ def _toolchain_collects_files_test(env, targets):
|
|||
action_name = "cpp_compile",
|
||||
enabled = True,
|
||||
tools = [legacy_tool(tool = exe)],
|
||||
implies = ["implied_by_cpp_compile"],
|
||||
implies = [],
|
||||
),
|
||||
]).in_order()
|
||||
|
||||
|
|
Loading…
Reference in New Issue