Skip to contentSkip to conversation

gcc-multilib-config: make aarch64 support multilib

PATCH In review Robert Yang 3 participants 6 messages Nov 5, 2015 – Nov 6, 2015

lore
Share & tools
lore
#0 lore raw

cover gcc-multilib-config: make aarch64 support multilib

The following changes since commit e44ed8c18e395b9c055aefee113b90708e8a8a2f:

build-appliance-image: Update to jethro head revision (2015-11-03 14:02:57 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib rbt/lib32-gcc
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/lib32-gcc

Robert Yang (1):
gcc-multilib-config: make aarch64 support multilib

 meta/recipes-devtools/gcc/gcc-multilib-config.inc |    7 +++++++
 1 file changed, 7 insertions(+)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 gcc-multilib-config: make aarch64 support multilib

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

$ bitbake core-image-minimal -cpopulate_sdk

WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64
WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64

[YOCTO #8638]

---
 meta/recipes-devtools/gcc/gcc-multilib-config.inc |    7 +++++++
 1 file changed, 7 insertions(+)
meta/recipes-devtools/gcc/gcc-multilib-config.inc +7 -0
index 1c0a45a..a0a2ac0 100644
@@ -29,6 +29,9 @@ python gcc_multilib_setup() {
     bb.utils.remove(build_conf_dir, True)
     ml_globs = ('%s/*/t-linux64' % src_conf_dir,
                 '%s/*/linux64.h' % src_conf_dir,
+                '%s/aarch64/t-aarch64' % src_conf_dir,
+                '%s/aarch64/aarch64.h' % src_conf_dir,
+                '%s/aarch64/aarch64-cores.def' % src_conf_dir,
                 '%s/*/linux.h' % src_conf_dir,
                 '%s/linux.h' % src_conf_dir)
 
@@ -130,6 +133,8 @@ python gcc_multilib_setup() {
         'mips64'    : ['gcc/config/mips/t-linux64'],
         'powerpc'   : ['gcc/config/rs6000/t-linux64'],
         'powerpc64' : ['gcc/config/rs6000/t-linux64'],
+        'aarch64'   : ['gcc/config/aarch64/t-aarch64'],
+        'arm'       : ['gcc/config/aarch64/t-aarch64'],
     }
 
     gcc_header_config_files = {
@@ -140,6 +145,8 @@ python gcc_multilib_setup() {
         'mips64'    : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
         'powerpc'   : ['gcc/config/rs6000/linux64.h'],
         'powerpc64' : ['gcc/config/rs6000/linux64.h'],
+        'aarch64'   : ['gcc/config/aarch64/aarch64.h'],
+        'arm'       : ['gcc/config/aarch64/aarch64.h'],
     }
 
     libdir32 = 'SYSTEMLIBS_DIR'
Signature · 1 line
1.7.9.5
#2 lore raw
Quoted 42 lines · Robert Yang

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

$ bitbake core-image-minimal -cpopulate_sdk

WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64
WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64

[YOCTO #8638]

---
 meta/recipes-devtools/gcc/gcc-multilib-config.inc |    7 +++++++
 1 file changed, 7 insertions(+)
meta/recipes-devtools/gcc/gcc-multilib-config.inc +5 -0
index 1c0a45a..a0a2ac0 100644
@@ -29,6 +29,9 @@ python gcc_multilib_setup() {
     bb.utils.remove(build_conf_dir, True)
     ml_globs = ('%s/*/t-linux64' % src_conf_dir,
                 '%s/*/linux64.h' % src_conf_dir,
+                '%s/aarch64/t-aarch64' % src_conf_dir,
+                '%s/aarch64/aarch64.h' % src_conf_dir,
+                '%s/aarch64/aarch64-cores.def' % src_conf_dir,
                 '%s/*/linux.h' % src_conf_dir,
                 '%s/linux.h' % src_conf_dir)
 
@@ -130,6 +133,8 @@ python gcc_multilib_setup() {
         'mips64'    : ['gcc/config/mips/t-linux64'],
         'powerpc'   : ['gcc/config/rs6000/t-linux64'],
         'powerpc64' : ['gcc/config/rs6000/t-linux64'],
+        'aarch64'   : ['gcc/config/aarch64/t-aarch64'],
+        'arm'       : ['gcc/config/aarch64/t-aarch64'],
     }
 
     gcc_header_config_files = {

meta/recipes-devtools/gcc/gcc-multilib-config.inc python gcc_multilib_setup() { · line 150

Quoted 6 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +2 -0
@@ -140,6 +145,8 @@ python gcc_multilib_setup() {
         'mips64'    : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
         'powerpc'   : ['gcc/config/rs6000/linux64.h'],
         'powerpc64' : ['gcc/config/rs6000/linux64.h'],
+        'aarch64'   : ['gcc/config/aarch64/aarch64.h'],
+        'arm'       : ['gcc/config/aarch64/aarch64.h'],
     }

I'm not sure the above is correct in this case. As I believe GCC treats aarch64 and arm as different architectures unlike MIPS, Power and IA32.

In this case, I would expect two specific cross compilers to be generated, one for armv7 and one for aarch64, instead of a combination single compiler that understand both.

So in this case, it might be better to have an exception to the warning message... (unless I'm wrong, in which case this IS likely a correct fix....)

Hopefully Khem and/or Richard will be able to comment as they are more familiar with this code path.

Quoted 3 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +0 -0
     libdir32 = 'SYSTEMLIBS_DIR'
 
#3 lore raw
Quoted 53 lines · Mark Hatle
Quoted 42 lines · Robert Yang

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

$ bitbake core-image-minimal -cpopulate_sdk

WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64
WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64

[YOCTO #8638]

---
  meta/recipes-devtools/gcc/gcc-multilib-config.inc |    7 +++++++
  1 file changed, 7 insertions(+)
meta/recipes-devtools/gcc/gcc-multilib-config.inc +5 -0
index 1c0a45a..a0a2ac0 100644
@@ -29,6 +29,9 @@ python gcc_multilib_setup() {
      bb.utils.remove(build_conf_dir, True)
      ml_globs = ('%s/*/t-linux64' % src_conf_dir,
                  '%s/*/linux64.h' % src_conf_dir,
+                '%s/aarch64/t-aarch64' % src_conf_dir,
+                '%s/aarch64/aarch64.h' % src_conf_dir,
+                '%s/aarch64/aarch64-cores.def' % src_conf_dir,
                  '%s/*/linux.h' % src_conf_dir,
                  '%s/linux.h' % src_conf_dir)
 
@@ -130,6 +133,8 @@ python gcc_multilib_setup() {
          'mips64'    : ['gcc/config/mips/t-linux64'],
          'powerpc'   : ['gcc/config/rs6000/t-linux64'],
          'powerpc64' : ['gcc/config/rs6000/t-linux64'],
+        'aarch64'   : ['gcc/config/aarch64/t-aarch64'],
+        'arm'       : ['gcc/config/aarch64/t-aarch64'],
      }
 
      gcc_header_config_files = {

meta/recipes-devtools/gcc/gcc-multilib-config.inc python gcc_multilib_setup() { · line 150

Quoted 6 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +2 -0
@@ -140,6 +145,8 @@ python gcc_multilib_setup() {
          'mips64'    : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
          'powerpc'   : ['gcc/config/rs6000/linux64.h'],
          'powerpc64' : ['gcc/config/rs6000/linux64.h'],
+        'aarch64'   : ['gcc/config/aarch64/aarch64.h'],
+        'arm'       : ['gcc/config/aarch64/aarch64.h'],
      }

I'm not sure the above is correct in this case. As I believe GCC treats aarch64 and arm as different architectures unlike MIPS, Power and IA32.

Quoted 3 lines

In this case, I would expect two specific cross compilers to be generated, one for armv7 and one for aarch64, instead of a combination single compiler that understand both.

Hi Mark,

I think that there are two compilers ? For example, gcc and lib32-gcc. Yes, Hopefully we can get feed back from Khem or RP.

// Robert

Quoted 12 lines

So in this case, it might be better to have an exception to the warning message... (unless I'm wrong, in which case this IS likely a correct fix....)

Hopefully Khem and/or Richard will be able to comment as they are more familiar with this code path.

Quoted 3 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +0 -0
      libdir32 = 'SYSTEMLIBS_DIR'
 
#4 lore raw
In reply to Mark Hatle
Quoted 56 lines · Mark Hatle
Quoted 42 lines · Robert Yang

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

$ bitbake core-image-minimal -cpopulate_sdk

WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64
WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64

[YOCTO #8638]

---
meta/recipes-devtools/gcc/gcc-multilib-config.inc | 7 +++++++

1 file changed, 7 insertions(+)
meta/recipes-devtools/gcc/gcc-multilib-config.inc +5 -0
index 1c0a45a..a0a2ac0 100644
@@ -29,6 +29,9 @@ python gcc_multilib_setup() {
    bb.utils.remove(build_conf_dir, True)
    ml_globs = ('%s/*/t-linux64' % src_conf_dir,
                '%s/*/linux64.h' % src_conf_dir,
+                '%s/aarch64/t-aarch64' % src_conf_dir,
+                '%s/aarch64/aarch64.h' % src_conf_dir,
+                '%s/aarch64/aarch64-cores.def' % src_conf_dir,
                '%s/*/linux.h' % src_conf_dir,
                '%s/linux.h' % src_conf_dir)
 
@@ -130,6 +133,8 @@ python gcc_multilib_setup() {
        'mips64'    : ['gcc/config/mips/t-linux64'],
        'powerpc'   : ['gcc/config/rs6000/t-linux64'],
        'powerpc64' : ['gcc/config/rs6000/t-linux64'],
+        'aarch64'   : ['gcc/config/aarch64/t-aarch64'],
+        'arm'       : ['gcc/config/aarch64/t-aarch64'],
    }
 
    gcc_header_config_files = {

meta/recipes-devtools/gcc/gcc-multilib-config.inc python gcc_multilib_setup() { · line 150

Quoted 6 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +2 -0
@@ -140,6 +145,8 @@ python gcc_multilib_setup() {
        'mips64'    : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
        'powerpc'   : ['gcc/config/rs6000/linux64.h'],
        'powerpc64' : ['gcc/config/rs6000/linux64.h'],
+        'aarch64'   : ['gcc/config/aarch64/aarch64.h'],
+        'arm'       : ['gcc/config/aarch64/aarch64.h'],
    }

I'm not sure the above is correct in this case. As I believe GCC treats aarch64 and arm as different architectures unlike MIPS, Power and IA32.

Quoted 4 lines

In this case, I would expect two specific cross compilers to be generated, one for armv7 and one for aarch64, instead of a combination single compiler that understand both.

Well not entirely so, gcc can support ilp32 as a mutlilib variant for aarch64 so this patch is fine although if we should support ilp32 as a variant is another question, which folks can chime in and provide feedback if they have use of it. but nevertheless this patch should be ok

Quoted 10 lines

So in this case, it might be better to have an exception to the warning message... (unless I'm wrong, in which case this IS likely a correct fix....)

Hopefully Khem and/or Richard will be able to comment as they are more familiar with this code path.

Quoted 3 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +0 -0
    libdir32 = 'SYSTEMLIBS_DIR'
 
#5 lore raw
Quoted 61 lines · Khem Raj
Quoted 56 lines · Mark Hatle
Quoted 42 lines · Robert Yang

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

$ bitbake core-image-minimal -cpopulate_sdk

WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64
WARNING: gcc multilib setup is not supported for TARGET_ARCH=aarch64

[YOCTO #8638]

---
meta/recipes-devtools/gcc/gcc-multilib-config.inc | 7 +++++++

1 file changed, 7 insertions(+)
meta/recipes-devtools/gcc/gcc-multilib-config.inc +5 -0
index 1c0a45a..a0a2ac0 100644
@@ -29,6 +29,9 @@ python gcc_multilib_setup() {
    bb.utils.remove(build_conf_dir, True)
    ml_globs = ('%s/*/t-linux64' % src_conf_dir,
                '%s/*/linux64.h' % src_conf_dir,
+                '%s/aarch64/t-aarch64' % src_conf_dir,
+                '%s/aarch64/aarch64.h' % src_conf_dir,
+                '%s/aarch64/aarch64-cores.def' % src_conf_dir,
                '%s/*/linux.h' % src_conf_dir,
                '%s/linux.h' % src_conf_dir)
 
@@ -130,6 +133,8 @@ python gcc_multilib_setup() {
        'mips64'    : ['gcc/config/mips/t-linux64'],
        'powerpc'   : ['gcc/config/rs6000/t-linux64'],
        'powerpc64' : ['gcc/config/rs6000/t-linux64'],
+        'aarch64'   : ['gcc/config/aarch64/t-aarch64'],
+        'arm'       : ['gcc/config/aarch64/t-aarch64'],
    }
 
    gcc_header_config_files = {

meta/recipes-devtools/gcc/gcc-multilib-config.inc python gcc_multilib_setup() { · line 150

Quoted 6 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +2 -0
@@ -140,6 +145,8 @@ python gcc_multilib_setup() {
        'mips64'    : ['gcc/config/mips/linux.h', 'gcc/config/mips/linux64.h'],
        'powerpc'   : ['gcc/config/rs6000/linux64.h'],
        'powerpc64' : ['gcc/config/rs6000/linux64.h'],
+        'aarch64'   : ['gcc/config/aarch64/aarch64.h'],
+        'arm'       : ['gcc/config/aarch64/aarch64.h'],
    }

I'm not sure the above is correct in this case. As I believe GCC treats aarch64 and arm as different architectures unlike MIPS, Power and IA32.

Quoted 4 lines

In this case, I would expect two specific cross compilers to be generated, one for armv7 and one for aarch64, instead of a combination single compiler that understand both.

Quoted 4 lines

Well not entirely so, gcc can support ilp32 as a mutlilib variant for aarch64 so this patch is fine although if we should support ilp32 as a variant is another question, which folks can chime in and provide feedback if they have use of it. but nevertheless this patch should be ok

I've seen no real world need for ilp32 at this point.. but I have seen many requests to run armv7 code on an aarch64 system. (Compatibility multilib.)

--Mark

Quoted 11 lines
Quoted 10 lines

So in this case, it might be better to have an exception to the warning message... (unless I'm wrong, in which case this IS likely a correct fix....)

Hopefully Khem and/or Richard will be able to comment as they are more familiar with this code path.

Quoted 3 lines
meta/recipes-devtools/gcc/gcc-multilib-config.inc +0 -0
    libdir32 = 'SYSTEMLIBS_DIR'