"""Definitions for support config settings and platform definitions"""

load("@bazel_skylib//lib:selects.bzl", "selects")
load(
    ":triple_mappings.bzl",
    "SUPPORTED_PLATFORM_TRIPLES",
    "cpu_arch_to_constraints",
    "system_to_constraints",
    "triple_to_constraint_set",
)

_SUPPORTED_CPU_ARCH = [
    "aarch64",
    "arm",
    "armv7",
    "i686",
    "powerpc",
    "s390x",
    "x86_64",
    "riscv32",
    "riscv64",
]

_SUPPORTED_SYSTEMS = [
    "android",
    "darwin",
    "freebsd",
    "ios",
    "linux",
    "windows",
    "nto",
]

# buildifier: disable=unnamed-macro
def declare_config_settings():
    """Helper function for declaring `config_setting`s"""
    for cpu_arch in _SUPPORTED_CPU_ARCH:
        native.config_setting(
            name = cpu_arch,
            constraint_values = cpu_arch_to_constraints(cpu_arch),
        )

    for system in _SUPPORTED_SYSTEMS:
        native.config_setting(
            name = system,
            constraint_values = system_to_constraints(system),
        )

    # Add alias for OSX to "darwin" to match what users will be expecting.
    native.alias(
        name = "osx",
        actual = ":darwin",
    )

    # Add alias for OSX to "macos" to be consistent with the long-term
    # direction of `@platforms` in using the OS's modern name.
    native.alias(
        name = "macos",
        actual = ":darwin",
    )

    all_supported_triples = SUPPORTED_PLATFORM_TRIPLES
    for triple in all_supported_triples:
        native.config_setting(
            name = triple,
            constraint_values = triple_to_constraint_set(triple),
        )

    native.platform(
        name = "wasm",
        constraint_values = [
            "@platforms//cpu:wasm32",
            str(Label("//rust/platform/os:unknown")),
        ],
    )

    native.platform(
        name = "wasi",
        constraint_values = [
            "@platforms//cpu:wasm32",
            "@platforms//os:wasi",
        ],
    )

    selects.config_setting_group(
        name = "unix",
        match_any = [
            ":android",
            ":darwin",
            ":freebsd",
            ":linux",
            ":nto",
        ],
    )
