blob: 701c175aa44440306b5d4471aae41ca12933543c [file] [log] [blame]
# NOTE: THIS FILE IS EXPERIMENTAL FOR THE BAZEL MIGRATION AND NOT USED FOR
# YOUR BUILDS CURRENTLY.
#
# It is not yet the source of truth for your build. If you're looking to modify
# the build file, modify the Android.bp file instead. Do *not* modify this file
# unless you have coordinated with the team managing the Soong to Bazel
# migration.
"""
Toolchain config
"""
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@env//:env.bzl", "env")
load(
"//build/bazel/toolchains/clang/host/linux-x86:cc_toolchain_config.bzl",
"CLANG_TOOLS",
"android_cc_toolchain",
"clang_tool_output_group",
"clang_version_info",
"expand_feature_flags",
"toolchain_definition",
)
load(
"//build/bazel/toolchains/clang/host/linux-x86:cc_toolchain_constants.bzl",
"arch_to_variants",
"arches",
"device_compatibility_flags_non_darwin",
"device_compatibility_flags_non_windows",
"generated_config_constants",
"libclang_rt_prebuilt_map",
"libclang_ubsan_minimal_rt_prebuilt_map",
"variant_name",
"x86_64_host_toolchains",
"x86_64_musl_host_toolchains",
"x86_host_toolchains",
"x86_musl_host_toolchains",
_bionic_crt = "bionic_crt",
_musl_crt = "musl_crt",
)
load("//build/bazel/platforms/arch/variants:constants.bzl", _arch_constants = "constants")
filegroup(name = "empty")
# Different clang versions are configured here.
clang_version_info(
name = "clang",
clang_files = glob(["**/*"]),
clang_short_version = ":clang_short_version",
clang_version = ":clang_version",
)
# x86_64 toolchain definitions
[
android_cc_toolchain(
name = "cc_toolchain_x86_64" + variant_name(variant),
clang_version = ":clang",
compiler_flags = generated_config_constants.X86_64ToolchainCflags +
generated_config_constants.X86_64ArchVariantCflags[variant.arch_variant] +
expand_feature_flags(
variant.arch_variant,
_arch_constants.AndroidArchToVariantToFeatures[arches.X86_64],
generated_config_constants.X86_64ArchFeatureCflags,
) + generated_config_constants.X86_64Cflags,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_x86_64"],
linker_flags = generated_config_constants.X86_64ToolchainLdflags + generated_config_constants.X86_64Lldflags,
target_arch = arches.X86_64,
target_os = "android",
toolchain_identifier = "x86_64-toolchain",
)
for variant in arch_to_variants[arches.X86_64]
]
# x86 toolchain definitions.
[
android_cc_toolchain(
name = "cc_toolchain_x86" + variant_name(variant),
clang_version = ":clang",
compiler_flags = generated_config_constants.X86ToolchainCflags +
generated_config_constants.X86ArchVariantCflags[variant.arch_variant] +
expand_feature_flags(
variant.arch_variant,
_arch_constants.AndroidArchToVariantToFeatures[arches.X86],
generated_config_constants.X86ArchFeatureCflags,
) + generated_config_constants.X86Cflags,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_x86"],
linker_flags = generated_config_constants.X86ToolchainLdflags + generated_config_constants.X86Lldflags,
target_arch = arches.X86,
target_os = "android",
toolchain_identifier = "x86-toolchain",
)
for variant in arch_to_variants[arches.X86]
]
# arm64 toolchain definitions.
[
android_cc_toolchain(
name = "cc_toolchain_arm64" + variant_name(variant),
clang_version = ":clang",
compiler_flags = generated_config_constants.Arm64Cflags +
generated_config_constants.Arm64ArchVariantCflags[variant.arch_variant] +
generated_config_constants.Arm64CpuVariantCflags.get(
variant.cpu_variant,
[],
),
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_arm64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_arm64"],
linker_flags = generated_config_constants.Arm64CpuVariantLdflags.get(
variant.cpu_variant,
[],
) + generated_config_constants.Arm64Lldflags,
target_arch = arches.Arm64,
target_os = "android",
toolchain_identifier = "arm64-toolchain",
)
for variant in arch_to_variants[arches.Arm64]
]
# arm32 toolchain definitions.
[
android_cc_toolchain(
name = "cc_toolchain_arm" + variant_name(variant),
clang_version = ":clang",
compiler_flags = generated_config_constants.ArmCflags +
generated_config_constants.ArmToolchainCflags +
generated_config_constants.ArmArchVariantCflags[variant.arch_variant] +
generated_config_constants.ArmCpuVariantCflags.get(
variant.cpu_variant,
[],
),
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_arm"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:android_arm"],
# do not pass "ld"-only flags as Bazel is only using lld. Ensure that all flags are lld-compatible.
linker_flags = generated_config_constants.ArmLldflags,
target_arch = arches.Arm,
target_os = "android",
toolchain_identifier = "arm-toolchain",
)
for variant in arch_to_variants[arches.Arm]
]
# Toolchain to compile for the linux host.
# TODO(b/186628704): automatically generate from Soong.
android_cc_toolchain(
name = "cc_toolchain_x86_64_linux_host",
clang_version = ":clang",
compiler_flags = generated_config_constants.LinuxCflags +
generated_config_constants.LinuxGlibcCflags +
generated_config_constants.LinuxX8664Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = False,
gcc_toolchain = generated_config_constants.LinuxGccRoot,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_glibc_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_glibc_x86_64"],
linker_flags = generated_config_constants.LinuxGlibcLdflags +
generated_config_constants.LinuxLdflags +
generated_config_constants.LinuxX8664Ldflags +
device_compatibility_flags_non_windows +
device_compatibility_flags_non_darwin,
rtti_toggle = False,
target_arch = "x86_64",
target_flags = ["--target=x86_64-linux-gnu"],
target_os = "linux_glibc",
toolchain_identifier = "x86_64-toolchain",
)
# Toolchain to compile for the linux x86 target.
android_cc_toolchain(
name = "cc_toolchain_x86_linux_host",
clang_version = ":clang",
compiler_flags = generated_config_constants.LinuxCflags +
generated_config_constants.LinuxGlibcCflags +
generated_config_constants.LinuxX86Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = False,
gcc_toolchain = generated_config_constants.LinuxGccRoot,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_glibc_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_glibc_x86"],
linker_flags = generated_config_constants.LinuxGlibcLdflags +
generated_config_constants.LinuxLdflags +
generated_config_constants.LinuxX86Ldflags +
device_compatibility_flags_non_windows +
device_compatibility_flags_non_darwin,
rtti_toggle = False,
target_arch = "x86",
target_flags = ["--target=i686-linux-gnu"],
target_os = "linux_glibc",
toolchain_identifier = "x86-toolchain",
)
# Toolchain to compile for the linux host with musl libc.
android_cc_toolchain(
name = "cc_toolchain_x86_64_linux_musl_host",
clang_version = ":clang",
compiler_flags = generated_config_constants.LinuxCflags +
generated_config_constants.LinuxMuslCflags +
generated_config_constants.LinuxX8664Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = _musl_crt,
gcc_toolchain = generated_config_constants.LinuxGccRoot,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_musl_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_musl_x86_64"],
linker_flags = generated_config_constants.LinuxMuslLdflags +
generated_config_constants.LinuxLdflags +
generated_config_constants.LinuxX8664Ldflags,
rtti_toggle = False,
target_arch = "x86_64",
target_flags = ["--target=x86_64-linux-musl"],
target_os = "linux_musl",
toolchain_identifier = "x86_64-toolchain",
)
# Toolchain to compile for the linux x86 host with musl libc.
android_cc_toolchain(
name = "cc_toolchain_x86_linux_musl_host",
clang_version = ":clang",
compiler_flags = generated_config_constants.LinuxCflags +
generated_config_constants.LinuxMuslCflags +
generated_config_constants.LinuxX86Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = _musl_crt,
gcc_toolchain = generated_config_constants.LinuxGccRoot,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_musl_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel_common_rules/platforms/os_arch:linux_musl_x86"],
linker_flags = generated_config_constants.LinuxMuslLdflags +
generated_config_constants.LinuxLdflags +
generated_config_constants.LinuxX86Ldflags,
rtti_toggle = False,
target_arch = "x86",
target_flags = ["--target=i686-linux-musl"],
target_os = "linux_musl",
toolchain_identifier = "x86-toolchain",
)
toolchain_type(name = "nocrt_toolchain")
# Device toolchains
[
[
[
toolchain_definition(arch, variant, nocrt)
for nocrt in [
True,
False,
]
]
for variant in variants
]
for arch, variants in arch_to_variants.items()
]
# Toolchains for linux host (x86_64) archs
[
toolchain(
name = "%s_def" % toolchain_name,
exec_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_glibc",
],
target_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_glibc",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in x86_64_host_toolchains
]
# Toolchains for linux target (non-host) x86 arch
[
toolchain(
name = "%s_def" % toolchain_name,
exec_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_glibc",
],
target_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86",
"//build/bazel_common_rules/platforms/os:linux_glibc",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in x86_host_toolchains
]
# Toolchains for linux musl host (x86_64) archs
[
toolchain(
name = "%s_def" % toolchain_name,
exec_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_musl",
],
target_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_musl",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in x86_64_musl_host_toolchains
]
# Toolchains for linux musl target (non-host) x86 arch
[
toolchain(
name = "%s_def" % toolchain_name,
exec_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86_64",
"//build/bazel_common_rules/platforms/os:linux_musl",
],
target_compatible_with = [
"//build/bazel_common_rules/platforms/arch:x86",
"//build/bazel_common_rules/platforms/os:linux_musl",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in x86_musl_host_toolchains
]
[
filegroup(
name = "libclang_rt_%s_%s_%s" % (prefix, os, arch),
srcs = [":clang"],
output_group = "libclang_rt_%s_%s_%s" % (prefix, os, arch),
)
for os, arches in {
"android": [
"arm",
"arm64",
"x86",
"x86_64",
],
"linux": [
"bionic_x86_64",
"glibc_x86",
"glibc_x86_64",
"musl_x86",
"musl_x86_64",
],
}.items()
for arch in arches
for prefix in [
"builtins",
"ubsan_minimal",
]
]
cc_import(
name = "libclang_rt",
static_library = select(libclang_rt_prebuilt_map),
)
[
filegroup(
name = tool,
srcs = [":clang"],
output_group = clang_tool_output_group(tool),
visibility = ["//visibility:public"],
)
for tool in CLANG_TOOLS
]
# Test tools used by Bazel tests.
filegroup(
name = "test_tools",
srcs = [":clang"],
output_group = "clang_test_tools",
visibility = ["//build/bazel/tests:__subpackages__"],
)
string_flag(
name = "clang_version",
build_setting_default = env.get(
"LLVM_PREBUILTS_VERSION",
generated_config_constants.CLANG_DEFAULT_VERSION,
),
)
string_flag(
name = "clang_short_version",
build_setting_default = env.get(
"LLVM_RELEASE_VERSION",
generated_config_constants.CLANG_DEFAULT_SHORT_VERSION,
),
)