# 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__"],
)
