blob: 05ded06df2d4fa5cce9b4606ad52953708e8badf [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", "bool_flag")
load("@env//:env.bzl", "env")
load(
":cc_toolchain_config.bzl",
"android_cc_toolchain",
"clang_version",
"expand_feature_flags",
"toolchain_definition",
)
load(
":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(
":cc_toolchain_features_pack_relocation_test.bzl",
"cc_toolchain_features_pack_relocation_test_suite",
)
load(
":cc_toolchain_features_thinlto_test.bzl",
"cc_toolchain_features_lto_test_suite",
)
load(
":cc_toolchain_features_ubsan_test.bzl",
"cc_toolchain_features_ubsan_test_suite",
)
load(
":cc_toolchain_features_env_based_flags_test.bzl",
"cc_toolchain_features_env_based_flags_test_suite",
)
load(
":cc_toolchain_features_flag_order_test.bzl",
"cc_toolchain_features_flag_order_test_suite",
)
load("//build/bazel/flags:common.bzl", "is_env_true")
load("//build/bazel/platforms/arch/variants:constants.bzl", _arch_constants = "constants")
filegroup(name = "empty")
# Different clang versions are configured here.
clang_version(
name = "clang",
directory = generated_config_constants.ClangVersion,
includes = [
"lib/clang/%s/include" % generated_config_constants.ClangShortVersion,
],
)
# x86_64 toolchain definitions
[
android_cc_toolchain(
name = "cc_toolchain_x86_64" + variant_name(variant),
clang_version = ":clang",
clang_version_directory = generated_config_constants.ClangVersion,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_x86_64"],
linker_flags = generated_config_constants.X86_64ToolchainLdflags + generated_config_constants.X86_64Lldflags,
target_arch = arches.X86_64,
target_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,
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",
clang_version_directory = generated_config_constants.ClangVersion,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_x86"],
linker_flags = generated_config_constants.X86ToolchainLdflags + generated_config_constants.X86Lldflags,
target_arch = arches.X86,
target_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,
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",
clang_version_directory = generated_config_constants.ClangVersion,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_arm64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_arm64"],
linker_flags = generated_config_constants.Arm64CpuVariantLdflags.get(
variant.cpu_variant,
[],
) + generated_config_constants.Arm64Lldflags,
target_arch = arches.Arm64,
target_flags = generated_config_constants.Arm64Cflags +
generated_config_constants.Arm64ArchVariantCflags[variant.arch_variant] +
generated_config_constants.Arm64CpuVariantCflags.get(
variant.cpu_variant,
[],
),
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",
clang_version_directory = generated_config_constants.ClangVersion,
crt = _bionic_crt,
libclang_rt_builtin = libclang_rt_prebuilt_map["//build/bazel/platforms/os_arch:android_arm"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/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_flags = generated_config_constants.ArmCflags +
generated_config_constants.ArmToolchainCflags +
generated_config_constants.ArmArchVariantCflags[variant.arch_variant] +
generated_config_constants.ArmCpuVariantCflags.get(
variant.cpu_variant,
[],
),
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",
clang_version_directory = generated_config_constants.ClangVersion,
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/platforms/os_arch:linux_glibc_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/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",
clang_version_directory = generated_config_constants.ClangVersion,
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/platforms/os_arch:linux_glibc_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/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",
clang_version_directory = generated_config_constants.ClangVersion,
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/platforms/os_arch:linux_musl_x86_64"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/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",
clang_version_directory = generated_config_constants.ClangVersion,
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/platforms/os_arch:linux_musl_x86"],
libclang_rt_ubsan_minimal = libclang_ubsan_minimal_rt_prebuilt_map["//build/bazel/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/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux_glibc",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86_64",
"//build/bazel/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/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux_glibc",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86",
"//build/bazel/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/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux_musl",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86_64",
"//build/bazel/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/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux_musl",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86",
"//build/bazel/platforms/os:linux_musl",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in x86_musl_host_toolchains
]
cc_import(
name = "libclang_rt",
static_library = select(libclang_rt_prebuilt_map),
)
[alias(
name = "llvm-%s" % tool,
actual = generated_config_constants.ClangVersion + "/bin/llvm-%s" % tool,
visibility = ["//visibility:public"],
) for tool in [
"ar",
"readelf",
"objcopy",
"strip",
]]
[alias(
name = tool,
actual = generated_config_constants.ClangVersion + "/bin/" + tool,
visibility = ["//visibility:public"],
) for tool in [
"clang-tidy",
"clang-tidy.sh",
"clang-tidy.real",
]]
# Test tools used by Bazel tests.
filegroup(
name = "test_tools",
srcs = [
generated_config_constants.ClangVersion + "/bin/llvm-readelf",
generated_config_constants.ClangVersion + "/bin/llvm-nm",
],
visibility = ["//build/bazel/tests:__subpackages__"],
)
cc_toolchain_features_pack_relocation_test_suite(
name = "cc_toolchain_features_pack_relocation_tests",
)
cc_toolchain_features_lto_test_suite(
name = "cc_toolchain_features_thinlto_tests",
)
cc_toolchain_features_ubsan_test_suite(
name = "cc_toolchain_features_ubsan_tests",
)
cc_toolchain_features_env_based_flags_test_suite(
name = "cc_toolchain_features_env_based_flags_tests",
)
cc_toolchain_features_flag_order_test_suite(
name = "cc_toolchain_features_flag_order_tests",
)
bool_flag(
name = "auto_zero_initialize_env",
build_setting_default = is_env_true(env.get("AUTO_ZERO_INITIALIZE")),
)
bool_flag(
name = "auto_pattern_initialize_env",
build_setting_default = is_env_true(env.get("AUTO_PATTERN_INITIALIZE")),
)
bool_flag(
name = "auto_uninitialize_env",
build_setting_default = is_env_true(env.get("AUTO_UNINITIALIZE")),
)
bool_flag(
name = "use_ccache_env",
build_setting_default = is_env_true(env.get("USE_CCACHE")),
)
bool_flag(
name = "llvm_next_env",
build_setting_default = is_env_true(env.get("LLVM_NEXT")),
)
bool_flag(
name = "allow_unknown_warning_option_env",
build_setting_default = is_env_true(env.get("ALLOW_UNKNOWN_WARNING_OPTION")),
)