config.gcc (powerpc*-*-linux*): Add support for little-endian multilibs to big-endian...
authorAlan Modra <amodra@gmail.com>
Mon, 2 Sep 2013 22:40:40 +0000 (08:10 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Mon, 2 Sep 2013 22:40:40 +0000 (08:10 +0930)
* config.gcc (powerpc*-*-linux*): Add support for little-endian
multilibs to big-endian target and vice versa.
* config/rs6000/t-linux64: Use := assignment on all vars.
(MULTILIB_EXTRA_OPTS): Remove fPIC.
(MULTILIB_OSDIRNAMES): Specify using mapping from multilib_options.
* config/rs6000/t-linux64le: New file.
* config/rs6000/t-linux64bele: New file.
* config/rs6000/t-linux64lebe: New file.

From-SVN: r202190

gcc/ChangeLog
gcc/config.gcc
gcc/config/rs6000/t-linux64
gcc/config/rs6000/t-linux64bele [new file with mode: 0644]
gcc/config/rs6000/t-linux64le [new file with mode: 0644]
gcc/config/rs6000/t-linux64lebe [new file with mode: 0644]

index 28adac1..173fda9 100644 (file)
@@ -1,3 +1,14 @@
+2013-09-03  Alan Modra  <amodra@gmail.com>
+
+       * config.gcc (powerpc*-*-linux*): Add support for little-endian
+       multilibs to big-endian target and vice versa.
+       * config/rs6000/t-linux64: Use := assignment on all vars.
+       (MULTILIB_EXTRA_OPTS): Remove fPIC.
+       (MULTILIB_OSDIRNAMES): Specify using mapping from multilib_options.
+       * config/rs6000/t-linux64le: New file.
+       * config/rs6000/t-linux64bele: New file.
+       * config/rs6000/t-linux64lebe: New file.
+
 2013-09-02  Jan Hubicka  <jh@suse.cz>
 
        * ipa-inline-transform.c (inline_transform): Do not
index 7e1d529..eeab290 100644 (file)
@@ -2139,7 +2139,7 @@ powerpc*-*-linux*)
        tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
        case ${target} in
            powerpc*le-*-*)
-           tm_file="${tm_file} rs6000/sysv4le.h" ;;
+               tm_file="${tm_file} rs6000/sysv4le.h" ;;
        esac
        maybe_biarch=yes
        case ${target} in
@@ -2162,6 +2162,19 @@ powerpc*-*-linux*)
                fi
                tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h glibc-stdint.h"
                tmake_file="$tmake_file rs6000/t-linux64"
+               case ${target} in
+                   powerpc*le-*-*)
+                       tmake_file="$tmake_file rs6000/t-linux64le"
+                       case ${enable_targets} in
+                           all | *powerpc64-* | *powerpc-*)
+                               tmake_file="$tmake_file rs6000/t-linux64lebe" ;;
+                       esac ;;
+                   *)
+                       case ${enable_targets} in
+                           all | *powerpc64le-* | *powerpcle-*)
+                               tmake_file="$tmake_file rs6000/t-linux64bele" ;;
+                       esac ;;
+               esac
                extra_options="${extra_options} rs6000/linux64.opt"
                ;;
            *)
index 9175de2..70e928d 100644 (file)
@@ -25,8 +25,8 @@
 # it doesn't tell anything about the 32bit libraries on those systems.  Set
 # MULTILIB_OSDIRNAMES according to what is found on the target.
 
-MULTILIB_OPTIONS        = m64/m32
-MULTILIB_DIRNAMES       = 64 32
-MULTILIB_EXTRA_OPTS     = fPIC
-MULTILIB_OSDIRNAMES    = ../lib64$(call if_multiarch,:powerpc64-linux-gnu)
-MULTILIB_OSDIRNAMES    += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
+MULTILIB_OPTIONS    := m64/m32
+MULTILIB_DIRNAMES   := 64 32
+MULTILIB_EXTRA_OPTS := 
+MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
+MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
diff --git a/gcc/config/rs6000/t-linux64bele b/gcc/config/rs6000/t-linux64bele
new file mode 100644 (file)
index 0000000..97c1ee6
--- /dev/null
@@ -0,0 +1,7 @@
+#rs6000/t-linux64end
+
+MULTILIB_OPTIONS    += mlittle
+MULTILIB_DIRNAMES   += le
+MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))))))
+MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES)))
+MULTILIB_MATCHES    := ${MULTILIB_MATCHES_ENDIAN}
diff --git a/gcc/config/rs6000/t-linux64le b/gcc/config/rs6000/t-linux64le
new file mode 100644 (file)
index 0000000..0cf38e1
--- /dev/null
@@ -0,0 +1,3 @@
+#rs6000/t-linux64le
+
+MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))
diff --git a/gcc/config/rs6000/t-linux64lebe b/gcc/config/rs6000/t-linux64lebe
new file mode 100644 (file)
index 0000000..2e63bdb
--- /dev/null
@@ -0,0 +1,7 @@
+#rs6000/t-linux64leend
+
+MULTILIB_OPTIONS    += mbig
+MULTILIB_DIRNAMES   += be
+MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES))))))
+MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES)))
+MULTILIB_MATCHES    := ${MULTILIB_MATCHES_ENDIAN}