toolchain/private/repositories.bzl (84 lines of code) (raw):
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "transform_arch_name", "transform_os_name")
def _define_zig_toolchains(repository_ctx, configs, package = ""):
repository_ctx.template(
"toolchain/{}BUILD".format(package),
Label("//toolchain/toolchain:BUILD.bazel.tmpl"),
executable = False,
substitutions = {
"{configs}": repr(configs),
},
)
repository_ctx.template(
"libc_aware/toolchain/{}BUILD".format(package),
Label("//toolchain/libc_aware/toolchain:BUILD.bazel.tmpl"),
executable = False,
substitutions = {
"{configs}": repr(configs),
},
)
def _zig_sdk_repository_impl(repository_ctx):
_os = transform_os_name(repository_ctx.os.name)
_arch = transform_arch_name(repository_ctx.os.arch)
_toolchain_type = """
package(
default_visibility = ["//visibility:public"],
)
toolchain_type(
name = "toolchain_type",
)
"""
_build = """
package(
default_visibility = ["//visibility:public"],
)
alias(
name = "zig",
actual = "@zig_config//:zig",
)
"""
repository_ctx.file(
"BUILD.bazel",
_build,
)
repository_ctx.file(
"toolchain/zig/BUILD.bazel",
_toolchain_type,
)
repository_ctx.file(
"libc/BUILD.bazel",
repository_ctx.read(Label("//toolchain/libc:BUILD")),
)
repository_ctx.file(
"platform/BUILD.bazel",
repository_ctx.read(Label("//toolchain/platform:BUILD")),
)
repository_ctx.file(
"libc_aware/platform/BUILD.bazel",
repository_ctx.read(Label("//toolchain/libc_aware/platform:BUILD")),
)
# toolchains for the HOST
_define_zig_toolchains(repository_ctx, "@zig_config")
# Remove the HOST to not duplicate Zig HOST toolchains (@zig_config)
exec_platforms = dict(repository_ctx.attr.exec_platforms)
exec_archs = exec_platforms.get(_os, list())
exec_platforms[_os] = [a for a in exec_archs if a != _arch]
for os, archs in exec_platforms.items():
for arch in archs:
_os = transform_os_name(os)
_arch = transform_arch_name(arch)
configs = "@zig_config-{}-{}".format(_os, _arch)
package = "{}-{}/".format(_os, _arch)
_define_zig_toolchains(repository_ctx, configs, package = package)
zig_sdk_repository = repository_rule(
doc = "Creates common constraint & platform definitions.",
attrs = {
"host_only": attr.bool(
default = False,
),
"exec_platforms": attr.string_list_dict(
doc = "Dictionary, where the keys are oses and the values are lists of supported architectures",
mandatory = True,
),
},
implementation = _zig_sdk_repository_impl,
)