[10/23,AARCH64] Detect ILP32 in configure scripts.

Message ID 1467131978-669-11-git-send-email-ynorov@caviumnetworks.com
State New, archived
Headers

Commit Message

Yury Norov June 28, 2016, 4:39 p.m. UTC
  From: Andrew Pinski <apinski@cavium.com>

This adds detecting of ILP32 to the configure scripts.
Adding to preconfigure detection of ilp32 in preconfigure and then writing out the default-abi in configure.

* sysdeps/aarch64/preconfigure: Detect ILP32 and set aarch64_config_abi
to ilp32 for ilp32 and lp64 for lp64.  Set machine to either
aarch64/ilp32 or aarch64/lp64 depending on the ABI that is selected.
* sysdeps/aarch64/configure.ac: Define HAVE_AARCH64_ILP32 if this is ILP32.
Set the default-abi to either ilp32, lp64, ilp32_be or lp64_be depending
on the ABI.
* sysdeps/aarch64/configure: Regenerate.
* sysdeps/unix/sysv/linux/aarch64/configure.ac: Set arch_minimum_kernel
to 3.19.0 for ILP32.
Set LIBC_SLIBDIR_RTLDDIR to libilp32/lib for ilp32.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerate.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 sysdeps/aarch64/configure                    | 15 +++++++++++----
 sysdeps/aarch64/configure.ac                 | 11 +++++++++--
 sysdeps/aarch64/preconfigure                 | 11 ++++++++++-
 sysdeps/unix/sysv/linux/aarch64/configure    | 22 +++++++++++++++++++---
 sysdeps/unix/sysv/linux/aarch64/configure.ac |  9 +++++++--
 5 files changed, 56 insertions(+), 12 deletions(-)
 mode change 100644 => 100755 sysdeps/aarch64/configure
 mode change 100644 => 100755 sysdeps/unix/sysv/linux/aarch64/configure
  

Comments

Joseph Myers June 28, 2016, 5:07 p.m. UTC | #1
<https://sourceware.org/ml/libc-alpha/2016-06/msg00785.html> and 
<https://sourceware.org/ml/libc-alpha/2014-10/msg00639.html> still apply.  
Please make the changes requested there before any reposting of the patch 
series.
  
Yury Norov June 28, 2016, 5:26 p.m. UTC | #2
On Tue, Jun 28, 2016 at 05:07:49PM +0000, Joseph Myers wrote:
> <https://sourceware.org/ml/libc-alpha/2016-06/msg00785.html> and 
> <https://sourceware.org/ml/libc-alpha/2014-10/msg00639.html> still apply.  
> Please make the changes requested there before any reposting of the patch 
> series.

Yes, I forgot about glibc version. I don't want to add changelogs
because I think patches order should/may be changed, and as all that
changelogs touch single file, there will be nightmare to rebase
series.

>> diff --git a/sysdeps/aarch64/preconfigure
>> b/sysdeps/aarch64/preconfigure
>> index d9bd1f8..4bcd8e3 100644
>> --- a/sysdeps/aarch64/preconfigure
>> +++ b/sysdeps/aarch64/preconfigure
>> @@ -1,6 +1,15 @@
>>  case "$machine" in
>>  aarch64*)
>>       base_machine=aarch64
>> -     machine=aarch64
>> +     case "$CC $CFLAGS $CPPFLAGS " in
>> +             *" -mabi=ilp32 "*) aarch64_config_abi=ilp32 ;;
>> +             *" -mabi=lp64 "*) aarch64_config_abi=lp64 ;;
>> +             *) aarch64_config_abi=default ;;
>> +     esac
>> +     case $aarch64_config_abi in
>> +             default) machine=aarch64/lp64 aarch64_config_abi=lp64
>> ;;
> 
> It would seem better to test how the compiler behaves (what it 
> predefines), as now done for MIPS, so that this works with a compiler 
> configured --with-abi=ilp32 without needing to add an explicit ABI
> option 
> to CC or CFLAGS.

