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

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

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

def _impl(ctx):
    if "mingw" in ctx.attr.target_full_name:
        artifact_name_patterns = [
            artifact_name_pattern(
                category_name = "executable",
                prefix = "",
                extension = ".exe",
            ),
        ]
    else:
        artifact_name_patterns = []

    tool_paths = [
        tool_path(
            name = "gcc",
            path = "/usr/local/bin/clang",
        ),
        tool_path(
            name = "ld",
            path = ctx.attr.linker_path,
        ),
        tool_path(
            name = "ar",
            path = "/usr/local/bin/llvm-ar",
        ),
        tool_path(
            name = "compat-ld",
            path = ctx.attr.linker_path,
        ),
        tool_path(
            name = "cpp",
            path = "/bin/false",
        ),
        tool_path(
            name = "dwp",
            path = "/bin/false",
        ),
        tool_path(
            name = "gcov",
            path = "/bin/false",
        ),
        tool_path(
            name = "nm",
            path = "/bin/false",
        ),
        tool_path(
            name = "objcopy",
            path = "/bin/false",
        ),
        tool_path(
            name = "objdump",
            path = "/bin/false",
        ),
        tool_path(
            name = "strip",
            path = "/bin/false",
        ),
    ]

    linker_flags = feature(
        name = "default_linker_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_link_actions,
                flag_groups = [
                    flag_group(
                        flags = [
                            "-B" + ctx.attr.linker_path,
                            "-lstdc++",
                            "--target=" + ctx.attr.target_full_name,
                        ] + ctx.attr.extra_linker_flags,
                    ),
                ],
            ),
        ],
    )

    if "osx" in ctx.attr.target_full_name:
        sysroot_action_set = all_link_actions
    else:
        sysroot_action_set = all_link_actions + all_compile_actions

    sysroot_flags = feature(
        name = "sysroot_flags",
        #Only enable this if a sysroot was specified
        enabled = (ctx.attr.sysroot != ""),
        flag_sets = [
            flag_set(
                actions = sysroot_action_set,
                flag_groups = [
                    flag_group(
                        flags = [
                            "--sysroot",
                            ctx.attr.sysroot,
                        ],
                    ),
                ],
            ),
        ],
    )

    if ctx.attr.target_cpu == "x86_32":
        bit_flag = "-m32"
    else:
        bit_flag = "-m64"
    compiler_flags = feature(
        name = "default_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = [
                    flag_group(
                        flags = [
                            bit_flag,
                            "-Wall",
                            "-no-canonical-prefixes",
                            "--target=" + ctx.attr.target_full_name,
                            "-fvisibility=hidden",
                        ] + ctx.attr.extra_compiler_flags + [
                            "-isystem",
                            ctx.attr.sysroot,
                        ],
                    ),
                ],
            ),
            flag_set(
                actions = all_compile_actions,
                flag_groups = [flag_group(flags = ["-DNDEBUG", "-O3"])],
                with_features = [with_feature_set(features = ["opt"])],
            ),
            flag_set(
                actions = all_compile_actions,
                flag_groups = [flag_group(flags = ["-g"])],
                with_features = [with_feature_set(features = ["dbg"])],
            ),
            flag_set(
                actions = all_compile_actions,
                flag_groups = [flag_group(flags = ["-O1"])],
                with_features = [with_feature_set(features = ["fastbuild"])],
            ),
        ],
    )

    features = [
        linker_flags,
        compiler_flags,
        sysroot_flags,
        feature(name = "dbg"),
        feature(name = "opt"),
    ]

    if "mingw" in ctx.attr.target_full_name:
        features.append(
            feature(
                name = "targets_windows",
                enabled = True,
            ),
        )
    else:
        features.append(
            feature(
                name = "supports_pic",
                enabled = True,
            ),
        )

    return cc_common.create_cc_toolchain_config_info(
        abi_libc_version = ctx.attr.abi_version,
        abi_version = ctx.attr.abi_version,
        artifact_name_patterns = artifact_name_patterns,
        ctx = ctx,
        compiler = "clang",
        cxx_builtin_include_directories = [
            ctx.attr.sysroot,
            ctx.attr.extra_include,
            "/usr/local/include",
            "/usr/local/lib/clang",
        ],
        features = features,
        host_system_name = "local",
        target_cpu = ctx.attr.target_cpu,
        target_libc = ctx.attr.target_cpu,
        target_system_name = ctx.attr.target_full_name,
        toolchain_identifier = ctx.attr.target_full_name,
        tool_paths = tool_paths,
    )

cc_toolchain_config = rule(
    implementation = _impl,
    attrs = {
        "abi_version": attr.string(default = "local"),
        "extra_compiler_flags": attr.string_list(),
        "extra_include": attr.string(mandatory = False),
        "extra_linker_flags": attr.string_list(),
        "linker_path": attr.string(mandatory = True),
        "sysroot": attr.string(mandatory = False),
        "target_cpu": attr.string(mandatory = True, values = ["aarch64", "ppc64", "systemz", "x86_32", "x86_64"]),
        "target_full_name": attr.string(mandatory = True),
    },
    provides = [CcToolchainConfigInfo],
)
