blob: 4622d609b2381089d26fab91c7251b4a1b7021f8 [file] [log] [blame]
load(":ndk_linux_arm64_toolchain_config.bzl", "ndk_cc_toolchain_config")
load(":clang_linux_amd64_toolchain_config.bzl", "provide_linux_amd64_toolchain_config")
load(":mac_toolchain_config.bzl", "provide_mac_toolchain_config")
package(default_visibility = ["//visibility:public"])
toolchain(
name = "linux_amd64_clang_toolchain",
# Where should we run this toolchain?
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
# What can this toolchain build?
target_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
# We want to be able to explicitly tell Bazel to use this toolchain, and not the
# default one on a user's machine or on the RBE worker. Thus we need an extra constraint
# that we can use to differentiate the "stock" C++ toolchain from our hermetic one and
# force that use by specifying the target platform.
"//bazel/platform:use_hermetic_toolchain",
],
toolchain = ":linux_amd64_clang",
# https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
toolchain_type = "@rules_cc//cc:toolchain_type",
)
toolchain(
name = "linux_amd64_ndk_arm64_toolchain",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:android",
"@platforms//cpu:arm64",
],
toolchain = ":linux_amd64_ndk_arm64",
toolchain_type = "@rules_cc//cc:toolchain_type",
)
toolchain(
name = "linux_amd64_ndk_arm32_toolchain",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:android",
"@platforms//cpu:armv7",
],
toolchain = ":linux_amd64_ndk_arm32",
toolchain_type = "@rules_cc//cc:toolchain_type",
)
filegroup(name = "not_implemented")
###################################
# clang on linux amd64 toolchain. #
###################################
provide_linux_amd64_toolchain_config(
name = "linux_amd64_toolchain_config",
)
filegroup(
name = "archive_linux_amd64_files",
srcs = [
"linux_amd64_trampolines/ar.sh",
"@clang_linux_amd64//:archive_files",
],
)
filegroup(
name = "compile_linux_amd64_files",
srcs = [
"linux_amd64_trampolines/clang.sh",
"@clang_linux_amd64//:compile_files",
],
)
filegroup(
name = "link_linux_amd64_files",
srcs = [
# Bazel assumes it is talking to Clang when linking.
"linux_amd64_trampolines/clang.sh",
"@clang_linux_amd64//:link_files",
],
)
cc_toolchain(
name = "linux_amd64_clang",
all_files = ":not_implemented",
ar_files = ":archive_linux_amd64_files",
compiler_files = ":compile_linux_amd64_files",
dwp_files = ":not_implemented",
linker_files = ":link_linux_amd64_files",
objcopy_files = ":not_implemented",
strip_files = ":not_implemented",
supports_param_files = False,
toolchain_config = ":linux_amd64_toolchain_config",
)
############################
# arm64-v8a C++ toolchain. #
############################
# https://bazel.build/reference/be/c-cpp#cc_toolchain
cc_toolchain(
name = "linux_amd64_ndk_arm64",
all_files = ":not_implemented",
ar_files = ":ndk_arm64_v8a_toolchain_all_files",
compiler_files = ":ndk_arm64_v8a_toolchain_all_files",
dwp_files = ":not_implemented",
dynamic_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_dynamic_runtime_libraries",
linker_files = ":ndk_arm64_v8a_toolchain_all_files",
objcopy_files = ":not_implemented",
static_runtime_lib = "@ndk_linux_amd64//:arm64_v8a_static_runtime_libraries",
strip_files = ":not_implemented",
supports_param_files = False,
toolchain_config = ":ndk_arm64_v8a_toolchain_config",
)
filegroup(
name = "ndk_arm64_v8a_toolchain_all_files",
srcs = glob(["android_trampolines/*.sh"]) + ["@ndk_linux_amd64//:arm64_v8a_all_files"],
)
ndk_cc_toolchain_config(
name = "ndk_arm64_v8a_toolchain_config",
cpu = "arm64-v8a",
)
##############################
# armeabi-v7a C++ toolchain. #
##############################
# https://bazel.build/reference/be/c-cpp#cc_toolchain
cc_toolchain(
name = "linux_amd64_ndk_arm32",
all_files = ":not_implemented",
ar_files = ":ndk_armeabi_v7a_toolchain_all_files",
compiler_files = ":ndk_armeabi_v7a_toolchain_all_files",
dwp_files = ":not_implemented",
dynamic_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_dynamic_runtime_libraries",
linker_files = ":ndk_armeabi_v7a_toolchain_all_files",
objcopy_files = ":not_implemented",
static_runtime_lib = "@ndk_linux_amd64//:armeabi_v7a_static_runtime_libraries",
strip_files = ":not_implemented",
supports_param_files = False,
toolchain_config = ":ndk_armeabi_v7a_toolchain_config",
)
filegroup(
name = "ndk_armeabi_v7a_toolchain_all_files",
srcs = glob(["android_trampolines/*.sh"]) + ["@ndk_linux_amd64//:armeabi_v7a_all_files"],
)
ndk_cc_toolchain_config(
name = "ndk_armeabi_v7a_toolchain_config",
cpu = "armeabi-v7a",
)
###########################################
# clang on Mac (Intel and Apple silicon). #
###########################################
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#37.
#
# Our one mac toolchain can run on either Intel Macs or M1 Macs, however Bazel does not allow you to specify
# more than one cpu type in exec_compatible_with. Thus, we list the same toolchain twice.
toolchain(
name = "clang_mac_x64_toolchain",
exec_compatible_with = [
"@platforms//os:macos",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:macos",
"@platforms//cpu:x86_64",
"//bazel/platform:use_hermetic_toolchain",
],
toolchain = ":mac_host",
# https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
toolchain_type = "@rules_cc//cc:toolchain_type",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#55
toolchain(
name = "clang_mac_arm64_toolchain",
exec_compatible_with = [
"@platforms//os:macos",
# The Skia repository uses cpu:arm64, but as of 2023-10-25 that yields a "No matching
# toolchains found" error on Apple silicon. It could be due to the fact that the Skia and
# skcms repositories use different Bazel versions.
"@platforms//cpu:aarch64",
],
target_compatible_with = [
"@platforms//os:macos",
# The Skia repository uses cpu:arm64, but as of 2023-10-25 that yields a "No matching
# toolchains found" error on Apple silicon. It could be due to the fact that the Skia and
# skcms repositories use different Bazel versions.
"@platforms//cpu:aarch64",
"//bazel/platform:use_hermetic_toolchain",
],
toolchain = ":mac_host",
# https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
toolchain_type = "@rules_cc//cc:toolchain_type",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#71.
#
# Cross compilation toolchain for an Intel Mac host and Apple silicon target
toolchain(
name = "clang_host_mac_x64_target_mac_arm64_toolchain",
exec_compatible_with = [
"@platforms//os:macos",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:macos",
# The Skia repository uses cpu:arm64, but as of 2023-10-25 that yields a "No matching
# toolchains found" error on Apple silicon. It could be due to the fact that the Skia and
# skcms repositories use different Bazel versions.
"@platforms//cpu:aarch64",
"//bazel/platform:use_hermetic_toolchain",
],
toolchain = ":mac_target_arm64",
# https://github.com/bazelbuild/rules_cc/blob/8bb0eb5c5ccd96b91753bb112096bb6993d16d13/cc/BUILD#L32-L36
toolchain_type = "@rules_cc//cc:toolchain_type",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#148.
filegroup(
name = "archive_mac_files",
srcs = [
"mac_trampolines/ar_trampoline_mac.sh",
"@clang_mac//:archive_files",
],
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#156.
filegroup(
name = "compile_mac_files",
srcs = [
"mac_trampolines/clang_trampoline_mac.sh",
"@clang_mac//:compile_files",
],
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#164.
filegroup(
name = "link_mac_files",
srcs = [
"mac_trampolines/clang_trampoline_mac.sh",
"@clang_mac//:link_files",
],
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#181.
filegroup(
name = "all_mac_files",
srcs = [
":archive_mac_files",
":compile_mac_files",
":link_mac_files",
],
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#194.
provide_mac_toolchain_config(
name = "mac_toolchain_config",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#198.
provide_mac_toolchain_config(
name = "mac_arm64_toolchain_config",
cpu = "arm64",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#220.
cc_toolchain(
name = "mac_host",
all_files = ":all_mac_files", # Apparently also used to compile objc code
ar_files = ":archive_mac_files",
compiler_files = ":compile_mac_files",
dwp_files = ":not_implemented",
linker_files = ":link_mac_files",
module_map = select({
"@platforms//os:macos": "@clang_mac//:generated_module_map",
"//conditions:default": None,
}),
objcopy_files = ":not_implemented",
strip_files = ":not_implemented",
supports_param_files = False,
toolchain_config = ":mac_toolchain_config",
)
# Based on
# https://skia.googlesource.com/skia/+/0d4fcf388a6f9318e2a54fa85fddf3396d521767/toolchain/BUILD.bazel#234.
cc_toolchain(
name = "mac_target_arm64",
all_files = ":all_mac_files", # Apparently also used to compile objc code
ar_files = ":archive_mac_files",
compiler_files = ":compile_mac_files",
dwp_files = ":not_implemented",
linker_files = ":link_mac_files",
module_map = select({
"@platforms//os:macos": "@clang_mac//:generated_module_map",
"//conditions:default": None,
}),
objcopy_files = ":not_implemented",
strip_files = ":not_implemented",
supports_param_files = False,
toolchain_config = ":mac_arm64_toolchain_config",
)