diff --git a/src/darwin_universal_binary.bzl b/src/darwin_universal_binary.bzl index a4eb8f3af52fa7..3e3e8a9138201d 100644 --- a/src/darwin_universal_binary.bzl +++ b/src/darwin_universal_binary.bzl @@ -1,30 +1,27 @@ -def _intel_transition_impl(ctx, attr): +def _universal_split_transition_impl(ctx, attr): return { - "//command_line_option:cpu": "darwin_x86_64", + "x86_64" : { + "//command_line_option:cpu": "darwin_x86_64", + }, + "arm64" : { + "//command_line_option:cpu": "darwin_arm64", + } } -intel_transition = transition( - implementation = _intel_transition_impl, - inputs = ["//command_line_option:cpu"], - outputs = ["//command_line_option:cpu"], -) - -def _arm_transition_impl(ctx, attr): - return { - "//command_line_option:cpu": "darwin_arm64", - } - -arm_transition = transition( - implementation = _arm_transition_impl, - inputs = ["//command_line_option:cpu"], +_universal_split_transition = transition( + implementation = _universal_split_transition_impl, + inputs = [], outputs = ["//command_line_option:cpu"], ) def _impl(ctx): + binaries = [ + attr.files.to_list()[0] for attr in ctx.split_attr.binary.values() + ] out = ctx.actions.declare_file(ctx.attr.output_name) args = ctx.actions.args() args.add("-create") - args.add_all([ctx.executable.intel_binary, ctx.executable.arm_binary]) + args.add_all(binaries) args.add("-output", out) apple_env = {} xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig] @@ -38,37 +35,20 @@ def _impl(ctx): ctx.actions.run( executable = "/usr/bin/lipo", arguments = [args], - inputs = [ctx.executable.intel_binary, ctx.executable.arm_binary], + inputs = binaries, outputs = [out], execution_requirements = xcode_config.execution_info(), env = apple_env, ) return DefaultInfo(executable = out) -_universal_binary = rule( +darwin_universal_binary = rule( implementation = _impl, attrs = { "output_name" : attr.string(), - "intel_binary": attr.label( - cfg = intel_transition, - executable = True, - ), - "arm_binary": attr.label( - cfg = arm_transition, - executable = True, - ), - "_xcode_config": attr.label( - default = "@bazel_tools//tools/osx:current_xcode_config", - ), + "binary": attr.label(cfg = _universal_split_transition), + "_xcode_config": attr.label(default = "@bazel_tools//tools/osx:current_xcode_config"), "_allowlist_function_transition": attr.label(default = "//tools/allowlists/function_transition_allowlist"), }, fragments = ["apple"], -) - -def darwin_universal_binary(name, binary, output_name): - _universal_binary( - name = name, - intel_binary = binary, - arm_binary = binary, - output_name = output_name, - ) +) \ No newline at end of file