blob: 6c7e5785162867af5425a9a327b800463cd72f7f [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.
package(default_visibility = ["//visibility:public"])
# Toolchain config
filegroup(name = "empty")
load(
":cc_toolchain_config.bzl",
"android_cc_toolchain",
"clang_version",
"expand_feature_flags",
)
load(
":cc_toolchain_constants.bzl",
"arch_to_variants",
"arches",
"arm_extra_ldflags",
"enabled_features",
"device_compatibility_flags_non_darwin",
"device_compatibility_flags_non_windows",
"generated_constants",
"variant_constraints",
"variant_name",
)
load("//build/bazel/platforms/arch/variants:constants.bzl", _arch_constants = "constants")
# Different clang versions are configured here.
clang_version(
name = "clang",
directory = generated_constants.CLANG_DEFAULT_VERSION,
includes = [
"lib64/clang/%s/include" % generated_constants.CLANG_DEFAULT_SHORT_VERSION,
],
)
_LIBCLANG_RT_PREFIX = "%s/lib64/clang/%s/lib/linux" % (
generated_constants.CLANG_DEFAULT_VERSION,
generated_constants.CLANG_DEFAULT_SHORT_VERSION,
)
_LIBCLANG_RT_PREBUILT_MAP = {
"//build/bazel/platforms/os_arch:android_arm": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-arm-android.a",
"//build/bazel/platforms/os_arch:android_arm64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-aarch64-android.a",
"//build/bazel/platforms/os_arch:android_x86": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-i686-android.a",
"//build/bazel/platforms/os_arch:android_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64-android.a",
"//build/bazel/platforms/os_arch:linux_bionic_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64-android.a",
"//build/bazel/platforms/os_arch:linux_glibc_x86": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-i386.a",
"//build/bazel/platforms/os_arch:linux_glibc_x86_64": _LIBCLANG_RT_PREFIX + "/libclang_rt.builtins-x86_64.a",
"//conditions:default": None,
}
# x86_64 toolchain definitions
[
android_cc_toolchain(
name = "cc_toolchain_x86_64" + variant_name(variant),
clang_version = ":clang",
clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_x86_64"],
linker_flags = generated_constants.X86_64ToolchainLdflags + generated_constants.X86_64Lldflags,
target_arch = arches.X86_64,
target_flags = generated_constants.X86_64ToolchainCflags +
generated_constants.X86_64ArchVariantCflags[variant.arch_variant] +
expand_feature_flags(
variant.arch_variant,
_arch_constants.AndroidArchToVariantToFeatures[arches.X86_64],
generated_constants.X86_64ArchFeatureCflags,
) + generated_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_constants.CLANG_DEFAULT_VERSION,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_x86"],
linker_flags = generated_constants.X86ToolchainLdflags + generated_constants.X86Lldflags,
target_arch = arches.X86,
target_flags = generated_constants.X86ToolchainCflags +
generated_constants.X86ArchVariantCflags[variant.arch_variant] +
expand_feature_flags(
variant.arch_variant,
_arch_constants.AndroidArchToVariantToFeatures[arches.X86],
generated_constants.X86ArchFeatureCflags,
) + generated_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_constants.CLANG_DEFAULT_VERSION,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_arm64"],
linker_flags = generated_constants.Arm64CpuVariantLdflags.get(
variant.cpu_variant,
[],
) + generated_constants.Arm64Lldflags,
target_arch = arches.Arm64,
target_flags = generated_constants.Arm64ArchVariantCflags[variant.arch_variant] +
generated_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_constants.CLANG_DEFAULT_VERSION,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:android_arm"],
linker_flags = generated_constants.ArmLldflags + arm_extra_ldflags(variant),
target_arch = arches.Arm,
target_flags = generated_constants.ArmToolchainCflags +
generated_constants.ArmArchVariantCflags[variant.arch_variant] +
generated_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_constants.CLANG_DEFAULT_VERSION,
compiler_flags = generated_constants.LinuxCflags +
generated_constants.LinuxGlibcCflags +
generated_constants.LinuxX8664Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = False,
gcc_toolchain = generated_constants.LinuxGccRoot,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:linux_glibc_x86_64"],
linker_flags = generated_constants.LinuxGlibcLdflags +
generated_constants.LinuxLdflags +
generated_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_constants.CLANG_DEFAULT_VERSION,
compiler_flags = generated_constants.LinuxCflags +
generated_constants.LinuxGlibcCflags +
generated_constants.LinuxX86Cflags +
# Added by stl.go for non-bionic toolchains.
[
"-nostdinc++",
],
crt = False,
gcc_toolchain = generated_constants.LinuxGccRoot,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:linux_glibc_x86"],
linker_flags = generated_constants.LinuxGlibcLdflags +
generated_constants.LinuxLdflags +
generated_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_type(name = "nocrt_toolchain")
# Device toolchains with crt libraries
[
[
toolchain(
name = "cc_toolchain_{arch}{variant}_def".format(
arch = arch,
variant = variant_name(variant),
),
exec_compatible_with = [
"//build/bazel/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux",
],
target_compatible_with = [
"//build/bazel/platforms/arch:%s" % arch,
"//build/bazel/platforms/os:android",
] + variant_constraints(
variant,
_arch_constants.AndroidArchToVariantToFeatures[arch],
),
toolchain = ":cc_toolchain_{arch}{variant}".format(
arch = arch,
variant = variant_name(variant),
),
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
for variant in variants
]
for arch, variants in arch_to_variants.items()
]
# Device toolchains without crt libraries
[
[
toolchain(
name = "cc_toolchain_{arch}{variant}_nocrt_def".format(
arch = arch,
variant = variant_name(variant),
),
exec_compatible_with = [
"//build/bazel/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux",
],
target_compatible_with = [
"//build/bazel/platforms/arch:%s" % arch,
"//build/bazel/platforms/os:android",
] + variant_constraints(
variant,
_arch_constants.AndroidArchToVariantToFeatures[arch],
),
toolchain = ":cc_toolchain_{arch}{variant}_nocrt".format(
arch = arch,
variant = variant_name(variant),
),
toolchain_type = ":nocrt_toolchain",
)
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",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86_64",
"//build/bazel/platforms/os:linux",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in [
("cc_toolchain_x86_64_linux_host", "@bazel_tools//tools/cpp:toolchain_type"),
("cc_toolchain_x86_64_linux_host_nocrt", "nocrt_toolchain"),
]
]
# 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",
],
target_compatible_with = [
"//build/bazel/platforms/arch:x86",
"//build/bazel/platforms/os:linux",
],
toolchain = toolchain_name,
toolchain_type = toolchain_type,
)
for (toolchain_name, toolchain_type) in [
("cc_toolchain_x86_linux_host", "@bazel_tools//tools/cpp:toolchain_type"),
("cc_toolchain_x86_linux_host_nocrt", "nocrt_toolchain"),
]
]
cc_import(
name = "libclang_rt",
static_library = select(_LIBCLANG_RT_PREBUILT_MAP),
)
[alias(
name = "llvm-%s" % tool,
actual = generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-%s" % tool,
visibility = ["//visibility:public"],
) for tool in [
"ar",
"readelf",
"objcopy",
"strip",
]]
# Test tools used by Bazel tests.
filegroup(
name = "test_tools",
srcs = [
generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-readelf",
generated_constants.CLANG_DEFAULT_VERSION + "/bin/llvm-nm",
],
visibility = ["//build/bazel/tests:__subpackages__"],
)