Skip to contentSkip to conversation

insane.bbclass and friends: support n32

PATCH Applied Peter Seebach 2 participants 3 messages Oct 23, 2012 – Oct 28, 2012

lore
Share & tools
lore
#0 lore raw

v2 cover insane.bbclass and friends: support n32

This makes multilib_header, insane, and site config work for n32 MIPS.

It turns out the previous patch only worked for part of the system; when I got to glib, the mips-linux siteconfig wasn't getting picked up for n32. So add a couple more references in siteinfo.bbclass to make that work.

The following changes since commit 754ddbf1c57e6b9d0650498538840effebe4f7a2:
Ross Burton (1):
libical: remove

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib seebs/mips64
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=seebs/mips64

Peter Seebach (1):
insane.bbclass and friends: Fix sanity checks and multlib headers for

    n32
 meta/classes/insane.bbclass                  |    4 +++
 meta/classes/multilib_header.bbclass         |   32 +++++++++++++++++--------
 meta/classes/siteinfo.bbclass                |    5 ++++
 meta/conf/machine/include/mips/arch-mips.inc |    1 +
 4 files changed, 32 insertions(+), 10 deletions(-)
#1 lore raw

PATCH v2 1/1 insane.bbclass and friends: Fix sanity checks and multlib headers for n32

The n32 architecture is odd, in that it's a mips64 ABI which happens to be 32-bit. To handle this, we need something in the environment which can be used to distinguish it. The obvious place to stash this is the ABI suffix, so we use "n32" as an ABI suffix. This allows a couple of improved checks:

1. In insane.bbclass, we can use "linux-gnun32" to discern that it's okay for a mips64 binary to be a 32-bit binary in some cases.
2. In multilib_header, we can check for the n32 ABI, and use a distinct value.
3. In siteinfo, add linux-gnun32 as a synonym for linux, similar to what's done for linux-gnux32, and tell the mips*-linux-gnun32 variants to pick up the corresponding mips-linux site configs.

Note that the multilib header wrapper already has n32 hooks in it, there was just nothing creating -n32 header variants.

---
 meta/classes/insane.bbclass                  |    4 +++
 meta/classes/multilib_header.bbclass         |   32 +++++++++++++++++--------
 meta/classes/siteinfo.bbclass                |    5 ++++
 meta/conf/machine/include/mips/arch-mips.inc |    1 +
 4 files changed, 32 insertions(+), 10 deletions(-)
meta/classes/insane.bbclass +4 -0
index 29b122e..2dc9ba3 100644
@@ -105,6 +105,10 @@ def package_qa_get_machine_dict():
             "linux-gnux32" :       {
                         "x86_64":     (62,     0,    0,          True,          32),
                       },
+            "linux-gnun32" :       {
+                        "mips64":       ( 8,     0,    0,          False,         32),
+                        "mipsel64":     ( 8,     0,    0,          True,          32),
+                      },
         }
 
 
meta/classes/multilib_header.bbclass +22 -10
index 867bce4..639ed4b 100644
@@ -1,16 +1,29 @@
 inherit siteinfo
 
-# If applicable on the architecture, this routine will rename the header and add
-# a unique identifier to the name for the ABI/bitsize that is being used.  A wrapper will
-# be generated for the architecture that knows how to call all of the ABI variants for that
-# given architecture.
-#
-# TODO: mips64 n32 is not yet recognized in this code
-# when that is identified the name of the wrapped item should be "n32" and appropriately
-# determined int he if coding...
+# If applicable on the architecture, this routine will rename the header and
+# add a unique identifier to the name for the ABI/bitsize that is being used.
+# A wrapper will be generated for the architecture that knows how to call
+# all of the ABI variants for that given architecture.
 #
 oe_multilib_header() {
-	# Do nothing on ARM, only one ABI is supported at once
+        # We use
+        # For ARM: We don't support multilib builds.
+        # For MIPS: "n32" is a special case, which needs to be
+        # distinct from both 64-bit and 32-bit.
+        case ${TARGET_ARCH} in
+        arm*)   return
+                ;;
+        mips*)  case "${MIPSPKGSFX_ABI}" in
+                "-n32")
+                       ident=n32   
+                       ;;
+                *)     
+                       ident=${SITEINFO_BITS}
+                       ;;
+                esac
+                ;;
+        *)      ident=${SITEINFO_BITS}
+        esac
 	if echo ${TARGET_ARCH} | grep -q arm; then
 	    return
 	fi
