"""
This file is copied from the SkCMS repository. Original file:
https://skia.googlesource.com/skcms/+/ba39d81f9797aa973bdf01aa6b0363b280352fba/toolchain/ndk_linux_arm64_toolchain_config.bzl

This module defines the ndk_cc_toolchain_config rule.

This file is based on the `external/androidndk/cc_toolchain_config.bzl` file produced by the
built-in `android_ndk_repository` Bazel rule[1], which was used to build the SkCMS repository up
until this revision[2].

The paths in this file point to locations inside the expanded Android NDK ZIP file (found at
external/ndk_linux_amd64), and must be updated every time we upgrade to a new Android NDK version.

[1] https://github.com/bazelbuild/bazel/blob/4710ef82ce34572878e07c52e83a0144d707f140/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java#L422
[2] https://skia.googlesource.com/skcms/+/30c8e303800c256febb03a09fdcda7f75d119b1b/WORKSPACE#22
"""

load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
    "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
    "feature",
    "flag_group",
    "flag_set",
    "tool_path",
    "with_feature_set",
)
load(":download_ndk_linux_amd64_toolchain.bzl", "NDK_PATH")

# Supported CPUs.
_ARMEABI_V7A = "armeabi-v7a"
_ARM64_V8A = "arm64-v8a"

_all_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.assemble,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.cpp_module_codegen,
    ACTION_NAMES.clif_match,
    ACTION_NAMES.lto_backend,
]

_all_link_actions = [
    ACTION_NAMES.cpp_link_executable,
    ACTION_NAMES.cpp_link_dynamic_library,
    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]

def _get_default_compile_flags(cpu):
    if cpu == _ARMEABI_V7A:
        return [
            "-D__ANDROID_API__=29",
            "-isystem",
            NDK_PATH + "/sysroot/usr/include/arm-linux-androideabi",
            "-target",
            "armv7-none-linux-androideabi",
            "-march=armv7-a",
            "-mfloat-abi=softfp",
            "-mfpu=vfpv3-d16",
            "-gcc-toolchain",
            NDK_PATH + "/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64",
            "-fpic",
            "-no-canonical-prefixes",
            "-Wno-invalid-command-line-argument",
            "-Wno-unused-command-line-argument",
            "-funwind-tables",
            "-fstack-protector-strong",
            "-fno-addrsig",
        ]
    if cpu == _ARM64_V8A:
        return [
            "-gcc-toolchain",
            NDK_PATH + "/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64",
            "-target",
            "aarch64-none-linux-android",
            "-fpic",
            "-isystem",
            NDK_PATH + "/sysroot/usr/include/aarch64-linux-android",
            "-D__ANDROID_API__=29",
            "-no-canonical-prefixes",
            "-Wno-invalid-command-line-argument",
            "-Wno-unused-command-line-argument",
            "-funwind-tables",
            "-fstack-protector-strong",
            "-fno-addrsig",
        ]
    fail("Unknown CPU: " + cpu)

def _get_default_link_flags(cpu):
    if cpu == _ARMEABI_V7A:
        return [
            "-target",
            "armv7-none-linux-androideabi",
            "-gcc-toolchain",
            NDK_PATH + "/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64",
            "-L",
            NDK_PATH + "/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a",
            "-no-canonical-prefixes",
            "-Wl,-z,relro",
            "-lm",
        ]
    if cpu == _ARM64_V8A:
        return [
            "-gcc-toolchain",
            NDK_PATH + "/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64",
            "-target",
            "aarch64-none-linux-android",
            "-L",
            NDK_PATH + "/sources/cxx-stl/llvm-libc++/libs/arm64-v8a",
            "-no-canonical-prefixes",
            "-Wl,-z,relro",
            "-lm",
        ]
    fail("Unknown CPU: " + cpu)

def _get_default_dbg_flags(cpu):
    if cpu == _ARMEABI_V7A:
        return ["-g", "-fno-strict-aliasing", "-O0", "-UNDEBUG"]
    if cpu == _ARM64_V8A:
        return ["-O0", "-g", "-UNDEBUG"]
    fail("Unknown CPU: " + cpu)

