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