load(":transitions.bzl", "configuration_transition")

filegroup(
    name = "targets",
    srcs = {
        "riscv64gc-k23-none-kernel.json": "./targets/riscv64gc-k23-none-kernel.json",
    },
    visibility = ["PUBLIC"],
)

# transitions

configuration_transition(
    name = "loader",
    constraint_values = [
        "constraints//:env[loader]",
        "constraints//:rust-std[source]",
    ],
    visibility = ["PUBLIC"],
)

configuration_transition(
    name = "kernel",
    constraint_values = [
        "constraints//:env[kernel]",
        "constraints//:rust-std[source]",
    ],
    visibility = ["PUBLIC"],
)

configuration_transition(
    name = "kernel-tests",
    constraint_values = [
        "constraints//:env[kernel]",
        "constraints//:rust-std[source]",
        "constraints//:kernel-tests[enabled]",
        # On-target tests are unwatchably slow without optimizations; pin opt-3
        # for the test build so it stays usable on a developer machine.
        "constraints//:opt-level[3]",
        # "constraints//:debuginfo[line-tables-only]",
        # "constraints//:strip[debuginfo]"
    ],
    visibility = ["PUBLIC"],
)

configuration_transition(
    name = "rust_bootstrap",
    constraint_values = [
        "constraints//:rust-std[bootstrap]",
    ],
    visibility = ["PUBLIC"],
)

# Sanitizer / opt / debuginfo overlay for fuzz binaries. Applied via
# incoming_transition (not the rule's `modifiers` attr) so the toolchain's
# `select(constraints//:sanitizer[address])` actually picks up the link flag
# that pulls libstdc++/libc++ in on Linux.
configuration_transition(
    name = "fuzz",
    constraint_values = [
        "constraints//:sanitizer[address]",
        "constraints//:opt-level[3]",
        "constraints//:debuginfo[full]",
    ],
    visibility = ["PUBLIC"],
)
