mklib: clean up abi flags for x86 targets
authorMike Frysinger <vapier@gentoo.org>
Tue, 11 Sep 2012 05:57:25 +0000 (01:57 -0400)
committerMatt Turner <mattst88@gmail.com>
Fri, 14 Sep 2012 22:27:16 +0000 (15:27 -0700)
The current code is duplicated in two places and relies on `uname` to
detect the flags.  This is no good for cross-compiling, and the current
logic uses -m64 for the x32 ABI which breaks things.

Unify the code in one place, avoid `uname` completely, and add support
for the new x32 ABI.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
bin/mklib

index 9bac29ea85924af510bbbe2a53cd3ef207a3e4bc..086b2689885a5c031c51ec54939db8f00befa978 100755 (executable)
--- a/bin/mklib
+++ b/bin/mklib
@@ -319,6 +319,25 @@ case $ARCH in
             fi
        fi
 
+       # Check if objects are 32-bit and we're running in 64-bit
+       # environment.  If so, pass -m32 flag to linker.
+       add_abi_flag_to_opts() {
+           case $(file $1) in
+               *32-bit*x86-64*)
+                   # x86_64 x32 ABI.
+                   OPTS="-mx32 ${OPTS}"
+                   ;;
+               *64-bit*x86-64*)
+                   # x86_64 64-bit ABI.
+                   OPTS="-m64 ${OPTS}"
+                   ;;
+               *32-bit*Intel*)
+                   # x86 32-bit ABI.
+                   OPTS="-m32 ${OPTS}"
+                   ;;
+           esac
+       }
+
        if [ $NOPREFIX = 1 ] ; then
            # No "lib" or ".so" part
            echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}
@@ -330,15 +349,8 @@ case $ARCH in
            ;;
            esac
 
-           # Check if objects are 32-bit and we're running in 64-bit
-           # environment.  If so, pass -m32 flag to linker.
-           set ${OBJECTS}
-           ABI32=`file $1 | grep 32-bit`
-           ARM=`file $1 | grep ARM`
-           # Do not add "-m32" option for arm.
-            if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then
-               OPTS="-m32 ${OPTS}"
-           fi
+           # Check to see if we are building for a different ABI.
+           add_abi_flag_to_opts ${OBJECTS}
 
             if [ "${ALTOPTS}" ] ; then
                 OPTS=${ALTOPTS}
@@ -389,15 +401,9 @@ case $ARCH in
                # exptmp is removed below
            fi
 
-           # Check if objects are 32-bit and we're running in 64-bit
-           # environment.  If so, pass -m32 flag to linker.
-           set ${OBJECTS}
-           ABI32=`file $1 | grep 32-bit`
-            ARM=`file $1 | grep ARM`
-           # Do not add "-m32" option for arm.
-            if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then
-               OPTS="-m32 ${OPTS}"
-           fi
+           # Check to see if we are building for a different ABI.
+           add_abi_flag_to_opts ${OBJECTS}
+
             if [ "${ALTOPTS}" ] ; then
                 OPTS=${ALTOPTS}
             fi