def _get_default_opt_flags(cpu):
    if cpu == _ARMEABI_V7A:
        return ["-mthumb", "-Os", "-g", "-DNDEBUG"]
    if cpu == _ARM64_V8A:
        return ["-O2", "-g", "-DNDEBUG"]
    fail("Unknown CPU: " + cpu)

def _get_toolchain_identifier(cpu):
    if cpu == _ARMEABI_V7A:
        return "ndk-armeabi-v7a-toolchain"
    if cpu == _ARM64_V8A:
        return "ndk-arm64-v8a-toolchain"
    fail("Unknown CPU: " + cpu)

def _get_target_system_name(cpu):
    if cpu == _ARMEABI_V7A:
        return "arm-linux-androideabi"
    if cpu == _ARM64_V8A:
        return "aarch64-linux-android"
    fail("Unknown CPU: " + cpu)

def _get_builtin_sysroot(cpu):
    if cpu == _ARMEABI_V7A:
        return NDK_PATH + "/platforms/android-29/arch-arm"
    if cpu == _ARM64_V8A:
        return NDK_PATH + "/platforms/android-29/arch-arm64"
    fail("Unknown CPU: " + cpu)

def _get_tool_paths(cpu):
    # The cc_common.create_cc_toolchain_config_info function expects tool paths to point to files
    # under the directory in which it is invoked. This means we cannot directly reference tools
    # under external/android_ndk. The solution is to use "trampoline" scripts that pass through
    # any command-line arguments to the NDK binaries under external/android_sdk.

    if cpu == _ARMEABI_V7A:
        return [
            tool_path(
                name = "ar",
                path = "android_trampolines/arm-linux-androideabi-ar.sh",
            ),
            tool_path(
                name = "cpp",
                path = "android_trampolines/clang.sh",
            ),
            tool_path(
                name = "dwp",
                path = "android_trampolines/arm-linux-androideabi-dwp.sh",
            ),
            tool_path(
                name = "gcc",
                path = "android_trampolines/clang.sh",
            ),
            tool_path(
                name = "gcov",
                path = "/bin/false",
            ),
            tool_path(
                name = "ld",
                path = "android_trampolines/arm-linux-androideabi-ld.sh",
            ),
            tool_path(
                name = "nm",
                path = "android_trampolines/arm-linux-androideabi-nm.sh",
            ),
            tool_path(
                name = "objcopy",
                path = "android_trampolines/arm-linux-androideabi-objcopy.sh",
            ),
            tool_path(
                name = "objdump",
                path = "android_trampolines/arm-linux-androideabi-objdump.sh",
            ),
            tool_path(
                name = "strip",
                path = "android_trampolines/arm-linux-androideabi-strip.sh",
            ),
        ]
    if cpu == _ARM64_V8A:
        return [
            tool_path(
                name = "ar",
                path = "android_trampolines/aarch64-linux-android-ar.sh",
            ),
            tool_path(
                name = "cpp",
                path = "android_trampolines/clang.sh",
            ),
            tool_path(
                name = "dwp",
                path = "android_trampolines/aarch64-linux-android-dwp.sh",
            ),
            tool_path(
                name = "gcc",
                path = "android_trampolines/clang.sh",
            ),
            tool_path(
                name = "gcov",
                path = "/bin/false",
            ),
            tool_path(
                name = "ld",
                path = "android_trampolines/aarch64-linux-android-ld.sh",
            ),
            tool_path(
                name = "nm",
                path = "android_trampolines/aarch64-linux-android-nm.sh",
            ),
            tool_path(
                name = "objcopy",
                path = "android_trampolines/aarch64-linux-android-objcopy.sh",
            ),
            tool_path(
                name = "objdump",
                path = "android_trampolines/aarch64-linux-android-objdump.sh",
            ),
            tool_path(
                name = "strip",
                path = "android_trampolines/aarch64-linux-android-strip.sh",
            ),
        ]
    fail("Unknown CPU: " + cpu)

