diff --git a/tests/rule_based_toolchain/legacy_features_as_args/BUILD b/tests/rule_based_toolchain/legacy_features_as_args/BUILD index 510f0c483..c56aa32be 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/BUILD +++ b/tests/rule_based_toolchain/legacy_features_as_args/BUILD @@ -9,50 +9,98 @@ load(":compare_feature.bzl", "compare_feature_implementation") # for slight differences in structure due to implementation details. This also # makes it easier to review the final results. +platform( + name = "linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:x86_64", + ], +) + +platform( + name = "macos", + constraint_values = [ + "@platforms//os:macos", + "@platforms//cpu:x86_64", + ], +) + +compare_feature_implementation( + name = "archiver_flags_macos_test", + actual_implementation = "//cc/toolchains/args/archiver_flags", + expected = "goldens/macos/archiver_flags.textproto", + feature_name = "archiver_flags_test", + platform = ":macos", +) + compare_feature_implementation( - name = "archiver_flags_test", + name = "archiver_flags_unix_test", actual_implementation = "//cc/toolchains/args/archiver_flags", - expected = select({ - "@platforms//os:macos": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/macos/archiver_flags.textproto", - "//conditions:default": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/archiver_flags.textproto", - }), + expected = "goldens/unix/archiver_flags.textproto", + feature_name = "archiver_flags_test", + platform = ":linux", +) + +compare_feature_implementation( + name = "force_pic_flags_macos_test", + actual_implementation = "//cc/toolchains/args/pic_flags:force_pic_flags", + expected = "goldens/macos/force_pic_flags.textproto", + feature_name = "force_pic_flags_test", + platform = ":macos", ) compare_feature_implementation( - name = "force_pic_flags_test", + name = "force_pic_flags_unix_test", actual_implementation = "//cc/toolchains/args/pic_flags:force_pic_flags", - expected = select({ - "@platforms//os:macos": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/macos/force_pic_flags.textproto", - "//conditions:default": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/force_pic_flags.textproto", - }), + expected = "goldens/unix/force_pic_flags.textproto", + feature_name = "force_pic_flags_test", + platform = ":linux", +) + +compare_feature_implementation( + name = "libraries_to_link_macos_test", + actual_implementation = "//cc/toolchains/args/libraries_to_link", + expected = "goldens/macos/libraries_to_link.textproto", + feature_name = "libraries_to_link_test", + platform = ":macos", ) compare_feature_implementation( - name = "libraries_to_link_test", + name = "libraries_to_link_unix_test", actual_implementation = "//cc/toolchains/args/libraries_to_link", - expected = select({ - "@platforms//os:macos": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/macos/libraries_to_link.textproto", - "//conditions:default": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/libraries_to_link.textproto", - }), + expected = "goldens/unix/libraries_to_link.textproto", + feature_name = "libraries_to_link_test", + platform = ":linux", ) compare_feature_implementation( name = "linker_param_file_test", actual_implementation = "//cc/toolchains/args/linker_param_file", - expected = "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/linker_param_file.textproto", + expected = "goldens/unix/linker_param_file.textproto", + feature_name = "linker_param_file_test", + platform = ":linux", +) + +compare_feature_implementation( + name = "runtime_library_search_directories_macos_test", + actual_implementation = "//cc/toolchains/args/runtime_library_search_directories", + expected = "goldens/macos/runtime_library_search_directories.textproto", + feature_name = "runtime_library_search_directories_test", + platform = ":macos", ) compare_feature_implementation( - name = "runtime_library_search_directories_test", + name = "runtime_library_search_directories_unix_test", actual_implementation = "//cc/toolchains/args/runtime_library_search_directories", - expected = select({ - "@platforms//os:macos": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/macos/runtime_library_search_directories.textproto", - "//conditions:default": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/runtime_library_search_directories.textproto", - }), + expected = "goldens/unix/runtime_library_search_directories.textproto", + feature_name = "runtime_library_search_directories_test", + platform = ":linux", ) compare_feature_implementation( name = "shared_flag_test", actual_implementation = "//cc/toolchains/args/shared_flag", - expected = "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/shared_flag.textproto", + expected = "goldens/unix/shared_flag.textproto", + feature_name = "shared_flag_test", + platform = ":linux", ) diff --git a/tests/rule_based_toolchain/legacy_features_as_args/compare_feature.bzl b/tests/rule_based_toolchain/legacy_features_as_args/compare_feature.bzl index 10e63a835..fb23c53ca 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/compare_feature.bzl +++ b/tests/rule_based_toolchain/legacy_features_as_args/compare_feature.bzl @@ -18,9 +18,18 @@ load("//cc:cc_toolchain_config_lib.bzl", "feature") load("//cc/toolchains:cc_toolchain_info.bzl", "ArgsListInfo") load("//cc/toolchains/impl:legacy_converter.bzl", "convert_args") +def _force_platform_transition_impl(_settings, attr): + return {"//command_line_option:platforms": [str(attr.platform)]} + +_force_platform_transition = transition( + implementation = _force_platform_transition_impl, + inputs = [], + outputs = ["//command_line_option:platforms"], +) + def _generate_textproto_for_args_impl(ctx): out = ctx.actions.declare_file(ctx.attr.output.name) - converted_args = [convert_args(arg) for arg in ctx.attr.actual_implementation[ArgsListInfo].args] + converted_args = [convert_args(arg) for arg in ctx.attr.actual_implementation[0][ArgsListInfo].args] feature_impl = feature( name = ctx.attr.feature_name, flag_sets = [fs for one_arg in converted_args for fs in one_arg.flag_sets], @@ -39,19 +48,33 @@ _generate_textproto_for_args = rule( "actual_implementation": attr.label( mandatory = True, providers = [ArgsListInfo], + cfg = _force_platform_transition, ), "feature_name": attr.string(mandatory = True), "output": attr.output(mandatory = True), + "platform": attr.label(mandatory = True), }, ) -def compare_feature_implementation(name, actual_implementation, expected): +def compare_feature_implementation(name, actual_implementation, expected, platform, feature_name = None): + """Compares the feature implementation of a given ArgsListInfo against an expected textproto. + + Args: + name: The name of the test. + actual_implementation: The label of the rule that provides ArgsListInfo to be tested. + expected: The file containing the expected textproto output. + platform: The platform to transition to for testing. + feature_name: The name of the feature to extract from the ArgsListInfo. If None, defaults to the test name. + """ + if feature_name == None: + feature_name = name output_filename = name + ".actual.textproto" _generate_textproto_for_args( name = name + "_implementation", actual_implementation = actual_implementation, - feature_name = name, + feature_name = feature_name, output = output_filename, + platform = platform, testonly = True, ) diff_test(