]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
cross-canadian/libgcc: fix aarch64's multilib SDK rbt/aarch64_lib32
authorRobert Yang <liezhi.yang@windriver.com>
Wed, 4 Nov 2015 08:42:30 +0000 (00:42 -0800)
committerRobert Yang <liezhi.yang@windriver.com>
Thu, 5 Nov 2015 01:46:14 +0000 (17:46 -0800)
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't,
this makes multilib sdk doesn't work, for example:

MACHINE = qemuarm64
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"

$ bitbake core-image-minimal -cpopulate_sdk

Then extract SDK, the
environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi
doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
  which doesn't exist, the patch for cross-canadian.bbclass
  fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi
  which doesn't exist, the patch for libgcc-common.inc fixes the
  problem.

[YOCTO #8616]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
meta/classes/cross-canadian.bbclass
meta/recipes-devtools/gcc/libgcc-common.inc
meta/recipes-devtools/gcc/libgcc.inc

index ea17f09bcae522848e61efded9631274b8fda474..bf016de80a0599dba3c4feb3d52a0dc4458e4e71 100644 (file)
@@ -18,6 +18,7 @@ PACKAGE_ARCH = "${SDK_ARCH}-${SDKPKGSUFFIX}"
 CANADIANEXTRAOS = "linux-uclibc linux-musl"
 CANADIANEXTRAVENDOR = ""
 MODIFYTOS ??= "1"
+GNUEABI_SUFFIX = ""
 python () {
     archs = d.getVar('PACKAGE_ARCHS', True).split()
     sdkarchs = []
@@ -69,6 +70,7 @@ python () {
         d.appendVar("CANADIANEXTRAOS", " linux-gnun32 linux-uclibcn32 linux-musln32")
     if tarch == "arm" or tarch == "armeb":
         d.setVar("TARGET_OS", "linux-gnueabi")
+        d.setVar("GNUEABI_SUFFIX", "-gnueabi")
     else:
         d.setVar("TARGET_OS", "linux")
 
@@ -167,6 +169,7 @@ SHLIBSWORKDIR = "${PKGDATA_DIR}/nativesdk-shlibs2"
 cross_canadian_bindirlinks () {
        for i in linux ${CANADIANEXTRAOS}
        do
+               i="$i${GNUEABI_SUFFIX}"
                for v in ${CANADIANEXTRAVENDOR}
                do
                        d=${D}${bindir}/../${TARGET_ARCH}$v-$i
index b09ea657e79830c1c2f66a652fcb2b7b2c27e2ba..71e09d84f8bd336504ef006244fb2a61867cb564 100644 (file)
@@ -134,11 +134,21 @@ BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}"
 
 addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot
 fakeroot python do_extra_symlinks() {
-    targetsys = d.getVar('BASETARGET_SYS', True)
-
-    if targetsys != d.getVar('TARGET_SYS', True):
-        dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsys
-        src = d.getVar('TARGET_SYS', True)
-        if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)):
-            os.symlink(src, dest)
+    base_targetsys = d.getVar('BASETARGET_SYS', True)
+    targetsys = d.getVar('TARGET_SYS', True)
+
+    if base_targetsys != targetsys:
+        dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + base_targetsys
+        dest_list = [dest]
+        # For multilib like aarch64 + arm, need 2 symlinks:
+        # 1) BASETARGET_SYS as usual
+        # 2) BASETARGET_SYS + "-gnueabi" for multilib
+        libce = d.getVar('LIBCEXTENSION', True)
+        abie = d.getVar('ABIEXTENSION', True)
+        if abie and libce and targetsys.endswith(libce + abie):
+            dest_list.append(dest + libce + abie)
+        src = targetsys
+        for dir in dest_list:
+            if not os.path.lexists(dir) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)):
+                os.symlink(src, dir)
 }
index 95fa3f40b025bd221d6b990f63dafb182011251e..f6a0a8ce1dc09993f5dcb519c973221fd5470199 100644 (file)
@@ -17,7 +17,7 @@ LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception"
 
 FILES_${PN}-dev = "\
     ${base_libdir}/libgcc*.so \
-    ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \
+    ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}*', d)} \
     ${libdir}/${TARGET_SYS}/${BINV}* \
 "