def _ndk_cc_toolchain_config_impl(ctx):
    default_compile_flags = _get_default_compile_flags(ctx.attr.cpu)
    unfiltered_compile_flags = [
        "-isystem",
        NDK_PATH + "/sources/cxx-stl/llvm-libc++/include",
        "-isystem",
        NDK_PATH + "/sources/cxx-stl/llvm-libc++abi/include",
        "-isystem",
        NDK_PATH + "/sources/android/support/include",
        "-isystem",
        NDK_PATH + "/sysroot/usr/include",
    ]
    default_link_flags = _get_default_link_flags(ctx.attr.cpu)
    default_fastbuild_flags = [""]
    default_dbg_flags = _get_default_dbg_flags(ctx.attr.cpu)
    default_opt_flags = _get_default_opt_flags(ctx.attr.cpu)

    opt_feature = feature(name = "opt")
    fastbuild_feature = feature(name = "fastbuild")
    dbg_feature = feature(name = "dbg")
    supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
    supports_pic_feature = feature(name = "supports_pic", enabled = True)
    static_link_cpp_runtimes_feature = feature(name = "static_link_cpp_runtimes", enabled = True)

    default_compile_flags_feature = feature(
        name = "default_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [flag_group(flags = default_compile_flags)],
            ),
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [flag_group(flags = default_fastbuild_flags)],
                with_features = [with_feature_set(features = ["fastbuild"])],
            ),
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [flag_group(flags = default_dbg_flags)],
                with_features = [with_feature_set(features = ["dbg"])],
            ),
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [flag_group(flags = default_opt_flags)],
                with_features = [with_feature_set(features = ["opt"])],
            ),
            flag_set(
                actions = [ACTION_NAMES.cpp_compile],
                flag_groups = [flag_group(flags = ["-std=c++17"])],
            ),
        ],
    )

    default_link_flags_feature = feature(
        name = "default_link_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = _all_link_actions,
                flag_groups = [flag_group(flags = default_link_flags)],
            ),
        ],
    )

    user_compile_flags_feature = feature(
        name = "user_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [
                    flag_group(
                        flags = ["%{user_compile_flags}"],
                        iterate_over = "user_compile_flags",
                        expand_if_available = "user_compile_flags",
                    ),
                ],
            ),
        ],
    )

    sysroot_feature = feature(
        name = "sysroot",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = _all_compile_actions + _all_link_actions,
                flag_groups = [
                    flag_group(
                        flags = ["--sysroot=%{sysroot}"],
                        expand_if_available = "sysroot",
                    ),
                ],
            ),
        ],
    )

    unfiltered_compile_flags_feature = feature(
        name = "unfiltered_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = _all_compile_actions,
                flag_groups = [flag_group(flags = unfiltered_compile_flags)],
            ),
        ],
    )

    features = [
        default_compile_flags_feature,
        default_link_flags_feature,
        supports_dynamic_linker_feature,
        supports_pic_feature,
        static_link_cpp_runtimes_feature,
        fastbuild_feature,
        dbg_feature,
        opt_feature,
        user_compile_flags_feature,
        sysroot_feature,
        unfiltered_compile_flags_feature,
    ]

    cxx_builtin_include_directories = [
        NDK_PATH + "/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/include",
        "%sysroot%/usr/include",
        NDK_PATH + "/sysroot/usr/include",
    ]

    # https://bazel.build/rules/lib/cc_common#create_cc_toolchain_config_info
    return cc_common.create_cc_toolchain_config_info(
        ctx = ctx,
        toolchain_identifier = _get_toolchain_identifier(ctx.attr.cpu),
        host_system_name = "local",
        target_system_name = _get_target_system_name(ctx.attr.cpu),
        target_cpu = ctx.attr.cpu,
        target_libc = "local",
        compiler = "clang9.0.9",
        abi_version = ctx.attr.cpu,
        abi_libc_version = "local",
        features = features,
        tool_paths = _get_tool_paths(ctx.attr.cpu),
        cxx_builtin_include_directories = cxx_builtin_include_directories,
        builtin_sysroot = _get_builtin_sysroot(ctx.attr.cpu),
    )

ndk_cc_toolchain_config = rule(
    implementation = _ndk_cc_toolchain_config_impl,
    attrs = {
        "cpu": attr.string(
            mandatory = True,
            values = [_ARMEABI_V7A, _ARM64_V8A],
            doc = "Target CPU.",
        ),
    },
    provides = [CcToolchainConfigInfo],
)
