Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 1/2] linuxloader.bbclass: Refactor to have seprate functions for musl/glibc loader
@ 2018-09-20  3:52 Khem Raj
  2018-09-20  3:52 ` [PATCH V3 2/2] musl: Add aliases for glibc provided libraries Khem Raj
  0 siblings, 1 reply; 2+ messages in thread
From: Khem Raj @ 2018-09-20  3:52 UTC (permalink / raw)
  To: openembedded-core

this makes it possible to use this for musl where we are trying to
create a glibc compat package

Add missing aarch64 loader definition for glibc function

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 meta/classes/linuxloader.bbclass | 85 ++++++++++++++++++--------------
 1 file changed, 49 insertions(+), 36 deletions(-)

diff --git a/meta/classes/linuxloader.bbclass b/meta/classes/linuxloader.bbclass
index e1364a4e55..b4c413494a 100644
--- a/meta/classes/linuxloader.bbclass
+++ b/meta/classes/linuxloader.bbclass
@@ -1,48 +1,61 @@
-def get_linuxloader(d):
+def get_musl_loader(d):
+    import re
+    dynamic_loader = None
+
+    targetarch = d.getVar("TARGET_ARCH")
+    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"
+    return dynamic_loader
+
+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.so.3"
+    elif targetarch.startswith("aarch64"):
+        dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
+    return dynamic_loader
+
+def get_linuxloader(d):
     overrides = d.getVar("OVERRIDES").split(":")
 
-    # 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"
+        dynamic_loader = get_musl_loader(d)
     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"
-
+        dynamic_loader = get_glibc_loader(d)
     return dynamic_loader
-get_linuxloader[vardepvalue] = "${@get_linuxloader(d)}"
 
+get_linuxloader[vardepvalue] = "${@get_linuxloader(d)}"
+get_musl_loader[vardepvalue] = "${@get_musl_loader(d)}"
+get_glibc_loader[vardepvalue] = "${@get_glibc_loader(d)}"
-- 
2.19.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH V3 2/2] musl: Add aliases for glibc provided libraries
  2018-09-20  3:52 [PATCH 1/2] linuxloader.bbclass: Refactor to have seprate functions for musl/glibc loader Khem Raj
@ 2018-09-20  3:52 ` Khem Raj
  0 siblings, 0 replies; 2+ messages in thread
From: Khem Raj @ 2018-09-20  3:52 UTC (permalink / raw)
  To: openembedded-core

This is a step towards running pebuilt applications for glibc  on musl
There are many realworld applications which are not always built from
source, especially provided by third party

Package the glibc symlinks into new package musl-glibc-compat

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
V3: Inherit linuxloader for glibc ldso

 meta/recipes-core/musl/musl_git.bb | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/meta/recipes-core/musl/musl_git.bb b/meta/recipes-core/musl/musl_git.bb
index be31718e3a..f0556533b5 100644
--- a/meta/recipes-core/musl/musl_git.bb
+++ b/meta/recipes-core/musl/musl_git.bb
@@ -2,6 +2,7 @@
 # Released under the MIT license (see COPYING.MIT for the terms)
 
 require musl.inc
+inherit linuxloader
 
 SRCREV = "0fa1e638e87cf257e9f96b4019b2076afd674a19"
 
@@ -26,6 +27,7 @@ DEPENDS = "virtual/${TARGET_PREFIX}binutils \
            bsd-headers \
            libssp-nonshared \
           "
+GLIBC_LDSO = "${@get_glibc_loader(d)}"
 
 export CROSS_COMPILE="${TARGET_PREFIX}"
 
@@ -62,12 +64,26 @@ do_install() {
 	install -d ${D}${bindir}
 	rm -f ${D}${bindir}/ldd
 	lnr ${D}${libdir}/libc.so ${D}${bindir}/ldd
+	lnr ${D}${libdir}/libc.so ${D}${GLIBC_LDSO}
 	for l in crypt dl m pthread resolv rt util xnet
 	do
 		ln -sf libc.so ${D}${libdir}/lib$l.so
 	done
+	for i in libc.so.6 libcrypt.so.1 libdl.so.2 libm.so.6 libpthread.so.0 libresolv.so.2 librt.so.1 libutil.so.1; do
+		ln -sf libc.so ${D}${libdir}/$i
+	done
 }
 
+PACKAGES =+ "${PN}-glibc-compat"
+
+FILES_${PN}-glibc-compat += "\
+                ${libdir}/libc.so.6 ${libdir}/libcrypt.so.1 \
+                ${libdir}/libdl.so.2 ${libdir}/libm.so.6 \
+                ${libdir}/libpthread.so.0 ${libdir}/libresolv.so.2 \
+                ${libdir}/librt.so.1 ${libdir}/libutil.so.1 \
+                ${GLIBC_LDSO} \
+                "
+
 RDEPENDS_${PN}-dev += "linux-libc-headers-dev bsd-headers-dev libssp-nonshared-staticdev"
 RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
 RPROVIDES_${PN} += "ldd libsegfault rtld(GNU_HASH)"
-- 
2.19.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-09-20  3:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-20  3:52 [PATCH 1/2] linuxloader.bbclass: Refactor to have seprate functions for musl/glibc loader Khem Raj
2018-09-20  3:52 ` [PATCH V3 2/2] musl: Add aliases for glibc provided libraries Khem Raj

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox