This arranges to build a powerpc64le-linux compiler without -m32
support by default.  Bootstrapped and regression tested on Ubuntu
powerpc64le-linux without --disable-multilib, and on powerpc64-linux
and powerpc-linux.  OK for mainline and branches?

This part of the config.gcc patch does most of the work
-       case ${maybe_biarch}:${enable_targets}:${cpu_is_64bit} in
-           always:* | yes:*powerpc64* | yes:all:* | yes:*:yes)
+       case ${target}:${enable_targets}:${maybe_biarch} in
+           powerpc64-* | powerpc-*:*:yes | *:*powerpc64-*:yes | *:all:yes \
+           | powerpc64le*:*powerpcle* | powerpc64le*:*powerpc-* \
+           | powerpcle-*:*powerpc64le*:yes)

always:* becomes powerpc64-*, ie. exclude powerpc64le
yes:*powerpc64* becomes *:*powerpc64-*:yes, excluding powerpc64le so
that --target=powerpc64le-linux --enable-targets=powerpc64le-linux
doesn't accidentally get you a biarch compiler.
yes:all:* becomes *:all:yes, more or less unchanged.
yes:*:yes becomes powerpc-*:*:yes allowing --target=powerpc-linux
--with-cpu=<supports 64-bit> to continue to build a biarch ppc64
compiler.

Some other notes:
t-fprules setting of MULTILIB variables is in every case overridden by
a following t-file, except for the commented out powerpc-*-openbsd*.
Since the aim of this patch is to build powerpc64le without multilibs,
the default setting of these vars needs to go.  t-ppcos needs to be
removed from powerpc64le configurations for the same reason.  Oh, and
adding t-fprules and t-ppcos before previous additions to tmake_file
is no longer necessary.  I checked all the other t-files that might be
added for interactions.

The linux64.h change is so that passing -m32 results in
        error: -m32 not supported in the configuration
rather than the confusing
        error: -m64 requires a PowerPC64 cpu
(Yes, I know using TARGET_64BIT_P would be nicer, but it's probably
better left to a cleanup patch.)

        PR target/65286
        * config.gcc (powerpc*-*-linux*): Arrange for powerpc64le-linux
        to be single-arch by default.  Set cpu_is_64bit for powerpc64
        given --with-cpu=native.
        * config/rs6000/t-fprules: Do not set default MULTILIB vars.
        * config/rs6000/t-linux (MULTIARCH_DIRNAME): Support powerpc64
        and powerpc64le.
        * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Test
        rs6000_isa_flags rather than TARGET_64BIT.

Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc      (revision 221164)
+++ gcc/config.gcc      (working copy)
@@ -2337,28 +2337,32 @@
 powerpc*-*-linux*)
        tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h 
rs6000/sysv4.h"
        extra_options="${extra_options} rs6000/sysv4.opt"
-       tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} 
rs6000/t-ppccomm"
+       tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppccomm"
        extra_objs="$extra_objs rs6000-linux.o"
        case ${target} in
            powerpc*le-*-*)
                tm_file="${tm_file} rs6000/sysv4le.h" ;;
        esac
-       maybe_biarch=yes
+       case ${target}:${with_cpu} in
+           powerpc64*: | powerpc64*:native) cpu_is_64bit=yes ;;
+       esac
+       maybe_biarch=${cpu_is_64bit}
+       case ${enable_targets} in
+           *powerpc64*) maybe_biarch=yes ;;
+       esac
        case ${target} in
            powerpc64*-*-linux*spe* | powerpc64*-*-linux*paired*)
-               echo "*** Configuration ${target} not supported" 1>&2
+               echo "*** Configuration ${target} not supported" 1>&2
                exit 1
                ;;
            powerpc*-*-linux*spe* | powerpc*-*-linux*paired*)
                maybe_biarch=
                ;;
-           powerpc64*-*-linux*)
-               test x$with_cpu != x || cpu_is_64bit=yes
-               maybe_biarch=always
-               ;;
        esac
