Skip to content

Commit

Permalink
Use split transition
Browse files Browse the repository at this point in the history
  • Loading branch information
hvadehra committed Dec 13, 2022
1 parent 4a87318 commit 0d68448
Showing 1 changed file with 19 additions and 39 deletions.
58 changes: 19 additions & 39 deletions src/darwin_universal_binary.bzl
Original file line number Diff line number Diff line change
@@ -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]
Expand All @@ -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,
)
)

0 comments on commit 0d68448

Please sign in to comment.