This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Disable building with i386-*, -march=i386 or -mcpu=i386.
- From: "Carlos O'Donell" <carlos at redhat dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: Allan McRae <allan at archlinux dot org>, "Joseph S. Myers" <joseph at codesourcery dot com>, GNU C Library <libc-alpha at sourceware dot org>, Andreas Jaeger <aj at suse dot com>, Thomas Schwinge <thomas at codesourcery dot com>
- Date: Wed, 17 Apr 2013 17:16:14 -0700
- Subject: Re: [PATCH] Disable building with i386-*, -march=i386 or -mcpu=i386.
- References: <513FE49D dot 3050406 at redhat dot com> <Pine dot LNX dot 4 dot 64 dot 1303131610540 dot 19781 at digraph dot polyomino dot org dot uk> <51526E77 dot 4040801 at redhat dot com> <Pine dot LNX dot 4 dot 64 dot 1303271431550 dot 23096 at digraph dot polyomino dot org dot uk> <5154668A dot 6000700 at redhat dot com> <5160465E dot 8060400 at redhat dot com> <20130408210918 dot D97632C074 at topped-with-meat dot com> <51634DE2 dot 1060109 at redhat dot com> <20130408231128 dot DA09C2C0A2 at topped-with-meat dot com> <5163516D dot 1060705 at archlinux dot org> <516805F1 dot 2090504 at redhat dot com> <516D9093 dot 1070705 at redhat dot com> <20130416204733 dot E8EA32C07E at topped-with-meat dot com> <516EE131 dot 1090808 at redhat dot com>
On 04/17/2013 10:51 AM, Carlos O'Donell wrote:
> On 04/16/2013 01:47 PM, Roland McGrath wrote:
>>> * sysdeps/i386/preconfigure.in: New file.
>>> * sysdeps/i386/preconfigure: Regenerate.
>>
>> "New generated file." (You can't regenerate what's never been generated.)
>
> Fixed.
>
>> But you don't need a preconfigure if it's just going to be an error. The
>> only time you need a preconfigure is when it's going to do something that
>> actually influences sysdeps selection.
>
> My reason was to error out as early as possible. Is that not a good reason?
>
>>> diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in
>>> index 56a7c1f..ee55efd 100644
>>> --- a/sysdeps/i386/configure.in
>>> +++ b/sysdeps/i386/configure.in
>>> @@ -18,7 +18,8 @@ LIBC_COMPILER_BUILTIN_INLINED(
>>> [libc_cv_unsupported_i386=no],
>>> [AC_MSG_ERROR([
>>> *** Building with -march=i386/-mcpu=i386 is not supported.
>>> -*** Please use host i786, i686, i586, or i486.])])
>>> +*** Please use host i786, i686, i586, or i486.
>>> +*** For example: export CFLAGS="-O2 -march=i386"])])
>>
>> Never suggest setting variables in the environment!
>> (Also, you're suggesting exactly what's prohibited.)
>> Better would be:
>
> Why?
>
> I see nothing in our FAQ about this.
>
> After you explain my folly I'll update the FAQ.
>
>> *** For example, pass CFLAGS='-O2 -march=i686' to configure.
>
> Not specific enough.
>
> What do you prefer?
>
> CFLAGS='-O2 -march=i686' ./configure ...
>
> or
>
> ./configure ... CFLAGS='-O2 -march=i686'
>
>>> +# Configure for i686 if the user asks for i386. We don't support
>>> +# i386 any more but it continues to be common for users to configure
>>> +# 32-bit x86 as i386. We build for i686 instead.
>>
>> The comment no longer matches the code.
>
> Fixed.
Checked in this version.
v3
- Move preconfigure fragment to sysdep/i386/configure
- Fixed ChangeLog
- Add examples to all the errors.
- Removed i386 from configure case.
2013-04-17 Carlos O'Donell <carlos@redhat.com>
* configure.in: Remove i386 configure warning. Remove i386 case.
* configure: Regenerate.
* sysdeps/i386/configure.in: Raise error if config_machine is i386.
Add example to error message.
* sysdeps/i386/configure: Regenerate.
diff --git a/configure b/configure
index 0b50df9..8c538f5 100755
--- a/configure
+++ b/configure
@@ -3741,15 +3741,6 @@ case "$machine-$host_os" in
;;
esac
-# Configure for i686 if the user asks for i386. We don't support
-# i386 any more but it continues to be common for users to configure
-# 32-bit x86 as i386. We build for i686 instead.
-if test "$machine" = i386; then
- machine="i686"
- echo "\
-*** WARNING: Support for i386 is deprecated. Building for i686 instead."
-fi
-
submachine=
# Check whether --with-cpu was given.
@@ -3945,7 +3936,7 @@ fi
# type and particular chip. If an add-on configure fragment already set
# base_machine, we don't change it.
test -n "$base_machine" || case "$machine" in
-i[34567]86) base_machine=i386 machine=i386/$machine ;;
+i[4567]86) base_machine=i386 machine=i386/$machine ;;
powerpc) base_machine=powerpc machine=powerpc/powerpc32 ;;
powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;;
s390) base_machine=s390 machine=s390/s390-32 ;;
diff --git a/configure.in b/configure.in
index d93ca5c..bd90bac 100644
--- a/configure.in
+++ b/configure.in
@@ -390,15 +390,6 @@ case "$machine-$host_os" in
;;
esac
-# Configure for i686 if the user asks for i386. We don't support
-# i386 any more but it continues to be common for users to configure
-# 32-bit x86 as i386. We build for i686 instead.
-if test "$machine" = i386; then
- machine="i686"
- echo "\
-*** WARNING: Support for i386 is deprecated. Building for i686 instead."
-fi
-
submachine=
AC_ARG_WITH([cpu],
AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
@@ -576,7 +567,7 @@ changequote(,)dnl
# type and particular chip. If an add-on configure fragment already set
# base_machine, we don't change it.
test -n "$base_machine" || case "$machine" in
-i[34567]86) base_machine=i386 machine=i386/$machine ;;
+i[4567]86) base_machine=i386 machine=i386/$machine ;;
powerpc) base_machine=powerpc machine=powerpc/powerpc32 ;;
powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;;
s390) base_machine=s390 machine=s390/s390-32 ;;
diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure
index a1a0fe7..53b6a61 100644
--- a/sysdeps/i386/configure
+++ b/sysdeps/i386/configure
@@ -32,6 +32,15 @@ $as_echo "$ac_res" >&6; }
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/i386.
+# We no longer support i386 since it lacks the atomic instructions
+# required to implement NPTL threading.
+if test "$config_machine" = i386; then
+ as_fn_error $? "
+*** ERROR: Support for i386 is deprecated.
+*** Please use host i786, i686, i585 or i486.
+*** For example: /src/glibc/configure --host=i686-pc-linux-gnu ...\"" "$LINENO" 5
+fi
+
# The GNU C Library can't be built for i386. There are several reasons for
# this restriction. The primary reason is that i386 lacks the atomic
# operations required to support the current NPTL implementation. While it is
@@ -66,7 +75,8 @@ if test $libc_compiler_builtin_inlined = yes; then
else
as_fn_error $? "
*** Building with -march=i386/-mcpu=i386 is not supported.
-*** Please use host i786, i686, i586, or i486." "$LINENO" 5
+*** Please use host i786, i686, i586, or i486.
+*** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ..." "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_compiler_builtin_inlined" >&5
$as_echo "$libc_compiler_builtin_inlined" >&6; }
diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in
index 56a7c1f..96ab7b0 100644
--- a/sysdeps/i386/configure.in
+++ b/sysdeps/i386/configure.in
@@ -1,6 +1,15 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/i386.
+# We no longer support i386 since it lacks the atomic instructions
+# required to implement NPTL threading.
+if test "$config_machine" = i386; then
+ AC_MSG_ERROR([
+*** ERROR: Support for i386 is deprecated.
+*** Please use host i786, i686, i585 or i486.
+*** For example: /src/glibc/configure --host=i686-pc-linux-gnu ..."])
+fi
+
# The GNU C Library can't be built for i386. There are several reasons for
# this restriction. The primary reason is that i386 lacks the atomic
# operations required to support the current NPTL implementation. While it is
@@ -18,7 +27,8 @@ LIBC_COMPILER_BUILTIN_INLINED(
[libc_cv_unsupported_i386=no],
[AC_MSG_ERROR([
*** Building with -march=i386/-mcpu=i386 is not supported.
-*** Please use host i786, i686, i586, or i486.])])
+*** Please use host i786, i686, i586, or i486.
+*** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ...])])
AC_CHECK_HEADER([cpuid.h], ,
[AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
---
Cheers,
Carlos.