I didn't understand what you mean here and forgot to ask.
I didn't work much on glibc, and not familiar to it's build
system. Could you explain it little more detailed please?
  
Joseph Myers June 28, 2016, 5:35 p.m. UTC | #3
On Tue, 28 Jun 2016, Yury Norov wrote:

> On Tue, Jun 28, 2016 at 05:07:49PM +0000, Joseph Myers wrote:
> > <https://sourceware.org/ml/libc-alpha/2016-06/msg00785.html> and 
> > <https://sourceware.org/ml/libc-alpha/2014-10/msg00639.html> still apply.  
> > Please make the changes requested there before any reposting of the patch 
> > series.
> 
> Yes, I forgot about glibc version. I don't want to add changelogs
> because I think patches order should/may be changed, and as all that
> changelogs touch single file, there will be nightmare to rebase
> series.

The convention is that you include the ChangeLog entry as part of the 
patch description, rather than changing the ChangeLog file, to avoid this 
issue.  But with the formatting exactly matching what would go in the 
ChangeLog file, so that for the final commit you just need to update the 
date in it and then prepend to the ChangeLog file.

> >> diff --git a/sysdeps/aarch64/preconfigure
> >> b/sysdeps/aarch64/preconfigure
> >> index d9bd1f8..4bcd8e3 100644
> >> --- a/sysdeps/aarch64/preconfigure
> >> +++ b/sysdeps/aarch64/preconfigure
> >> @@ -1,6 +1,15 @@
> >>  case "$machine" in
> >>  aarch64*)
> >>       base_machine=aarch64
> >> -     machine=aarch64
> >> +     case "$CC $CFLAGS $CPPFLAGS " in
> >> +             *" -mabi=ilp32 "*) aarch64_config_abi=ilp32 ;;
> >> +             *" -mabi=lp64 "*) aarch64_config_abi=lp64 ;;
> >> +             *) aarch64_config_abi=default ;;
> >> +     esac
> >> +     case $aarch64_config_abi in
> >> +             default) machine=aarch64/lp64 aarch64_config_abi=lp64
> >> ;;
> > 
> > It would seem better to test how the compiler behaves (what it 
> > predefines), as now done for MIPS, so that this works with a compiler 
> > configured --with-abi=ilp32 without needing to add an explicit ABI
> > option 
> > to CC or CFLAGS.
> 
> I didn't understand what you mean here and forgot to ask.
> I didn't work much on glibc, and not familiar to it's build
> system. Could you explain it little more detailed please?

See sysdeps/mips/preconfigure.  It runs $CC $CFLAGS $CPPFLAGS -E -dM -xc 
/dev/null and extracts predefined macros that relate to the ABI from the 
output.  This avoids needing to hardcode anything about what the default 
ABI might be for a compiler if neither -mabi= option is passed.
  

Patch

diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
old mode 100644
new mode 100755
index 5bd355a..7dd56e8
--- a/sysdeps/aarch64/configure
+++ b/sysdeps/aarch64/configure
@@ -163,12 +163,19 @@  rm -f conftest*
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5
 $as_echo "$libc_cv_aarch64_be" >&6; }
+
+if test $aarch64_config_abi = ilp32; then
+  $as_echo "#define HAVE_AARCH64_ILP32 1" >>confdefs.h
+
+fi
+
 if test $libc_cv_aarch64_be = yes; then
   $as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h
 
-  config_vars="$config_vars
-default-abi = lp64_be"
+  libc_aarch64_be=_be
 else
-  config_vars="$config_vars
-default-abi = lp64"
+  libc_aarch64_be=
 fi
+
+config_vars="$config_vars
+default-abi = ${aarch64_config_abi}${libc_aarch64_be}"
diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
index 7851dd4..9069325 100644
--- a/sysdeps/aarch64/configure.ac
+++ b/sysdeps/aarch64/configure.ac
@@ -14,9 +14,16 @@  AC_CACHE_CHECK([for big endian],
                       yes
                      #endif
   ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)])
