[OE-core] [PATCH v2] cross-canadian/libgcc: fix aarch64's multilib SDK

Lei Maohui leimaohui at cn.fujitsu.com
Fri Jul 20 02:07:39 UTC 2018


The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't,
this makes multilib sdk doesn't work, there will be error as following:

.../usr/libexec/armeb-poky-linux-gux-linux-gnueabi/7.3.0/real-ld: cannot find crtbeginS.o: No such file or directo
.../usr/libexec/armeb-poky-linux-gux-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
.../usr/libexec/armeb-poky-linux-gux-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
collect2: error: ld returned 1 exit status

Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
Signed-off-by: Lei Maohui <leimaohui at cn.fujitsu.com>
---
 meta/recipes-devtools/gcc/libgcc-common.inc | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
index 848a476..a49fc98 100644
--- a/meta/recipes-devtools/gcc/libgcc-common.inc
+++ b/meta/recipes-devtools/gcc/libgcc-common.inc
@@ -145,11 +145,22 @@ fakeroot python do_extra_symlinks() {
     if bb.data.inherits_class('nativesdk', d):
         return
 
-    targetsys = d.getVar('BASETARGET_SYS')
+    base_targetsys = d.getVar('BASETARGET_SYS')
+    targetsys = d.getVar('TARGET_SYS')
+
+    if base_targetsys != targetsys:
+        dest = d.getVar('D') + d.getVar('libdir') + '/' + 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')
+        abie = d.getVar('ABIEXTENSION')
+        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)
 
-    if targetsys != d.getVar('TARGET_SYS'):
-        dest = d.getVar('D') + d.getVar('libdir') + '/' + targetsys
-        src = d.getVar('TARGET_SYS')
-        if not os.path.lexists(dest) and os.path.lexists(d.getVar('D') + d.getVar('libdir')):
-            os.symlink(src, dest)
 }
-- 
2.7.4






More information about the Openembedded-core mailing list