def get_musl_loader_arch(d):
    import re
    ldso_arch = "NotSupported"

    targetarch = d.getVar("TARGET_ARCH")
    if targetarch.startswith("microblaze"):
        ldso_arch = "microblaze${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '', 'el', d)}"
    elif targetarch.startswith("mips"):
        ldso_arch = "mips${ABIEXTENSION}${MIPSPKGSFX_BYTE}${MIPSPKGSFX_R6}${MIPSPKGSFX_ENDIAN}${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
    elif targetarch == "powerpc":
        ldso_arch = "powerpc${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
    elif targetarch == "powerpc64":
        ldso_arch = "powerpc64"
    elif targetarch == "x86_64":
        ldso_arch = "x86_64"
    elif re.search("i.86", targetarch):
        ldso_arch = "i386"
    elif targetarch.startswith("arm"):
        ldso_arch = "arm${ARMPKGSFX_ENDIAN}${ARMPKGSFX_EABI}"
    elif targetarch.startswith("aarch64"):
        ldso_arch = "aarch64${ARMPKGSFX_ENDIAN_64}"
    elif targetarch.startswith("riscv64"):
        ldso_arch = "riscv64${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
    elif targetarch.startswith("riscv32"):
        ldso_arch = "riscv32${@['', '-sf'][d.getVar('TARGET_FPU') == 'soft']}"
    return ldso_arch

def get_musl_loader(d):
    import re
    return "/lib/ld-musl-" + get_musl_loader_arch(d) + ".so.1"

def get_glibc_loader(d):
    import re

    dynamic_loader = "NotSupported"
    targetarch = d.getVar("TARGET_ARCH")
    if targetarch in ["powerpc", "microblaze"]:
        dynamic_loader = "${base_libdir}/ld.so.1"
    elif targetarch in ["mipsisa32r6el", "mipsisa32r6", "mipsisa64r6el", "mipsisa64r6"]:
        dynamic_loader = "${base_libdir}/ld-linux-mipsn8.so.1"
    elif targetarch.startswith("mips"):
        dynamic_loader = "${base_libdir}/ld.so.1"
    elif targetarch == "powerpc64":
        dynamic_loader = "${base_libdir}/ld64.so.1"
    elif targetarch == "x86_64":
        dynamic_loader = "${base_libdir}/ld-linux-x86-64.so.2"
    elif re.search("i.86", targetarch):
        dynamic_loader = "${base_libdir}/ld-linux.so.2"
    elif targetarch == "arm":
        dynamic_loader = "${base_libdir}/ld-linux${@['-armhf', ''][d.getVar('TARGET_FPU') == 'soft']}.so.3"
    elif targetarch.startswith("aarch64"):
        dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
    elif targetarch.startswith("riscv64"):
        dynamic_loader = "${base_libdir}/ld-linux-riscv64-lp64${@['d', ''][d.getVar('TARGET_FPU') == 'soft']}.so.1"
    return dynamic_loader

def get_linuxloader(d):
    overrides = d.getVar("OVERRIDES").split(":")

    if "libc-baremetal" in overrides:
        return "NotSupported"

    if "libc-musl" in overrides:
        dynamic_loader = get_musl_loader(d)
    else:
        dynamic_loader = get_glibc_loader(d)
    return dynamic_loader

get_linuxloader[vardepvalue] = "${@get_linuxloader(d)}"
get_musl_loader[vardepvalue] = "${@get_musl_loader(d)}"
get_musl_loader_arch[vardepvalue] = "${@get_musl_loader_arch(d)}"
get_glibc_loader[vardepvalue] = "${@get_glibc_loader(d)}"
