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

load(":cc_toolchain_config_osx.bzl", "osx_cc_toolchain_config")
load(":cc_toolchain_config_linux_arm64.bzl", "arm64_cc_toolchain_config")
load(":cc_toolchain_config_windows.bzl", "windows_cc_toolchain_config")


cc_toolchain_suite(
    name = "multiarch_toolchain",
    toolchains = {
        "k8|osxcross": ":cc-clang-osx",
        "k8|clang": "cc-clang-amd64",
        "aarch64|clang": ":cc-clang-arm64",
        "k8": "cc-clang-amd64",
        "aarch64": ":cc-clang-arm64",
        "k8|mingw-w64": ":cc-mingw-amd64",
    },
)

cc_toolchain_suite(
    name = "hostonly_toolchain",
    toolchains = {
        "k8": "cc-clang-amd64",
    },
)

filegroup(
    name = "empty",
    srcs = [],
)

config_setting(
    name = "osx_amd64",
    constraint_values = [
        "@platforms//os:osx",
        "@platforms//cpu:x86_64",
    ],
)

config_setting(
    name = "linux_arm64",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:aarch64",
    ],
)

config_setting(
    name = "linux_amd64",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:x86_64",
    ],
)

config_setting(
    name = "windows_amd64",
    constraint_values = [
        "@platforms//os:windows",
        "@platforms//cpu:x86_64",
    ],
)

arm64_cc_toolchain_config(
    name = "local-arm64",
    target = "aarch64-linux-gnu",
)

arm64_cc_toolchain_config(
    name = "local-amd64",
    target = "x86_64-unknown-linux-gnu",
)

osx_cc_toolchain_config(
    name = "local-osxcross",
    target = "darwin_x86_64",
)

windows_cc_toolchain_config(
    name = "local-windows",
    target = "x86_64-w64",
)

cc_toolchain(
    name = "cc-mingw-amd64",
    all_files = ":empty",
    ar_files = ":empty",
    as_files = ":mingw_compiler_files",
    compiler_files = ":mingw_compiler_files",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 0,
    toolchain_config = ":local-windows",
)

cc_toolchain(
    name = "cc-clang-arm64",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 1,
    toolchain_config = ":local-arm64",
)

cc_toolchain(
    name = "cc-clang-osx",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 1,
    toolchain_config = ":local-osxcross",
)

cc_toolchain(
    name = "cc-clang-amd64",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 1,
    toolchain_config = ":local-amd64",
)

toolchain(
    name = "cc-toolchain-multiarch",
    exec_compatible_with = [
        "@platforms//os:linux",
        "@platforms//cpu:x86_64",
    ],
    target_compatible_with = [],
    toolchain = select({
        ":linux_arm64": ":cc-clang-arm64",
        ":linux_amd64": ":cc-clang-amd64",
        ":osx_amd64": ":cc-clang-osx",
        ":windows_amd64": ":cc-mingw-amd64",
    }),
    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