-       case ${maybe_biarch}:${enable_targets}:${cpu_is_64bit} in
-           always:* | yes:*powerpc64* | yes:all:* | yes:*:yes)
+       case ${target}:${enable_targets}:${maybe_biarch} in
+           powerpc64-* | powerpc-*:*:yes | *:*powerpc64-*:yes | *:all:yes \
+           | powerpc64le*:*powerpcle* | powerpc64le*:*powerpc-* \
+           | powerpcle-*:*powerpc64le*:yes)
                if test x$cpu_is_64bit = xyes; then
                    tm_file="${tm_file} rs6000/default64.h"
                fi
@@ -2379,9 +2383,14 @@
                esac
                extra_options="${extra_options} rs6000/linux64.opt"
                ;;
+           powerpc64*)
+               tm_file="${tm_file} rs6000/default64.h rs6000/linux64.h 
glibc-stdint.h"
+               extra_options="${extra_options} rs6000/linux64.opt"
+               tmake_file="${tmake_file} rs6000/t-linux"
+               ;;
            *)
                tm_file="${tm_file} rs6000/linux.h glibc-stdint.h"
-               tmake_file="$tmake_file rs6000/t-linux"
+               tmake_file="${tmake_file} rs6000/t-ppcos rs6000/t-linux"
                ;;
        esac
        case ${target} in
Index: gcc/config/rs6000/t-fprules
===================================================================
--- gcc/config/rs6000/t-fprules (revision 221164)
+++ gcc/config/rs6000/t-fprules (working copy)
@@ -18,9 +18,3 @@
 
 SOFT_FLOAT_CPUS = e300c2 401 403 405 440 464 476 ec603e 801 821 823 860
 MULTILIB_MATCHES_FLOAT = $(foreach cpu, $(SOFT_FLOAT_CPUS), 
msoft-float=mcpu?$(cpu))
-
-# Build the libraries for both hard and soft floating point by default
-
-MULTILIB_OPTIONS = msoft-float
-MULTILIB_DIRNAMES = soft-float
-MULTILIB_MATCHES       = ${MULTILIB_MATCHES_FLOAT}
Index: gcc/config/rs6000/t-linux
===================================================================
--- gcc/config/rs6000/t-linux   (revision 221164)
+++ gcc/config/rs6000/t-linux   (working copy)
@@ -1,12 +1,19 @@
 # do not define the multiarch name if configured for a soft-float cpu
 # or soft-float.
 ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring 
soft,$(with_float)))
+ifneq (,$(findstring powerpc64,$(target)))
+MULTIARCH_DIRNAME := powerpc64-linux-gnu
+else
 ifneq (,$(findstring spe,$(target)))
-MULTIARCH_DIRNAME = powerpc-linux-gnuspe$(if $(findstring 
8548,$(with_cpu)),,v1)
+MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 
8548,$(with_cpu)),,v1)
 else
-MULTIARCH_DIRNAME = powerpc-linux-gnu
+MULTIARCH_DIRNAME := powerpc-linux-gnu
 endif
 endif
+ifneq (,$(findstring powerpcle,$(target))$(findstring powerpc64le,$(target)))
+MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME))
+endif
+endif
 
 rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c
        $(COMPILE) $<
Index: gcc/config/rs6000/linux64.h
===================================================================
--- gcc/config/rs6000/linux64.h (revision 221164)
+++ gcc/config/rs6000/linux64.h (working copy)
@@ -97,7 +97,7 @@
     {                                                          \
       if (!global_options_set.x_rs6000_alignment_flags)                \
        rs6000_alignment_flags = MASK_ALIGN_NATURAL;            \
-      if (TARGET_64BIT)                                                \
+      if (rs6000_isa_flags & OPTION_MASK_64BIT)                        \
        {                                                       \
          if (DEFAULT_ABI != ABI_AIX)                           \
            {                                                   \

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to