blob: 11c9d332f837999fe393e02d4fdeb49426cd3dd6 [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", "generated_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 definition.
android_cc_toolchain(
name = "cc_toolchain_x86_64",
target_os = "android",
target_arch = "x86_64",
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_flags = [
"--target=x86_64-linux-android10000",
] + generated_constants.X86_64ToolchainCflags +
generated_constants.X86_64ArchVariantCflags[""] +
expand_feature_flags(
generated_constants.X86_64DefaultArchVariantFeatures,
generated_constants.X86_64ArchFeatureCflags,
) + generated_constants.X86_64Cflags,
toolchain_identifier = "x86_64-toolchain",
)
# x86 toolchain definition.
android_cc_toolchain(
name = "cc_toolchain_x86",
target_os = "android",
target_arch = "x86",
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_flags = [
"--target=i686-linux-android10000",
] + generated_constants.X86ToolchainCflags +
generated_constants.X86ArchVariantCflags[""] +
expand_feature_flags(
generated_constants.X86_64DefaultArchVariantFeatures,
generated_constants.X86ArchFeatureCflags,
) + generated_constants.X86Cflags,
toolchain_identifier = "x86-toolchain",
)
# arm64 toolchain definition.
android_cc_toolchain(
name = "cc_toolchain_arm64",
target_os = "android",
target_arch = "arm64",
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.Arm64Lldflags,
target_flags = [
"--target=aarch64-linux-android10000",
] + generated_constants.Arm64ArchVariantCflags["armv8-a"] +
generated_constants.Arm64CpuVariantCflags.get(
"",
default = [],
) + generated_constants.Arm64Cflags,
toolchain_identifier = "arm64-toolchain",
)
# arm32 toolchain definition.
android_cc_toolchain(
name = "cc_toolchain_arm",
target_os = "android",
target_arch = "arm",
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,
target_flags = ["--target=" + generated_constants.ArmClangTriple + "10000"] +
generated_constants.ArmToolchainCflags +
generated_constants.ArmArchVariantCflags["armv7-a-neon"] +
generated_constants.ArmCpuVariantCflags.get("", []) +
generated_constants.ArmCflags,
toolchain_identifier = "arm-toolchain",
)
# Toolchain to compile for the linux host.
# TODO(b/186628704): automatically generate from Soong.
android_cc_toolchain(
name = "cc_toolchain_x86_64_linux_host",
target_os = "linux_glibc",
target_arch = "x86_64",
clang_version = ":clang",
clang_version_directory = generated_constants.CLANG_DEFAULT_VERSION,
libclang_rt_builtin = _LIBCLANG_RT_PREBUILT_MAP["//build/bazel/platforms/os_arch:linux_glibc_x86_64"],
linker_flags = [
"-m64",
"-Wl,-z,noexecstack",
"-Wl,-z,relro",
"-Wl,-z,now",
"-Wl,--no-undefined-version",
],
target_flags = [
"-m64",
"-fdiagnostics-color",
"-Wa,--noexecstack",
"-fPIC",
"-U_FORTIFY_SOURCE",
"-D_FORTIFY_SOURCE=2",
"-fstack-protector",
# Workaround differences in inttypes.h between host and target.
# See bug 12708004.
"-D__STDC_FORMAT_MACROS",
"-D__STDC_CONSTANT_MACROS",
],
toolchain_identifier = "x86_64-toolchain",
)
toolchain_type(name = "nocrt_toolchain")
ARCHITECTURES = ["x86_64", "x86", "arm", "arm64"]
# Device toolchains with crt libraries
[
toolchain(
name = "cc_toolchain_%s_def" % arch,
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",
],
toolchain = ":cc_toolchain_%s" % arch,
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
) for arch in ARCHITECTURES
]
# Device toolchains without crt libraries
[
toolchain(
name = "cc_toolchain_%s_nocrt_def" % arch,
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",
],
toolchain = ":cc_toolchain_%s_nocrt" % arch,
toolchain_type = ":nocrt_toolchain",
) for arch in ARCHITECTURES
]
# Host toolchains for linux x86_64
[
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",
],
# TODO(b/181803350): Fix linux toolchain flag set, as the current flags are for android.
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"),
]
]
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__"],
)