diff options
Diffstat (limited to 'tools/migration/cc_toolchain_config_comparator.bzl')
-rw-r--r-- | tools/migration/cc_toolchain_config_comparator.bzl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/migration/cc_toolchain_config_comparator.bzl b/tools/migration/cc_toolchain_config_comparator.bzl new file mode 100644 index 0000000..66746b3 --- /dev/null +++ b/tools/migration/cc_toolchain_config_comparator.bzl @@ -0,0 +1,53 @@ +"""A test rule that compares two C++ toolchain configuration rules in proto format.""" + +def _impl(ctx): + first_toolchain_config_proto = ctx.actions.declare_file( + ctx.label.name + "_first_toolchain_config.proto", + ) + ctx.actions.write( + first_toolchain_config_proto, + ctx.attr.first[CcToolchainConfigInfo].proto, + ) + + second_toolchain_config_proto = ctx.actions.declare_file( + ctx.label.name + "_second_toolchain_config.proto", + ) + ctx.actions.write( + second_toolchain_config_proto, + ctx.attr.second[CcToolchainConfigInfo].proto, + ) + + script = ("%s --before='%s' --after='%s'" % ( + ctx.executable._comparator.short_path, + first_toolchain_config_proto.short_path, + second_toolchain_config_proto.short_path, + )) + test_executable = ctx.actions.declare_file(ctx.label.name) + ctx.actions.write(test_executable, script, is_executable = True) + + runfiles = ctx.runfiles(files = [first_toolchain_config_proto, second_toolchain_config_proto]) + runfiles = runfiles.merge(ctx.attr._comparator[DefaultInfo].default_runfiles) + + return DefaultInfo(runfiles = runfiles, executable = test_executable) + +cc_toolchain_config_compare_test = rule( + implementation = _impl, + attrs = { + "first": attr.label( + mandatory = True, + providers = [CcToolchainConfigInfo], + doc = "A C++ toolchain config rule", + ), + "second": attr.label( + mandatory = True, + providers = [CcToolchainConfigInfo], + doc = "A C++ toolchain config rule", + ), + "_comparator": attr.label( + default = ":ctoolchain_comparator", + executable = True, + cfg = "exec", + ), + }, + test = True, +) |