rules/zig_binary.bzl (44 lines of code) (raw):
def _impl(ctx):
zig_info = ctx.toolchains["@zig_sdk//toolchain/zig:toolchain_type"].ziginfo
dst = ctx.actions.declare_file(ctx.label.name)
macos = ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]
aarch64 = ctx.attr._aarch64_constraint[platform_common.ConstraintValueInfo]
if ctx.target_platform_has_constraint(macos) and ctx.target_platform_has_constraint(aarch64):
mcpu = "apple_a14"
else:
mcpu = "baseline"
ctx.actions.run(
inputs = [ctx.file.src],
outputs = [dst],
executable = zig_info.zig,
tools = zig_info.data,
arguments = [
"build-exe",
ctx.file.src.short_path,
"-mcpu={}".format(mcpu),
"-femit-bin={}".format(dst.path),
],
mnemonic = "ZigBuildExe",
toolchain = "@zig_sdk//toolchain/zig:toolchain_type",
progress_message = "Compiling '%{input}' to create '%{output}'",
)
return [DefaultInfo(
files = depset([dst]),
executable = dst,
)]
zig_binary = rule(
implementation = _impl,
attrs = {
"src": attr.label(
allow_single_file = [".zig"],
),
"_macos_constraint": attr.label(
default = "@platforms//os:macos",
),
"_aarch64_constraint": attr.label(
default = "@platforms//cpu:aarch64",
),
},
toolchains = ["@zig_sdk//toolchain/zig:toolchain_type"],
executable = True,
)