xref: /aosp_15_r20/external/skia/toolchain/BUILD.bazel (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1load("@rules_cc//cc:defs.bzl", "cc_toolchain")
2load(":ios_toolchain_config.bzl", "provide_ios_toolchain_config")
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")
6load(":windows_toolchain_config.bzl", "provide_windows_amd64_toolchain_config")
7
8package(
9    default_applicable_licenses = ["//:license"],
10)
11
12licenses(["notice"])
13
14# https://bazel.build/docs/toolchains
15# https://bazel.build/reference/be/platform#toolchain
16toolchain(
17    name = "clang_linux_x64_toolchain",
18    # Where should we run this toolchain?
19    exec_compatible_with = [
20        "@platforms//os:linux",
21        "@platforms//cpu:x86_64",
22        # We do not want an extra constraint here related to the hermetic toolchain because
23        # we want the toolchain to run on any Linux x64 machine (and it certainly can).
24    ],
25    # What can this toolchain build?
26    target_compatible_with = [
27        "@platforms//os:linux",
28        "@platforms//cpu:x86_64",
29        # We want to be able to explicitly tell Bazel to use this toolchain, and not the
30        # default one on a user's machine or on the RBE worker. Thus we need an extra constraint
31        # that we can use to differentiate the "stock" C++ toolchain from our hermetic one and
32        # force that use by specifying the target platform.
33        "//bazel/platform:use_hermetic_toolchain",
34    ],
35    toolchain = ":linux_amd64_host",
36    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
37    toolchain_type = "@rules_cc//cc:toolchain_type",
38)
39
40# Our one mac toolchain can run on either Intel Macs or M1 Macs, however Bazel does not allow you to specify
41# more than one cpu type in exec_compatible_with. Thus, we list the same toolchain twice.
42toolchain(
43    name = "clang_mac_x64_toolchain",
44    exec_compatible_with = [
45        "@platforms//os:macos",
46        "@platforms//cpu:x86_64",
47    ],
48    target_compatible_with = [
49        "@platforms//os:macos",
50        "@platforms//cpu:x86_64",
51        "//bazel/platform:use_hermetic_toolchain",
52    ],
53    toolchain = ":mac_host",
54    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
55    toolchain_type = "@rules_cc//cc:toolchain_type",
56)
57
58toolchain(
59    name = "clang_mac_arm64_toolchain",
60    exec_compatible_with = [
61        "@platforms//os:macos",
62        "@platforms//cpu:arm64",
63    ],
64    target_compatible_with = [
65        "@platforms//os:macos",
66        "@platforms//cpu:arm64",
67        "//bazel/platform:use_hermetic_toolchain",
68    ],
69    toolchain = ":mac_host",
70    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
71    toolchain_type = "@rules_cc//cc:toolchain_type",
72)
73
74# Cross compilation toolchain for an Intel Mac host and Apple silicon target
75toolchain(
76    name = "clang_host_mac_x64_target_mac_arm64_toolchain",
77    exec_compatible_with = [
78        "@platforms//os:macos",
79        "@platforms//cpu:x86_64",
80    ],
81    target_compatible_with = [
82        "@platforms//os:macos",
83        "@platforms//cpu:arm64",
84        "//bazel/platform:use_hermetic_toolchain",
85    ],
86    toolchain = ":mac_target_arm64",
87    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
88    toolchain_type = "@rules_cc//cc:toolchain_type",
89)
90
91# Windows x64 toolchain.
92toolchain(
93    name = "clang_windows_x64_toolchain",
94    exec_compatible_with = [
95        "@platforms//os:windows",
96        "@platforms//cpu:x86_64",
97    ],
98    target_compatible_with = [
99        "@platforms//os:windows",
100        "@platforms//cpu:x86_64",
101        "//bazel/platform:use_hermetic_toolchain",
102    ],
103    toolchain = ":windows_host",
104    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
105    toolchain_type = "@rules_cc//cc:toolchain_type",
106)
107
108toolchain(
109    name = "clang_ios_arm64_toolchain",
110    exec_compatible_with = [
111        "@platforms//os:macos",
112        "@platforms//cpu:arm64",
113    ],
114    target_compatible_with = [
115        "@platforms//os:ios",
116        "@platforms//cpu:arm64",
117    ],
118    toolchain = ":ios_target_arm64",
119    # https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
120    toolchain_type = "@rules_cc//cc:toolchain_type",
121)
122
123# Based on:
124# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#28
125toolchain(
126    name = "linux_amd64_ndk_arm64_toolchain",
127    exec_compatible_with = [
128        "@platforms//os:linux",
129        "@platforms//cpu:x86_64",
130    ],
131    target_compatible_with = [
132        "@platforms//os:android",
133        "@platforms//cpu:arm64",
134    ],
135    toolchain = ":linux_amd64_ndk_arm64",
136    toolchain_type = "@rules_cc//cc:toolchain_type",
137)
138
139# Based on:
140# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#42
141toolchain(
142    name = "linux_amd64_ndk_arm32_toolchain",
143    exec_compatible_with = [
144        "@platforms//os:linux",
145        "@platforms//cpu:x86_64",
146    ],
147    target_compatible_with = [
148        "@platforms//os:android",
149        "@platforms//cpu:armv7",
150    ],
151    toolchain = ":linux_amd64_ndk_arm32",
152    toolchain_type = "@rules_cc//cc:toolchain_type",
153)
154
155filegroup(name = "not_implemented")
156
157filegroup(
158    name = "archive_linux_amd64_files",
159    srcs = [
160        "linux_trampolines/ar_trampoline_linux.sh",
161        "@clang_linux_amd64//:archive_files",
162    ],
163)
164
165filegroup(
166    name = "compile_linux_amd64_files",
167    srcs = [
168        "linux_trampolines/IWYU_mapping.imp",
169        "linux_trampolines/clang_trampoline_linux.sh",
170        "@clang_linux_amd64//:compile_files",
171    ],
172)
173
174filegroup(
175    name = "link_linux_amd64_files",
176    srcs = [
177        # Bazel usually assumes it is talking to Clang when linking.
178        "linux_trampolines/clang_trampoline_linux.sh",
179        "@clang_linux_amd64//:link_files",
180    ],
181)
182
183filegroup(
184    name = "all_linux_amd64_files",
185    srcs = [
186        ":archive_linux_amd64_files",
187        ":compile_linux_amd64_files",
188        ":link_linux_amd64_files",
189    ],
190)
191
192filegroup(
193    name = "archive_mac_files",
194    srcs = [
195        "mac_trampolines/ar_trampoline_mac.sh",
196        "@clang_mac//:archive_files",
197    ],
198)
199
200filegroup(
201    name = "compile_mac_files",
202    srcs = [
203        "mac_trampolines/clang_trampoline_mac.sh",
204        "@clang_mac//:compile_files",
205    ],
206)
207
208filegroup(
209    name = "link_mac_files",
210    srcs = [
211        "mac_trampolines/clang_trampoline_mac.sh",
212        "@clang_mac//:link_files",
213    ],
214)
215
216filegroup(
217    name = "all_mac_files",
218    srcs = [
219        ":archive_mac_files",
220        ":compile_mac_files",
221        ":link_mac_files",
222    ],
223)
224
225filegroup(
226    name = "archive_windows_files",
227    srcs = [
228        "windows_trampolines/ar_trampoline_windows.bat",
229        "@clang_windows_amd64//:archive_files",
230    ],
231)
232
233filegroup(
234    name = "compile_windows_files",
235    srcs = [
236        "windows_trampolines/clang_trampoline_windows.bat",
237        "@clang_windows_amd64//:compile_files",
238    ],
239)
240
241filegroup(
242    name = "link_windows_files",
243    srcs = [
244        # Bazel usually assumes it is talking to Clang when linking.
245        "windows_trampolines/clang_trampoline_windows.bat",
246        "@clang_windows_amd64//:link_files",
247    ],
248)
249
250filegroup(
251    name = "all_windows_files",
252    srcs = [
253        ":archive_windows_files",
254        ":compile_windows_files",
255        ":link_windows_files",
256    ],
257)
258
259filegroup(
260    name = "archive_ios_files",
261    srcs = [
262        "ios_trampolines/ar_trampoline_ios.sh",
263        "@clang_ios//:archive_files",
264    ],
265)
266
267filegroup(
268    name = "compile_ios_files",
269    srcs = [
270        "ios_trampolines/clang_trampoline_ios.sh",
271        "@clang_ios//:compile_files",
272    ],
273)
274
275filegroup(
276    name = "link_ios_files",
277    srcs = [
278        "ios_trampolines/clang_trampoline_ios.sh",
279        "@clang_ios//:link_files",
280    ],
281)
282
283filegroup(
284    name = "all_ios_files",
285    srcs = [
286        ":compile_ios_files",
287        ":link_ios_files",
288    ],
289)
290
291provide_linux_amd64_toolchain_config(
292    name = "linux_amd64_toolchain_config",
293)
294
295provide_mac_toolchain_config(
296    name = "mac_toolchain_config",
297)
298
299provide_mac_toolchain_config(
300    name = "mac_arm64_toolchain_config",
301    cpu = "arm64",
302)
303
304provide_windows_amd64_toolchain_config(
305    name = "windows_amd64_toolchain_config",
306)
307
308provide_ios_toolchain_config(
309    name = "ios_arm64_toolchain_config",
310    cpu = "arm64",
311)
312
313# https://bazel.build/reference/be/c-cpp#cc_toolchain
314cc_toolchain(
315    name = "linux_amd64_host",
316    # Use by the rust toolchain when linking
317    # https://github.com/bazelbuild/rules_rust/blob/dab425760656c449d3a0f73c490be92c240b6ef2/rust/private/rustc.bzl#L627
318    all_files = ":all_linux_amd64_files",
319    ar_files = ":archive_linux_amd64_files",
320    compiler_files = ":compile_linux_amd64_files",
321    dwp_files = ":not_implemented",
322    linker_files = ":link_linux_amd64_files",
323    module_map = "@clang_linux_amd64//:generated_module_map",
324    objcopy_files = ":not_implemented",
325    strip_files = ":not_implemented",
326    supports_param_files = False,
327    toolchain_config = ":linux_amd64_toolchain_config",
328)
329
330cc_toolchain(
331    name = "mac_host",
332    all_files = ":all_mac_files",  # Apparently also used to compile objc code
333    ar_files = ":archive_mac_files",
334    compiler_files = ":compile_mac_files",
335    dwp_files = ":not_implemented",
336    linker_files = ":link_mac_files",
337    module_map = "@clang_mac//:generated_module_map",
338    objcopy_files = ":not_implemented",
339    strip_files = ":not_implemented",
340    supports_param_files = False,
341    toolchain_config = ":mac_toolchain_config",
342)
343
344cc_toolchain(
345    name = "mac_target_arm64",
346    all_files = ":all_mac_files",  # Apparently also used to compile objc code
347    ar_files = ":archive_mac_files",
348    compiler_files = ":compile_mac_files",
349    dwp_files = ":not_implemented",
350    linker_files = ":link_mac_files",
351    module_map = "@clang_mac//:generated_module_map",
352    objcopy_files = ":not_implemented",
353    strip_files = ":not_implemented",
354    supports_param_files = False,
355    toolchain_config = ":mac_arm64_toolchain_config",
356)
357
358cc_toolchain(
359    name = "windows_host",
360    all_files = ":all_windows_files",
361    ar_files = ":archive_windows_files",
362    compiler_files = ":compile_windows_files",
363    dwp_files = ":not_implemented",
364    linker_files = ":link_windows_files",
365    objcopy_files = ":not_implemented",
366    strip_files = ":not_implemented",
367    supports_param_files = True,
368    toolchain_config = ":windows_amd64_toolchain_config",
369)
370
371cc_toolchain(
372    name = "ios_target_arm64",
373    all_files = ":all_ios_files",  # Apparently also used to compile objc code
374    ar_files = ":archive_ios_files",
375    compiler_files = ":compile_ios_files",
376    dwp_files = ":not_implemented",
377    linker_files = ":link_ios_files",
378    module_map = "@clang_ios//:generated_module_map",
379    objcopy_files = ":not_implemented",
380    strip_files = ":not_implemented",
381    supports_param_files = False,
382    toolchain_config = ":ios_arm64_toolchain_config",
383)
384
385filegroup(
386    name = "ndk_arm64_v8a_toolchain_all_files",
387    srcs = [
388        "android_trampolines/aarch64-linux-android-ar.sh",
389        "android_trampolines/aarch64-linux-android-dwp.sh",
390        "android_trampolines/aarch64-linux-android-ld.sh",
391        "android_trampolines/aarch64-linux-android-nm.sh",
392        "android_trampolines/aarch64-linux-android-objcopy.sh",
393        "android_trampolines/aarch64-linux-android-objdump.sh",
394        "android_trampolines/aarch64-linux-android-strip.sh",
395        "android_trampolines/clang.sh",
396    ] + ["@ndk_linux_amd64//:arm64_v8a_all_files"],
397)
398
399ndk_cc_toolchain_config(
400    name = "ndk_arm64_v8a_toolchain_config",
401    cpu = "arm64-v8a",
402)
403
404# Based on:
405# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#109
406cc_toolchain(
407    name = "linux_amd64_ndk_arm64",
408    all_files = ":ndk_arm64_v8a_toolchain_all_files",
409    ar_files = ":ndk_arm64_v8a_toolchain_all_files",
410    compiler_files = ":ndk_arm64_v8a_toolchain_all_files",
411    dwp_files = ":not_implemented",
412    dynamic_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_dynamic_runtime_libraries",
413    linker_files = ":ndk_arm64_v8a_toolchain_all_files",
414    objcopy_files = ":not_implemented",
415    static_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_static_runtime_libraries",
416    strip_files = ":not_implemented",
417    supports_param_files = False,
418    toolchain_config = ":ndk_arm64_v8a_toolchain_config",
419)
420
421filegroup(
422    name = "ndk_armeabi_v7a_toolchain_all_files",
423    srcs = [
424        "android_trampolines/arm-linux-androideabi-ar.sh",
425        "android_trampolines/arm-linux-androideabi-dwp.sh",
426        "android_trampolines/arm-linux-androideabi-ld.sh",
427        "android_trampolines/arm-linux-androideabi-nm.sh",
428        "android_trampolines/arm-linux-androideabi-objcopy.sh",
429        "android_trampolines/arm-linux-androideabi-objdump.sh",
430        "android_trampolines/arm-linux-androideabi-strip.sh",
431        "android_trampolines/clang.sh",
432    ] + ["@ndk_linux_amd64//:armeabi_v7a_all_files"],
433)
434
435ndk_cc_toolchain_config(
436    name = "ndk_armeabi_v7a_toolchain_config",
437    cpu = "armeabi-v7a",
438)
439
440# Based on:
441# https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/BUILD.bazel#139
442cc_toolchain(
443    name = "linux_amd64_ndk_arm32",
444    all_files = ":ndk_armeabi_v7a_toolchain_all_files",
445    ar_files = ":ndk_armeabi_v7a_toolchain_all_files",
446    compiler_files = ":ndk_armeabi_v7a_toolchain_all_files",
447    dwp_files = ":not_implemented",
448    dynamic_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_dynamic_runtime_libraries",
449    linker_files = ":ndk_armeabi_v7a_toolchain_all_files",
450    objcopy_files = ":not_implemented",
451    static_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_static_runtime_libraries",
452    strip_files = ":not_implemented",
453    supports_param_files = False,
454    toolchain_config = ":ndk_armeabi_v7a_toolchain_config",
455)
456