load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "OBJ_COPY_ACTION_NAME") load("@rules_cc//cc:find_cc_toolchain.bzl", "find_cpp_toolchain", "use_cc_toolchain") def _objcopy_to_bin_impl(ctx): cc_toolchain = find_cpp_toolchain(ctx) feature_configuration = cc_common.configure_features( ctx = ctx, cc_toolchain = cc_toolchain, requested_features = ctx.features, unsupported_features = ctx.disabled_features, ) objcopy_tool_path = cc_common.get_tool_for_action( feature_configuration = feature_configuration, action_name = OBJ_COPY_ACTION_NAME, ) ctx.actions.run( inputs = depset( direct = [ctx.file.src], transitive = [cc_toolchain.all_files], ), executable = objcopy_tool_path, outputs = [ctx.outputs.out], arguments = [ ctx.file.src.path, "-Obinary", ctx.outputs.out.path, ], ) objcopy_to_bin = rule( implementation = _objcopy_to_bin_impl, attrs = { "src": attr.label( allow_single_file = True, mandatory = True, doc = "File to use as input to objcopy command", ), "out": attr.output( mandatory = True, doc = "Destination file for objcopy command", ), }, fragments = ["cpp"], toolchains = use_cc_toolchain(), )