"""Declarations for the NDK's Clang directory."""

load("@@{repository_name}//:ndk_cc_toolchain_config.bzl", "ndk_cc_toolchain_config_rule")
load("//:target_systems.bzl", "TARGET_SYSTEM_NAMES")

package(default_visibility = ["//visibility:public"])

cc_toolchain_suite(
    name = "cc_toolchain_suite",
    toolchains = {
        "armeabi-v7a": ":cc_toolchain_arm-linux-androideabi",
        "arm64-v8a": ":cc_toolchain_aarch64-linux-android",
        "x86": ":cc_toolchain_i686-linux-android",
        "x86_64": ":cc_toolchain_x86_64-linux-android",
    },
)

[cc_toolchain(
    name = "cc_toolchain_%s" % target_system_name,
    all_files = ":all_files",
    ar_files = ":ar_files",
    as_files = ":as_files",
    compiler_files = ":compiler_files_%s" % target_system_name,
    coverage_files = ":coverage_files",
    dwp_files = ":dwp_files",
    dynamic_runtime_lib = ":dynamic_runtime_lib_%s" % target_system_name,
    libc_top = ":libc_top_%s" % target_system_name,
    linker_files = ":linker_files_%s" % target_system_name,
    objcopy_files = ":objcopy_files",
    static_runtime_lib = "static_runtime_lib_%s" % target_system_name,
    strip_files = ":strip_files",
    supports_header_parsing = 0,
    toolchain_config = ":toolchain_config_%s" % target_system_name,
    toolchain_identifier = "toolchain_identifier_%s" % target_system_name,
) for target_system_name in TARGET_SYSTEM_NAMES]

[ndk_cc_toolchain_config_rule(
    name = "toolchain_config_%s" % target_system_name,
    api_level = {api_level},
    clang_resource_directory = "{clang_resource_directory}",
    executable_extension = "{executable_extension}",
    target_system_name = target_system_name,
    toolchain_identifier = "toolchain_identifier_%s" % target_system_name,
) for target_system_name in TARGET_SYSTEM_NAMES]

filegroup(
    name = "all_binaries",
    srcs = glob(
        [
            "bin/*",
            "lib64/**/*",
            "lib/**/*",
        ],
        # Need to allow_empty here because previous NDK versions had 
        # "lib" & "lib64" directories but recent ones only have "lib".
        allow_empty = True,
    ),
)

filegroup(
    name = "all_files",
    srcs = glob(["**/*"]) + ["//{sysroot_directory}:all_files"],
)

filegroup(
    name = "ar_files",
    srcs = [":all_binaries"],
    output_licenses = ["unencumbered"],
)

filegroup(
    name = "as_files",
    srcs = [":all_binaries"],
    output_licenses = ["unencumbered"],
)

[filegroup(
    name = "compiler_files_%s" % target_system_name,
    srcs = [
        "bin/clang{executable_extension}",
        ":ar_files",
        ":as_files",
        ":objcopy_files",
        "//{sysroot_directory}:sysroot_includes",
    ] + glob(
        [
            "prebuilt_include/**",
            "include/**",
            "lib/gcc/%s/**" % target_system_name,
            "lib64/**/*",
            "lib/**/*",
        ],
        allow_empty = True,
    ),
    output_licenses = ["unencumbered"],
) for target_system_name in TARGET_SYSTEM_NAMES]

filegroup(
    name = "coverage_files",
    srcs = [":all_binaries"],
    output_licenses = ["unencumbered"],
)

filegroup(
    name = "dwp_files",
    srcs = [":all_binaries"],
    output_licenses = ["unencumbered"],
)

[filegroup(
    name = "dynamic_runtime_lib_%s" % target_system_name,
    srcs = ["//{sysroot_directory}:dynamic_runtime_lib_%s" % target_system_name],
) for target_system_name in TARGET_SYSTEM_NAMES]

[filegroup(
    name = "libc_top_%s" % target_system_name,
    srcs = ["//{sysroot_directory}:libc_top_%s" % target_system_name],
) for target_system_name in TARGET_SYSTEM_NAMES]

[filegroup(
    name = "linker_files_%s" % target_system_name,
    srcs = [
        ":all_binaries",
        ":static_runtime_lib_%s" % target_system_name,
    ] + glob(
        [
            "lib/gcc/%s/**" % target_system_name,
            "lib64/**",
            "lib/**",
        ],
        allow_empty = True,
    ),
) for target_system_name in TARGET_SYSTEM_NAMES]

filegroup(
    name = "objcopy_files",
    srcs = [":all_binaries"],
    output_licenses = ["unencumbered"],
)

[filegroup(
    name = "static_runtime_lib_%s" % target_system_name,
    srcs = ["//{sysroot_directory}:static_runtime_lib_%s" % target_system_name],
) for target_system_name in TARGET_SYSTEM_NAMES]

filegroup(
    name = "strip_files",
    srcs = [":all_files"],
    output_licenses = ["unencumbered"],
)