load("@rules_cc//cc:cc_library.bzl", "cc_library")

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

alias(
    name = "pico_divider",
    actual = select({
        "//bazel/constraint:pico_divider_auto_enabled": ":pico_divider_auto",
        "//bazel/constraint:pico_divider_hardware_enabled": ":divider_hardware",
        "//conditions:default": ":divider_compiler",
    }),
)

alias(
    name = "pico_divider_auto",
    actual = select({
        "//bazel/constraint:rp2040": ":divider_hardware",
        "//conditions:default": ":divider_compiler",
    }),
)

cc_library(
    name = "divider_compiler",
    srcs = ["divider_compiler.c"],
    target_compatible_with = ["//bazel/constraint:rp2350"],
    deps = [
        "//src/common/pico_divider_headers",
        "//src/rp2_common:hardware_regs",
        "//src/rp2_common:pico_platform",
        "//src/rp2_common/hardware_divider",
    ],
)

cc_library(
    name = "divider_hardware",
    srcs = ["divider_hardware.S"],
    linkopts = [
        "-Wl,--wrap=__aeabi_idiv",
        "-Wl,--wrap=__aeabi_idivmod",
        "-Wl,--wrap=__aeabi_ldivmod",
        "-Wl,--wrap=__aeabi_uidiv",
        "-Wl,--wrap=__aeabi_uidivmod",
        "-Wl,--wrap=__aeabi_uldivmod",
    ],
    target_compatible_with = ["//bazel/constraint:rp2040"],
    deps = [
        "//src/common/pico_divider_headers",
        "//src/rp2_common:hardware_regs",
        "//src/rp2_common:pico_platform",
        "//src/rp2_common/hardware_divider",
    ],
    alwayslink = True,  # Ensures the wrapped symbols are linked in.
)