+
+if test $aarch64_config_abi = ilp32; then
+  AC_DEFINE(HAVE_AARCH64_ILP32)
+fi
+
 if test $libc_cv_aarch64_be = yes; then
   AC_DEFINE(HAVE_AARCH64_BE)
-  LIBC_CONFIG_VAR([default-abi], [lp64_be])
+  libc_aarch64_be=_be
 else
-  LIBC_CONFIG_VAR([default-abi], [lp64])
+  libc_aarch64_be=
 fi
+
+LIBC_CONFIG_VAR([default-abi], [${aarch64_config_abi}${libc_aarch64_be}])
diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure
index d9bd1f8..4bcd8e3 100644
--- a/sysdeps/aarch64/preconfigure
+++ b/sysdeps/aarch64/preconfigure
@@ -1,6 +1,15 @@ 
 case "$machine" in
 aarch64*)
 	base_machine=aarch64
-	machine=aarch64
+	case "$CC $CFLAGS $CPPFLAGS " in
+		*" -mabi=ilp32 "*) aarch64_config_abi=ilp32 ;;
+		*" -mabi=lp64 "*) aarch64_config_abi=lp64 ;;
+		*) aarch64_config_abi=default ;;
+	esac
+	case $aarch64_config_abi in
+		default) machine=aarch64/lp64 aarch64_config_abi=lp64 ;;
+		ilp32) machine=aarch64/ilp32 ;;
+		lp64) machine=aarch64/lp64 ;;
+	esac
 	;;
 esac
diff --git a/sysdeps/unix/sysv/linux/aarch64/configure b/sysdeps/unix/sysv/linux/aarch64/configure
old mode 100644
new mode 100755
index f48472c..c6fca86
--- a/sysdeps/unix/sysv/linux/aarch64/configure
+++ b/sysdeps/unix/sysv/linux/aarch64/configure
@@ -1,9 +1,23 @@ 
 # This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
  # Local configure fragment for sysdeps/unix/sysv/linux/aarch64.
 
-arch_minimum_kernel=3.7.0
-
-test -n "$libc_cv_slibdir" ||
+if test $aarch64_config_abi = ilp32; then
+  arch_minimum_kernel=3.19.0
+  test -n "$libc_cv_slibdir" ||
+case "$prefix" in
+/usr | /usr/)
+  libc_cv_slibdir=/libilp32
+  libc_cv_rtlddir=/lib
+  if test "$libdir" = '${exec_prefix}/lib'; then
+    libdir='${exec_prefix}/libilp32';
+    # Locale data can be shared between 32-bit and 64-bit libraries.
+    libc_cv_complocaledir='${exec_prefix}/lib/locale'
+  fi
+  ;;
+esac
+else
+  arch_minimum_kernel=3.7.0
+  test -n "$libc_cv_slibdir" ||
 case "$prefix" in
 /usr | /usr/)
   libc_cv_slibdir=/lib64
@@ -15,3 +29,5 @@  case "$prefix" in
   fi
   ;;
 esac
+fi
+
diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac
index 211fa9c..b37a7eb 100644
--- a/sysdeps/unix/sysv/linux/aarch64/configure.ac
+++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac
@@ -1,6 +1,11 @@ 
 GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 # Local configure fragment for sysdeps/unix/sysv/linux/aarch64.
 
-arch_minimum_kernel=3.7.0
+if test $aarch64_config_abi = ilp32; then
+  arch_minimum_kernel=10.0.0
+  LIBC_SLIBDIR_RTLDDIR([libilp32], [lib])
+else
+  arch_minimum_kernel=3.7.0
+  LIBC_SLIBDIR_RTLDDIR([lib64], [lib])
+fi
 
-LIBC_SLIBDIR_RTLDDIR([lib64], [lib])