• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1load("@rules_cc//cc:defs.bzl", "cc_toolchain")
2load("//bazel:skia_rules.bzl", "exports_files_legacy")
3load(":linux_amd64_toolchain_config.bzl", "provide_linux_amd64_toolchain_config")
4load(":mac_toolchain_config.bzl", "provide_mac_toolchain_config")
5load(":ndk_linux_arm64_toolchain_config.bzl", "ndk_cc_toolchain_config")
6
7package(
8    default_applicable_licenses = ["//:license"],
9)
10
11licenses(["notice"])
12
13exports_files_legacy()
14
15# https://bazel.build/docs/toolchains
16# https://bazel.build/reference/be/platform#toolchain
17toolchain(
18    name = "clang_linux_x64_toolchain",
19    # Where should we run this toolchain?
20    exec_compatible_with = [
21        "@platforms//os:linux",
22        "@platforms//cpu:x86_64",
23        # We do not want an extra constraint here related to the hermetic toolchain because
24        # we want the toolchain to run on any Linux x64 machine (and it certainly can).
25    ],
26    # What can this toolchain build?
27    target_compatible_with = [
28        "@platforms//os:linux",
29        "@platforms//cpu:x86_64",
30        # We want to be able to explicitly tell Bazel to use this toolchain, and not the
31        # default one on a user's machine or on the RBE worker. Thus we need an extra constraint
32        # that we can use to differentiate the "stock" C++ toolchain from our hermetic one and
33        # force that use by specifying the target platform.
34        "//bazel/platform:use_hermetic_toolchain",
35    ],
36    toolchain = ":linux_amd64_host",
37    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
38    toolchain_type = "@rules_cc//cc:toolchain_type",
39)
40
41# Our one mac toolchain can run on either Intel Macs or M1 Macs, however Bazel does not allow you to specify
42# more than one cpu type in exec_compatible_with. Thus, we list the same toolchain twice.
43toolchain(
44    name = "clang_mac_x64_toolchain",
45    exec_compatible_with = [
46        "@platforms//os:macos",
47        "@platforms//cpu:x86_64",
48    ],
49    target_compatible_with = [
50        "@platforms//os:macos",
51        "@platforms//cpu:x86_64",
52        "//bazel/platform:use_hermetic_toolchain",
53    ],
54    toolchain = ":mac_host",
55    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
56    toolchain_type = "@rules_cc//cc:toolchain_type",
57)
58
59toolchain(
60    name = "clang_mac_arm64_toolchain",
61    exec_compatible_with = [
62        "@platforms//os:macos",
63        "@platforms//cpu:arm64",
64    ],
65    target_compatible_with = [
66        "@platforms//os:macos",
67        "@platforms//cpu:arm64",
68        "//bazel/platform:use_hermetic_toolchain",
69    ],
70    toolchain = ":mac_host",
71    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
72    toolchain_type = "@rules_cc//cc:toolchain_type",
73)
74
75# Cross compilation toolchain for an Intel Mac host and Apple silicon target
76toolchain(
77    name = "clang_host_mac_x64_target_mac_arm64_toolchain",
78    exec_compatible_with = [
79        "@platforms//os:macos",
80        "@platforms//cpu:x86_64",
81    ],
82    target_compatible_with = [
83        "@platforms//os:macos",
84        "@platforms//cpu:arm64",
85        "//bazel/platform:use_hermetic_toolchain",
86    ],
87    toolchain = ":mac_target_arm64",
88    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
89    toolchain_type = "@rules_cc//cc:toolchain_type",
90)
91
92# Based on:
93# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#28
94toolchain(
95    name = "linux_amd64_ndk_arm64_toolchain",
96    exec_compatible_with = [
97        "@platforms//os:linux",
98        "@platforms//cpu:x86_64",
99    ],
100    target_compatible_with = [
101        "@platforms//os:android",
102        "@platforms//cpu:arm64",
103    ],
104    toolchain = ":linux_amd64_ndk_arm64",
105    toolchain_type = "@rules_cc//cc:toolchain_type",
106)
107
108# Based on:
109# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#42
110toolchain(
111    name = "linux_amd64_ndk_arm32_toolchain",
112    exec_compatible_with = [
113        "@platforms//os:linux",
114        "@platforms//cpu:x86_64",
115    ],
116    target_compatible_with = [
117        "@platforms//os:android",
118        "@platforms//cpu:armv7",
119    ],
120    toolchain = ":linux_amd64_ndk_arm32",
121    toolchain_type = "@rules_cc//cc:toolchain_type",
122)
123
124filegroup(name = "not_implemented")
125
126filegroup(
127    name = "archive_linux_amd64_files",
128    srcs = [
129        "linux_trampolines/ar_trampoline_linux.sh",
130        "@clang_linux_amd64//:archive_files",
131    ],
132)
133
134filegroup(
135    name = "compile_linux_amd64_files",
136    srcs = [
137        "linux_trampolines/IWYU_mapping.imp",
138        "linux_trampolines/clang_trampoline_linux.sh",
139        "@clang_linux_amd64//:compile_files",
140    ],
141)
142
143filegroup(
144    name = "link_linux_amd64_files",
145    srcs = [
146        # Bazel usually assumes it is talking to Clang when linking.
147        "linux_trampolines/clang_trampoline_linux.sh",
148        "@clang_linux_amd64//:link_files",
149    ],
150)
151
152filegroup(
153    name = "archive_mac_files",
154    srcs = [
155        "mac_trampolines/ar_trampoline_mac.sh",
156        "@clang_mac//:archive_files",
157    ],
158)
159
160filegroup(
161    name = "compile_mac_files",
162    srcs = [
163        "mac_trampolines/clang_trampoline_mac.sh",
164        "@clang_mac//:compile_files",
165    ],
166)
167
168filegroup(
169    name = "link_mac_files",
170    srcs = [
171        "mac_trampolines/clang_trampoline_mac.sh",
172        "@clang_mac//:link_files",
173    ],
174)
175
176filegroup(
177    name = "all_linux_amd64_files",
178    srcs = [
179        ":archive_linux_amd64_files",
180        ":compile_linux_amd64_files",
181        ":link_linux_amd64_files",
182    ],
183)
184
185filegroup(
186    name = "all_mac_files",
187    srcs = [
188        ":archive_mac_files",
189        ":compile_mac_files",
190        ":link_mac_files",
191    ],
192)
193
194provide_linux_amd64_toolchain_config(
195    name = "linux_amd64_toolchain_config",
196)
197
198provide_mac_toolchain_config(
199    name = "mac_toolchain_config",
200)
201
202provide_mac_toolchain_config(
203    name = "mac_arm64_toolchain_config",
204    cpu = "arm64",
205)
206
207# https://bazel.build/reference/be/c-cpp#cc_toolchain
208cc_toolchain(
209    name = "linux_amd64_host",
210    # Use by the rust toolchain when linking
211    # https://github.com/bazelbuild/rules_rust/blob/dab425760656c449d3a0f73c490be92c240b6ef2/rust/private/rustc.bzl#L627
212    all_files = ":all_linux_amd64_files",
213    ar_files = ":archive_linux_amd64_files",
214    compiler_files = ":compile_linux_amd64_files",
215    dwp_files = ":not_implemented",
216    linker_files = ":link_linux_amd64_files",
217    module_map = "@clang_linux_amd64//:generated_module_map",
218    objcopy_files = ":not_implemented",
219    strip_files = ":not_implemented",
220    supports_param_files = False,
221    toolchain_config = ":linux_amd64_toolchain_config",
222)
223
224cc_toolchain(
225    name = "mac_host",
226    all_files = ":all_mac_files",  # Apparently also used to compile objc code
227    ar_files = ":archive_mac_files",
228    compiler_files = ":compile_mac_files",
229    dwp_files = ":not_implemented",
230    linker_files = ":link_mac_files",
231    module_map = "@clang_mac//:generated_module_map",
232    objcopy_files = ":not_implemented",
233    strip_files = ":not_implemented",
234    supports_param_files = False,
235    toolchain_config = ":mac_toolchain_config",
236)
237
238cc_toolchain(
239    name = "mac_target_arm64",
240    all_files = ":all_mac_files",  # Apparently also used to compile objc code
241    ar_files = ":archive_mac_files",
242    compiler_files = ":compile_mac_files",
243    dwp_files = ":not_implemented",
244    linker_files = ":link_mac_files",
245    module_map = "@clang_mac//:generated_module_map",
246    objcopy_files = ":not_implemented",
247    strip_files = ":not_implemented",
248    supports_param_files = False,
249    toolchain_config = ":mac_arm64_toolchain_config",
250)
251
252filegroup(
253    name = "ndk_arm64_v8a_toolchain_all_files",
254    srcs = [
255        "android_trampolines/aarch64-linux-android-ar.sh",
256        "android_trampolines/aarch64-linux-android-dwp.sh",
257        "android_trampolines/aarch64-linux-android-ld.sh",
258        "android_trampolines/aarch64-linux-android-nm.sh",
259        "android_trampolines/aarch64-linux-android-objcopy.sh",
260        "android_trampolines/aarch64-linux-android-objdump.sh",
261        "android_trampolines/aarch64-linux-android-strip.sh",
262        "android_trampolines/clang.sh",
263    ] + ["@ndk_linux_amd64//:arm64_v8a_all_files"],
264)
265
266ndk_cc_toolchain_config(
267    name = "ndk_arm64_v8a_toolchain_config",
268    cpu = "arm64-v8a",
269)
270
271# Based on:
272# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#109
273cc_toolchain(
274    name = "linux_amd64_ndk_arm64",
275    all_files = ":ndk_arm64_v8a_toolchain_all_files",
276    ar_files = ":ndk_arm64_v8a_toolchain_all_files",
277    compiler_files = ":ndk_arm64_v8a_toolchain_all_files",
278    dwp_files = ":not_implemented",
279    dynamic_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_dynamic_runtime_libraries",
280    linker_files = ":ndk_arm64_v8a_toolchain_all_files",
281    objcopy_files = ":not_implemented",
282    static_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_static_runtime_libraries",
283    strip_files = ":not_implemented",
284    supports_param_files = False,
285    toolchain_config = ":ndk_arm64_v8a_toolchain_config",
286)
287
288filegroup(
289    name = "ndk_armeabi_v7a_toolchain_all_files",
290    srcs = [
291        "android_trampolines/arm-linux-androideabi-ar.sh",
292        "android_trampolines/arm-linux-androideabi-dwp.sh",
293        "android_trampolines/arm-linux-androideabi-ld.sh",
294        "android_trampolines/arm-linux-androideabi-nm.sh",
295        "android_trampolines/arm-linux-androideabi-objcopy.sh",
296        "android_trampolines/arm-linux-androideabi-objdump.sh",
297        "android_trampolines/arm-linux-androideabi-strip.sh",
298        "android_trampolines/clang.sh",
299    ] + ["@ndk_linux_amd64//:armeabi_v7a_all_files"],
300)
301
302ndk_cc_toolchain_config(
303    name = "ndk_armeabi_v7a_toolchain_config",
304    cpu = "armeabi-v7a",
305)
306
307# Based on:
308# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#139
309cc_toolchain(
310    name = "linux_amd64_ndk_arm32",
311    all_files = ":ndk_armeabi_v7a_toolchain_all_files",
312    ar_files = ":ndk_armeabi_v7a_toolchain_all_files",
313    compiler_files = ":ndk_armeabi_v7a_toolchain_all_files",
314    dwp_files = ":not_implemented",
315    dynamic_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_dynamic_runtime_libraries",
316    linker_files = ":ndk_armeabi_v7a_toolchain_all_files",
317    objcopy_files = ":not_implemented",
318    static_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_static_runtime_libraries",
319    strip_files = ":not_implemented",
320    supports_param_files = False,
321    toolchain_config = ":ndk_armeabi_v7a_toolchain_config",
322)
323