forked from uber/hermetic_cc_toolchain
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrepositories.bzl
More file actions
104 lines (91 loc) · 3.22 KB
/
repositories.bzl
File metadata and controls
104 lines (91 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
load("@hermetic_cc_toolchain//toolchain:utils.bzl", "quote")
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "transform_arch_name", "transform_os_name")
def _define_zig_toolchains(repository_ctx, configs, package = ""):
extra_target_settings = "[" + " ".join([quote(str(setting)) + "," for setting in repository_ctx.attr.extra_target_settings]) + "]"
repository_ctx.template(
"toolchain/{}BUILD".format(package),
Label("//toolchain/toolchain:BUILD.bazel.tmpl"),
executable = False,
substitutions = {
"{configs}": repr(configs),
"{extra_target_settings}": extra_target_settings,
},
)
repository_ctx.template(
"libc_aware/toolchain/{}BUILD".format(package),
Label("//toolchain/libc_aware/toolchain:BUILD.bazel.tmpl"),
executable = False,
substitutions = {
"{configs}": repr(configs),
"{extra_target_settings}": extra_target_settings,
},
)
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,
),
"extra_target_settings": attr.label_list(
doc = "Additional settings to add to the generated toolchains, to make them more restrictive",
),
},
implementation = _zig_sdk_repository_impl,
)