"""A test rule that compares two CToolchains in proto format.""" def _impl(ctx): toolchain_config_proto = ctx.actions.declare_file(ctx.label.name + "_toolchain_config.proto") ctx.actions.write( toolchain_config_proto, ctx.attr.toolchain_config[CcToolchainConfigInfo].proto, ) script = ("%s --before='%s' --after='%s' --toolchain_identifier='%s'" % ( ctx.executable._comparator.short_path, ctx.file.crosstool.short_path, toolchain_config_proto.short_path, ctx.attr.toolchain_identifier, )) test_executable = ctx.actions.declare_file(ctx.label.name) ctx.actions.write(test_executable, script, is_executable = True) runfiles = ctx.runfiles(files = [toolchain_config_proto, ctx.file.crosstool]) runfiles = runfiles.merge(ctx.attr._comparator[DefaultInfo].default_runfiles) return DefaultInfo(runfiles = runfiles, executable = test_executable) cc_toolchains_compare_test = rule( implementation = _impl, attrs = { "crosstool": attr.label( mandatory = True, allow_single_file = True, doc = "Location of the CROSSTOOL file", ), "toolchain_config": attr.label( mandatory = True, providers = [CcToolchainConfigInfo], doc = ("Starlark rule that replaces the CROSSTOOL file functionality " + "for the CToolchain with the given identifier"), ), "toolchain_identifier": attr.string( mandatory = True, doc = "identifier of the CToolchain that is being compared", ), "_comparator": attr.label( default = ":ctoolchain_comparator", executable = True, cfg = "exec", ), }, test = True, )