We could do with one decent general purpose python function to query the
path to the dynamic loader. Convert the shell code into python.

Also correct baremetal to return "None", not musl loaders.

Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
---
 meta/classes/image-mklibs.bbclass  |   2 +-
 meta/classes/image-prelink.bbclass |   2 +-
 meta/classes/linuxloader.bbclass   | 112 ++++++++++++-----------------
 3 files changed, 47 insertions(+), 69 deletions(-)

diff --git a/meta/classes/image-mklibs.bbclass 
b/meta/classes/image-mklibs.bbclass
index 5f6df1b17fd..68e11d43655 100644
--- a/meta/classes/image-mklibs.bbclass
+++ b/meta/classes/image-mklibs.bbclass
@@ -19,7 +19,7 @@ mklibs_optimize_image_doit() {
                echo $i
        done > ${WORKDIR}/mklibs/executables.list
 
-       dynamic_loader=$(linuxloader)
+       dynamic_loader=${@get_linuxloader(d)}
 
        mklibs -v \
                --ldlib ${dynamic_loader} \
diff --git a/meta/classes/image-prelink.bbclass 
b/meta/classes/image-prelink.bbclass
index 6a8afa8fa95..04dd57c940a 100644
--- a/meta/classes/image-prelink.bbclass
+++ b/meta/classes/image-prelink.bbclass
@@ -33,7 +33,7 @@ prelink_image () {
        fi
        cat ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf >> $ldsoconf
 
-       dynamic_loader=$(linuxloader)
+       dynamic_loader=${@get_linuxloader(d)}
 
        # prelink!
        if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
diff --git a/meta/classes/linuxloader.bbclass b/meta/classes/linuxloader.bbclass
index 8f30eb32e76..e1364a4e55b 100644
--- a/meta/classes/linuxloader.bbclass
+++ b/meta/classes/linuxloader.bbclass
@@ -1,70 +1,48 @@
-LDSO_TCLIBC = "glibc"
-LDSO_TCLIBC_libc-musl = "musl"
-LDSO_TCLIBC_libc-baremetal = "musl"
+def get_linuxloader(d):
+    import re
 
-linuxloader_glibc () {
-       case ${TARGET_ARCH} in
-               powerpc | microblaze )
-                       dynamic_loader="${base_libdir}/ld.so.1"
-                       ;;
-               mipsisa32r6el | mipsisa32r6 | mipsisa64r6el | mipsisa64r6)
-                       dynamic_loader="${base_libdir}/ld-linux-mipsn8.so.1"
-                       ;;
-               mips* )
-                       dynamic_loader="${base_libdir}/ld.so.1"
-                       ;;
-               powerpc64)
-                       dynamic_loader="${base_libdir}/ld64.so.1"
-                       ;;
-               x86_64)
-                       dynamic_loader="${base_libdir}/ld-linux-x86-64.so.2"
-                       ;;
-               i*86 )
-                       dynamic_loader="${base_libdir}/ld-linux.so.2"
-                       ;;
-               arm )
-                       dynamic_loader="${base_libdir}/ld-linux.so.3"
-                       ;;
-               * )
-                       dynamic_loader="/unknown_dynamic_linker"
-                       ;;
-       esac
-       echo $dynamic_loader
-}
+    targetarch = d.getVar("TARGET_ARCH")
+    overrides = d.getVar("OVERRIDES").split(":")
 
-linuxloader_musl () {
-       case ${TARGET_ARCH} in
-               microblaze* )
-                       
dynamic_loader="${base_libdir}/ld-musl-microblaze${@bb.utils.contains('TUNE_FEATURES',
 'bigendian', '', 'el' ,d)}.so.1"
-                       ;;
-               mips* )
-                       
dynamic_loader="${base_libdir}/ld-musl-mips${ABIEXTENSION}${MIPSPKGSFX_BYTE}${MIPSPKGSFX_R6}${MIPSPKGSFX_ENDIAN}${@['',
 '-sf'][d.getVar('TARGET_FPU') == 'soft']}.so.1"
-                       ;;
-               powerpc )
-                       dynamic_loader="${base_libdir}/ld-musl-powerpc${@['', 
'-sf'][d.getVar('TARGET_FPU') == 'soft']}.so.1"
-                       ;;
-               powerpc64 )
-                       dynamic_loader="${base_libdir}/ld-musl-powerpc64.so.1"
-                       ;;
-               x86_64 )
-                       dynamic_loader="${base_libdir}/ld-musl-x86_64.so.1"
-                       ;;
-               i*86 )
-                       dynamic_loader="${base_libdir}/ld-musl-i386.so.1"
-                       ;;
-               arm* )
-                       
dynamic_loader="${base_libdir}/ld-musl-arm${ARMPKGSFX_ENDIAN}${ARMPKGSFX_EABI}.so.1"
-                       ;;
-               aarch64* )
-                       
dynamic_loader="${base_libdir}/ld-musl-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
-                       ;;
-               * )
-                       dynamic_loader="/unknown_dynamic_linker"
-                       ;;
-       esac
-       echo $dynamic_loader
-}
+    # No loader for baremetal
+    if "libc-baremetal" in overrides:
+        return None
+
+    dynamic_loader = None
+    if "libc-musl" in overrides:
+        if targetarch.startswith("microblaze"):
+            dynamic_loader = 
"${base_libdir}/ld-musl-microblaze${@bb.utils.contains('TUNE_FEATURES', 
'bigendian', '', 'el' ,d)}.so.1"
+        elif targetarch.startswith("mips"):
+            dynamic_loader = 
"${base_libdir}/ld-musl-mips${ABIEXTENSION}${MIPSPKGSFX_BYTE}${MIPSPKGSFX_R6}${MIPSPKGSFX_ENDIAN}${@['',
 '-sf'][d.getVar('TARGET_FPU') == 'soft']}.so.1"
+        elif targetarch == "powerpc":
+            dynamic_loader = "${base_libdir}/ld-musl-powerpc${@['', 
'-sf'][d.getVar('TARGET_FPU') == 'soft']}.so.1"
+        elif targetarch == "powerpc64":
+            dynamic_loader = "${base_libdir}/ld-musl-powerpc64.so.1"
+        elif targetarch == "x86_64":
+            dynamic_loader = "${base_libdir}/ld-musl-x86_64.so.1"
+        elif re.search("i.86", targetarch):
+            dynamic_loader = "${base_libdir}/ld-musl-i386.so.1"
+        elif targetarch.startswith("arm"):
+            dynamic_loader = 
"${base_libdir}/ld-musl-arm${ARMPKGSFX_ENDIAN}${ARMPKGSFX_EABI}.so.1"
+        elif targetarch.startswith("aarch64"):
+            dynamic_loader = 
"${base_libdir}/ld-musl-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
+    else:
+        # glibc
+        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.so.3"
+
+    return dynamic_loader
+get_linuxloader[vardepvalue] = "${@get_linuxloader(d)}"
 
-linuxloader () {
-       linuxloader_${LDSO_TCLIBC}
-}
-- 
2.17.1

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to