def get_musl_loader_arch(d):
    import re
    ldso_arch = None

    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 = None
    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 None

    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)}"