@@ -20,7 +33,6 @@ oe_multilib_header() {
 	      continue
 	   fi
 	   stem=$(echo $each_header | sed 's#\.h$##')
-	   ident=${SITEINFO_BITS}
 	   # if mips64/n32 set ident to n32
 	   mv ${D}/${includedir}/$each_header ${D}/${includedir}/${stem}-${ident}.h
 
meta/classes/siteinfo.bbclass +5 -0
index aab0867..e09d16a 100644
@@ -51,6 +51,7 @@ def siteinfo_data(d):
         "linux": "common-linux common-glibc",
         "linux-gnu": "common-linux common-glibc",
         "linux-gnux32": "common-linux common-glibc",
+        "linux-gnun32": "common-linux common-glibc",
         "linux-gnueabi": "common-linux common-glibc",
         "linux-gnuspe": "common-linux common-glibc",
         "linux-uclibc": "common-linux common-uclibc",
@@ -66,6 +67,10 @@ def siteinfo_data(d):
         "arm-linux-uclibceabi": "arm-linux-uclibc",
         "armeb-linux-gnueabi": "armeb-linux",
         "armeb-linux-uclibceabi": "armeb-linux-uclibc",
+        "mips-linux-gnun32": "mips-linux",
+        "mipsel-linux-gnun32": "mipsel-linux",
+        "mips64-linux-gnun32": "mips-linux",
+        "mips64el-linux-gnun32": "mipsel-linux",
         "powerpc-linux": "powerpc32-linux",
         "powerpc-linux-uclibc": "powerpc-linux powerpc32-linux",
         "powerpc-linux-gnuspe": "powerpc-linux powerpc32-linux",
meta/conf/machine/include/mips/arch-mips.inc +1 -0
index 9f12920..c390ff9 100644
@@ -17,6 +17,7 @@ TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "o32", "-mabi=32", "", d)}
 
 TUNEVALID[n32] = "MIPS64 n32 ABI"
 TUNECONFLICTS[n32] = "o32 n64"
+ABIEXTENSION .= "${@bb.utils.contains("TUNE_FEATURES", "n32", "n32", "" ,d)}"
 TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "n32", "-mabi=n32", "", d)}"
 
 TUNEVALID[n64] = "MIPS64 n64 ABI"
Signature · 1 line
1.7.0.4
Applied
#2 lore raw
In reply to Peter Seebach
Quoted 17 lines · Peter Seebach

This makes multilib_header, insane, and site config work for n32 MIPS.

It turns out the previous patch only worked for part of the system; when I got to glib, the mips-linux siteconfig wasn't getting picked up for n32. So add a couple more references in siteinfo.bbclass to make that work.

The following changes since commit 754ddbf1c57e6b9d0650498538840effebe4f7a2:
Ross Burton (1):
libical: remove

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib seebs/mips64
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=seebs/mips64

Peter Seebach (1):
insane.bbclass and friends: Fix sanity checks and multlib headers for

Quoted 9 lines
     n32
  meta/classes/insane.bbclass                  |    4 +++
  meta/classes/multilib_header.bbclass         |   32 +++++++++++++++++--------
  meta/classes/siteinfo.bbclass                |    5 ++++
  meta/conf/machine/include/mips/arch-mips.inc |    1 +
  4 files changed, 32 insertions(+), 10 deletions(-)

Merged into OE-Core

Thanks
Sau!

Quoted 6 lines

_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core