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