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

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_cpp_compile_actions = [
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.cpp_module_codegen,
    ACTION_NAMES.clif_match,
]

preprocessor_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.clif_match,
]

codegen_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.assemble,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_module_codegen,
    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,
]

lto_index_actions = [
    ACTION_NAMES.lto_index_for_executable,
    ACTION_NAMES.lto_index_for_dynamic_library,
    ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
]

# This defines a relatively minimal EFI toolchain based on host LLVM and no standard library or headers.
def _efi_k8_cc_toolchain_impl(ctx):
    default_compile_flags_feature = feature(
        name = "default_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = ([
                    flag_group(
                        flags = ["-target", "x86_64-unknown-windows"],
                    ),
                ]),
            ),
            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(
                        # Don't bother with O3, this is an EFI toolchain. It's unlikely to gain much performance here
                        # and increases the risk of dangerous optimizations.
                        flags = ["-O2", "-DNDEBUG"],
                    ),
                ]),
                with_features = [with_feature_set(features = ["opt"])],
            ),
        ],
    )

    # "Hybrid" mode disables some MSVC C extensions (but keeps its ABI), but still identifies as MSVC.
    # This is useful if code requires GNU extensions to work which are silently ignored in full MSVC mode.
    # As EFI does not include Windows headers which depend on nonstandard C behavior this should be fine for most code.
    # If this feature is disabled, the toolchain runs with MSVC C extensions fully enabled.
    hybrid_gnu_msvc_feature = feature(
        name = "hybrid_gnu_msvc",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = [
                    flag_group(
                        flags = ["-D_MSC_VER=1920", "-fno-ms-compatibility", "-fno-ms-extensions"],
                    ),
                ],
            ),
        ],
    )

    default_link_flags_feature = feature(
        name = "default_link_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = ([
                    flag_group(
                        flags = [
                            "-target",
                            "x86_64-unknown-windows",
                            "-fuse-ld=lld",
                            "-Wl,-entry:efi_main",
                            "-Wl,-subsystem:efi_application",
                            "-Wl,/BASE:0x0",
                            "-nostdlib",
                            "build/toolchain/llvm-efi/fltused.o",
                        ],
                    ),
                ]),
            ),
        ],
    )

    lto_feature = feature(
        name = "lto",
        enabled = False,
        flag_sets = [
            flag_set(
                actions = all_compile_actions + all_link_actions,
                flag_groups = ([
                    flag_group(
                        flags = [
                            "-flto",
                        ],
                    ),
                ]),
            ),
        ],
    )

    tool_paths = [
        tool_path(
            name = "gcc",
            path = "/usr/bin/clang",
        ),
        tool_path(
            name = "ld",
            path = "/usr/bin/lld-link",
        ),
        tool_path(
            name = "ar",
            path = "/usr/bin/llvm-ar",
        ),
        tool_path(
            name = "cpp",
            path = "/bin/false",
        ),
        tool_path(
            name = "gcov",
            path = "/bin/false",
        ),
        tool_path(
            name = "nm",
            path = "/usr/bin/llvm-nm",
        ),
        tool_path(
            name = "objcopy",
            # We can't use LLVM's objcopy until we pick up https://reviews.llvm.org/D106942
            path = "/usr/bin/objcopy",
        ),
        tool_path(
            name = "objdump",
            path = "/usr/bin/llvm-objdump",
        ),
        tool_path(
            name = "strip",
            path = "/usr/bin/llvm-strip",
        ),
    ]

    return cc_common.create_cc_toolchain_config_info(
        ctx = ctx,
        features = [default_link_flags_feature, default_compile_flags_feature, hybrid_gnu_msvc_feature, lto_feature],
        # Needed for various compiler built-in headers and auxiliary data. No system libraries are being used.
        cxx_builtin_include_directories = [
            "/usr/lib64/clang",
        ],
        toolchain_identifier = "k8-toolchain",
        host_system_name = "local",
        target_system_name = "x86_64-efi",
        target_cpu = "k8",
        target_libc = "none",
        compiler = "clang",
        abi_version = "none",
        abi_libc_version = "none",
        tool_paths = tool_paths,
    )

efi_k8_cc_toolchain_config = rule(
    implementation = _efi_k8_cc_toolchain_impl,
    attrs = {},
    provides = [CcToolchainConfigInfo],
)
