[OE-core] [oe-core][PATCH v2] libgcc-common.inc: Fix symbol link to mutilib directories

Yuanjie Huang yuanjie.huang at windriver.com
Mon Jan 23 04:11:50 UTC 2017


The multilib symbol links are created for gcc to locate libgcc files.
Its source path contains TARGET_SYS of multilib libgcc. However, a
multilib's TARGET_SYS is not generated correctly all the time now.
For example,

  MACHINE = "qemumips64"
  DEFAULTTUNE = "mips64-n32"
  MULTILIBS = "multilib:lib64"
  DEFAULTTUNE_virtclass-multilib-lib64 = "mips64"

In N32 libgcc, the symbol link for N64 is created as:

  64 -> ../../../lib64/mips64-wrsmllib64-linux-gnun32/5.2.0/

while it should be:

  64 -> ../../../lib64/mips64-wrsmllib64-linux/5.2.0/

This issue sometimes won't break compiler, since gcc also searches paths
calculated with OS multilib directories beside multilib directories .

This patch resolve the problem by reading TARGET_SYS from a localdata
environment with proper multilib overrides.

Signed-off-by: Yuanjie Huang <yuanjie.huang at windriver.com>
---
 meta/recipes-devtools/gcc/libgcc-common.inc | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc
index 7a3b410..4ccdfb9 100644
--- a/meta/recipes-devtools/gcc/libgcc-common.inc
+++ b/meta/recipes-devtools/gcc/libgcc-common.inc
@@ -106,20 +106,19 @@ fakeroot python do_multilib_install() {
             bb.warn("Tune %s doesn't have a baselib set. Skipping..." % tune)
             continue
 
-        tune_arch = tune_parameters['arch']
         tune_bitness = tune_baselib.replace('lib', '')
         if not tune_bitness:
             tune_bitness = '32' # /lib => 32bit lib
 
-        tune_abiextension = tune_parameters['abiextension']
-        if tune_abiextension:
-            libcextension = '-gnu' + tune_abiextension
-        else:
-            libcextension = ''
+        localdata = bb.data.createCopy(d)
+        overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + ml
+        localdata.setVar("OVERRIDES", overrides)
+        localdata.setVar("MLPREFIX", ml + "-")
+        bb.data.update_data(localdata)
+        ml_target_sys = localdata.getVar('TARGET_SYS') or ''
 
         src = '../../../' + tune_baselib + '/' + \
-            tune_arch + d.getVar('TARGET_VENDOR') + 'ml' + ml + \
-            '-' + d.getVar('TARGET_OS') + libcextension +  '/' + binv + '/'
+            ml_target_sys + '/' + binv + '/'
 
         dest = d.getVar('D') + d.getVar('libdir') + '/' + \
             d.getVar('TARGET_SYS') + '/' + binv + '/' + tune_bitness
-- 
2.9.3




More information about the Openembedded-core mailing list