瀏覽代碼

linuxloader: Convert to python function

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.purdie@linuxfoundation.org>
Richard Purdie 5 年之前
父節點
當前提交
73fab4ede1
共有 3 個文件被更改,包括 47 次插入69 次删除
  1. 1 1
      meta/classes/image-mklibs.bbclass
  2. 1 1
      meta/classes/image-prelink.bbclass
  3. 45 67
      meta/classes/linuxloader.bbclass

+ 1 - 1
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} \

+ 1 - 1
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

+ 45 - 67
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}
-}