[10/23,AARCH64] Detect ILP32 in configure scripts.
Commit Message
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
<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.
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?
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.
old mode 100644
new mode 100755
@@ -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}"
@@ -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}])
@@ -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
old mode 100644
new mode 100755
@@ -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
+
@@ -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])