public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-*
@ 2015-06-15 15:46 Steve Ellcey 
  2015-06-15 18:58 ` Matthew Fortune
  0 siblings, 1 reply; 5+ messages in thread
From: Steve Ellcey  @ 2015-06-15 15:46 UTC (permalink / raw)
  To: gcc-patches; +Cc: clm, matthew.fortune

We (Imagination) would like to change the layout of the mips-mti-linux-gnu
and mips-img-linux-gnu cross compiler toolchains.  This patch, which affects
nothing other than those targets, implements that change.

Prior to this patch the mti and img cross compilers used a set of nested
directories for the different options.  For example, mips-mti-linux-gnu
put the mips32r2 big-endian hard-float system libraries directly under the
sysroot.  Little-endian libraries were in a /el directory, soft-float
libraries were in a /sof directory.  Libraries that were both soft-float
and little-endian were under el/sof.  64-bit libraries are in a subdirectory
called /64, mips16 libraries are in a subdirectory called /mips16, etc.

The problem with this layout is that it does not match the library layout
of native MIPS linux systems and if you link a program with shared libraries
and then try to move it to a native system and run it, it may not work
because the libraries would not be where the executable expected them to be.

This patch changes the expected layout of the sysroot libraries and
headers to look more like native systems.  The basic idea is that
there is one level of directories under the sysroot directory for
each 'kind' of native MIPS system: mips64r2 and big-endian and
soft-float for example or mips64r6 and little-endian and hard-float.

We do not have separate directories for mips32r2 and mips64r2 because under
the one 'r2' directory there would be /lib, /lib32, and /lib64 directories
for o32, n32, and n64 libraries so they can share one logical sysroot.

The naming convention for the directories under the global sysroot
(set with SYSROOT_SUFFIX_SPEC) is:

[micro]mips[el]-r(1|2|6)[-mips16](-soft|-hard)[-nan2008][-uclibc]

[] parts are optional
	[-micro]   if build for micromips.
	[-el]      if little-endian.
	[-mips16]  if built in mips16 mode.
	[-nan2008] if built for nan2008 on a platform.
		   where that is not the defualt.
	[-uclibc]  if built with uclibc library (instead of glibc).
() parts are a selection
	(1|2|6) refers to versions 1, 2, or 6 of mips32/mips64 architectures.
	(-soft|-hard) refers to a hard of soft float version.

Tested by building both toolchains and inspecting the layout and by running
the GCC testsuite with a subset of the various combinations.

OK for checkin?

Steve Ellcey
sellcey@imgtec.com


2015-06-15  Steve Ellcey  <sellcey@imgtec.com>

	* config/mips/mti-linux.h (MIPS_SYSVERSION_SPEC): New.
	(SYSROOT_SUFFIX_SPEC): Update.
	(SYSROOT_HEADERS_SUFFIX_SPEC): New.
	(STARTFILE_PREFIX_SPEC): Update.
	* config/mips/t-mti-linux (MULTILIB_EXCEPTIONS): Remove.
	(MULTILIB_REQUIRED): New.
	(MULTILIB_OSDIRNAMES): New.
	* config/mips/t-img-linux (MULTILIB_EXCEPTIONS): Remove.
	(MULTILIB_REQUIRED): New.
	(MULTILIB_OSDIRNAMES): New.


diff --git a/gcc/config/mips/mti-linux.h b/gcc/config/mips/mti-linux.h
index 80d5925..32b84d1 100644
--- a/gcc/config/mips/mti-linux.h
+++ b/gcc/config/mips/mti-linux.h
@@ -18,16 +18,20 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 /* This target is a multilib target, specify the sysroot paths.  */
+#define MIPS_SYSVERSION_SPEC \
+    "%{mips32:r1}%{mips64:r1}%{mips32r2:r2}%{mips64r2:r2}%{mips32r6:r6}%{mips64r6:r6}%{mips16:-mips16}"
+
 #undef SYSROOT_SUFFIX_SPEC
-#if MIPS_ISA_DEFAULT == 33 /* mips32r2 is the default */
-#define SYSROOT_SUFFIX_SPEC \
-    "%{mips32:/mips32}%{mips64:/mips64}%{mips64r2:/mips64r2}%{mips32r6:/mips32r6}%{mips64r6:/mips64r6}%{mips16:/mips16}%{mmicromips:/micromips}%{mabi=64:/64}%{mel|EL:/el}%{msoft-float:/sof}%{!mips32r6:%{!mips64r6:%{mnan=2008:/nan2008}}}"
-#elif MIPS_ISA_DEFAULT == 37 /* mips32r6 is the default */
 #define SYSROOT_SUFFIX_SPEC \
-    "%{mips32:/mips32}%{mips64:/mips64}%{mips32r2:/mips32r2}%{mips64r2:/mips64r2}%{mips64r6:/mips64r6}%{mips16:/mips16}%{mmicromips:/micromips}%{mabi=64:/64}%{mel|EL:/el}%{msoft-float:/sof}%{!mips32r6:%{!mips64r6:%{mnan=2008:/nan2008}}}"
-#else /* Unexpected default ISA.  */
-#error No SYSROOT_SUFFIX_SPEC exists for this default ISA
-#endif
+    "/%{mmicromips:micro}mips%{mel|EL:el}-"MIPS_SYSVERSION_SPEC"%{msoft-float:-soft;:-hard}%{!mips32r6:%{!mips64r6:%{mnan=2008:-nan2008}}}%{muclibc:-uclibc}"
+
+#define SYSROOT_HEADERS_SUFFIX_SPEC SYSROOT_SUFFIX_SPEC
+
+#undef STARTFILE_PREFIX_SPEC
+#define STARTFILE_PREFIX_SPEC                          \
+  "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/}         \
+   %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/}  \
+   %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}"
 
 #undef DRIVER_SELF_SPECS
 #define DRIVER_SELF_SPECS						\
diff --git a/gcc/config/mips/t-img-linux b/gcc/config/mips/t-img-linux
index 86b0a26..93d81920 100644
--- a/gcc/config/mips/t-img-linux
+++ b/gcc/config/mips/t-img-linux
@@ -23,8 +23,16 @@ MULTILIB_OPTIONS = mips64r6 mabi=64 EL
 MULTILIB_DIRNAMES = mips64r6 64 el
 MULTILIB_MATCHES = EL=mel EB=meb
 
-# The 64 bit ABI is not supported on the mips32r6 architecture.
-# Because mips32r6 is the default we can't use that flag to trigger
-# the exception so we check for mabi=64 with no specific mips
-# architecture flag instead.
-MULTILIB_EXCEPTIONS += mabi=64*
+MULTILIB_REQUIRED =
+MULTILIB_OSDIRNAMES = .=mips-r6-hard/lib
+MULTILIB_REQUIRED += mips64r6
+MULTILIB_OSDIRNAMES += mips64r6=!mips-r6-hard/lib32
+MULTILIB_REQUIRED += mips64r6/mabi=64
+MULTILIB_OSDIRNAMES += mips64r6/mabi.64=!mips-r6-hard/lib64
+
+MULTILIB_REQUIRED += EL
+MULTILIB_OSDIRNAMES += EL=!mipsel-r6-hard/lib
+MULTILIB_REQUIRED += mips64r6/EL
+MULTILIB_OSDIRNAMES += mips64r6/EL=!mipsel-r6-hard/lib32
+MULTILIB_REQUIRED += mips64r6/mabi=64/EL
+MULTILIB_OSDIRNAMES += mips64r6/mabi.64/EL=!mipsel-r6-hard/lib64
diff --git a/gcc/config/mips/t-mti-linux b/gcc/config/mips/t-mti-linux
index c0dcbf0..2404c4ca 100644
--- a/gcc/config/mips/t-mti-linux
+++ b/gcc/config/mips/t-mti-linux
@@ -23,26 +23,136 @@ MULTILIB_OPTIONS = mips32/mips64/mips64r2 mips16/mmicromips mabi=64 EL msoft-flo
 MULTILIB_DIRNAMES = mips32 mips64 mips64r2 mips16 micromips 64 el sof nan2008
 MULTILIB_MATCHES = EL=mel EB=meb mips32r2=mips32r3 mips32r2=mips32r5 mips64r2=mips64r3 mips64r2=mips64r5
 
-# The 64 bit ABI is not supported on the mips32 architecture.
-MULTILIB_EXCEPTIONS += *mips32*/*mabi=64*
-
-# The 64 bit ABI is not supported on the mips32r2 architecture.
-# Because mips32r2 is the default we can't use that flag to trigger
-# the exception so we check for mabi=64 with no specific mips
-# architecture flag instead.
-MULTILIB_EXCEPTIONS += mabi=64*
-
-# We do not want to build mips16 versions of mips64* architectures.
-MULTILIB_EXCEPTIONS += *mips64*/*mips16*
-MULTILIB_EXCEPTIONS += *mips16/mabi=64*
-
-# We only want micromips for mips32r2 architecture.
-MULTILIB_EXCEPTIONS += *mips32/mmicromips*
-MULTILIB_EXCEPTIONS += *mips64*/mmicromips*
-MULTILIB_EXCEPTIONS += *mmicromips/mabi=64*
-
-# We do not want nan2008 libraries for soft-float,
-# mips32[r1], or mips64[r1].
-MULTILIB_EXCEPTIONS += *msoft-float*/*mnan=2008*
-MULTILIB_EXCEPTIONS += *mips32/*mnan=2008*
-MULTILIB_EXCEPTIONS += *mips64/*mnan=2008*
+MULTILIB_REQUIRED    =
+MULTILIB_OSDIRNAMES  = .=mips-r2-hard/lib
+MULTILIB_REQUIRED   += mips64r2
+MULTILIB_OSDIRNAMES += mips64r2=!mips-r2-hard/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64=!mips-r2-hard/lib64
+
+MULTILIB_REQUIRED   += mnan=2008
+MULTILIB_OSDIRNAMES += mnan.2008=mips-r2-hard-nan2008/lib
+MULTILIB_REQUIRED   += mips64r2/mnan=2008
+MULTILIB_OSDIRNAMES += mips64r2/mnan.2008=!mips-r2-hard-nan2008/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64/mnan=2008
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64/mnan.2008=!mips-r2-hard-nan2008/lib64
+
+MULTILIB_REQUIRED   += msoft-float
+MULTILIB_OSDIRNAMES += msoft-float=mips-r2-soft/lib
+MULTILIB_REQUIRED   += mips64r2/msoft-float
+MULTILIB_OSDIRNAMES += mips64r2/msoft-float=!mips-r2-soft/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64/msoft-float
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64/msoft-float=!mips-r2-soft/lib64
+
+#MULTILIB_REQUIRED   += msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += msoft-float/mnan.2008=mips-r2-soft-nan2008/lib
+#MULTILIB_REQUIRED   += mips64r2/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips64r2/msoft-float/mnan.2008=!mips-r2-soft-nan2008/lib32
+#MULTILIB_REQUIRED   += mips64r2/mabi=64/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips64r2/mabi.64/msoft-float/mnan.2008=!mips-r2-soft-nan2008/lib64
+
+MULTILIB_REQUIRED   += EL
+MULTILIB_OSDIRNAMES += EL=!mipsel-r2-hard/lib
+MULTILIB_REQUIRED   += mips64r2/EL
+MULTILIB_OSDIRNAMES += mips64r2/EL=!mipsel-r2-hard/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64/EL
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL=!mipsel-r2-hard/lib64
+
+MULTILIB_REQUIRED   += EL/mnan=2008
+MULTILIB_OSDIRNAMES += EL/mnan.2008=!mipsel-r2-hard-nan2008/lib
+MULTILIB_REQUIRED   += mips64r2/EL/mnan=2008
+MULTILIB_OSDIRNAMES += mips64r2/EL/mnan.2008=!mipsel-r2-hard-nan2008/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/mnan=2008
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/mnan.2008=!mipsel-r2-hard-nan2008/lib64
+
+MULTILIB_REQUIRED   += EL/msoft-float
+MULTILIB_OSDIRNAMES += EL/msoft-float=!mipsel-r2-soft/lib
+MULTILIB_REQUIRED   += mips64r2/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips64r2/EL/msoft-float=!mipsel-r2-soft/lib32
+MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/msoft-float=!mipsel-r2-soft/lib64
+
+#MULTILIB_REQUIRED   += EL/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib
+#MULTILIB_REQUIRED   += mips64r2/EL/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips64r2/EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib32
+#MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib64
+
+# We will not include any 64 bit mips16 combinations.
+MULTILIB_REQUIRED   += mips16
+MULTILIB_OSDIRNAMES += mips16=!mips-r2-mips16-hard/lib
+MULTILIB_REQUIRED   += mips16/mnan=2008
+MULTILIB_OSDIRNAMES += mips16/mnan.2008=!mips-r2-mips16-hard-nan2008/lib
+MULTILIB_REQUIRED   += mips16/msoft-float
+MULTILIB_OSDIRNAMES += mips16/msoft-float=!mips-r2-mips16-soft/lib
+#MULTILIB_REQUIRED   += mips16/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips16/msoft-float/mnan.2008=!mips-r2-mips16-soft-nan2008/lib
+
+MULTILIB_REQUIRED   += mips16/EL
+MULTILIB_OSDIRNAMES += mips16/EL=!mipsel-r2-mips16-hard/lib
+MULTILIB_REQUIRED   += mips16/EL/mnan=2008
+MULTILIB_OSDIRNAMES += mips16/EL/mnan.2008=!mipsel-r2-mips16-hard-nan2008/lib
+MULTILIB_REQUIRED   += mips16/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips16/EL/msoft-float=!mipsel-r2-mips16-soft/lib
+#MULTILIB_REQUIRED   += mips16/EL/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mips16/EL/msoft-float/mnan.2008=!mipsel-r2-mips16-soft-nan2008/lib
+
+MULTILIB_REQUIRED   += mmicromips
+MULTILIB_OSDIRNAMES += mmicromips=!micromips-r2-hard/lib
+MULTILIB_REQUIRED   += mmicromips/mnan=2008
+MULTILIB_OSDIRNAMES += mmicromips/mnan.2008=!micromips-r2-hard-nan2008/lib
+MULTILIB_REQUIRED   += mmicromips/msoft-float
+MULTILIB_OSDIRNAMES += mmicromips/msoft-float=!micromips-r2-soft/lib
+#MULTILIB_REQUIRED   += mmicromips/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mmicromips/msoft-float/mnan.2008=!micromips-r2-soft-nan2008/lib
+
+MULTILIB_REQUIRED   += mmicromips/EL
+MULTILIB_OSDIRNAMES += mmicromips/EL=!micromipsel-r2-hard/lib
+MULTILIB_REQUIRED   += mmicromips/EL/mnan=2008
+MULTILIB_OSDIRNAMES += mmicromips/EL/mnan.2008=!micromipsel-r2-hard-nan2008/lib
+MULTILIB_REQUIRED   += mmicromips/EL/msoft-float
+MULTILIB_OSDIRNAMES += mmicromips/EL/msoft-float=!micromipsel-r2-soft/lib
+#MULTILIB_REQUIRED   += mmicromips/EL/msoft-float/mnan=2008
+#MULTILIB_OSDIRNAMES += mmicromips/EL/msoft-float/mnan.2008=!micromipsel-r2-soft-nan2008/lib
+
+# Version 1 multilibs
+
+MULTILIB_REQUIRED   += mips32
+MULTILIB_OSDIRNAMES += mips32=mips-r1-hard/lib
+MULTILIB_REQUIRED   += mips64
+MULTILIB_OSDIRNAMES += mips64=!mips-r1-hard/lib32
+MULTILIB_REQUIRED   += mips64/mabi=64
+MULTILIB_OSDIRNAMES += mips64/mabi.64=!mips-r1-hard/lib64
+
+MULTILIB_REQUIRED   += mips32/msoft-float
+MULTILIB_OSDIRNAMES += mips32/msoft-float=mips-r1-soft/lib
+MULTILIB_REQUIRED   += mips64/msoft-float
+MULTILIB_OSDIRNAMES += mips64/msoft-float=!mips-r1-soft/lib32
+MULTILIB_REQUIRED   += mips64/mabi=64/msoft-float
+MULTILIB_OSDIRNAMES += mips64/mabi.64/msoft-float=!mips-r1-soft/lib64
+
+MULTILIB_REQUIRED   += mips32/EL
+MULTILIB_OSDIRNAMES += mips32/EL=!mipsel-r1-hard/lib
+MULTILIB_REQUIRED   += mips64/EL
+MULTILIB_OSDIRNAMES += mips64/EL=!mipsel-r1-hard/lib32
+MULTILIB_REQUIRED   += mips64/mabi=64/EL
+MULTILIB_OSDIRNAMES += mips64/mabi.64/EL=!mipsel-r1-hard/lib64
+
+MULTILIB_REQUIRED   += mips32/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips32/EL/msoft-float=!mipsel-r1-soft/lib
+MULTILIB_REQUIRED   += mips64/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips64/EL/msoft-float=!mipsel-r1-soft/lib32
+MULTILIB_REQUIRED   += mips64/mabi=64/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips64/mabi.64/EL/msoft-float=!mipsel-r1-soft/lib64
+
+# We will not include any 64 bit mips16 combinations.
+MULTILIB_REQUIRED   += mips32/mips16
+MULTILIB_OSDIRNAMES += mips32/mips16=!mips-r1-mips16-hard/lib
+MULTILIB_REQUIRED   += mips32/mips16/msoft-float
+MULTILIB_OSDIRNAMES += mips32/mips16/msoft-float=!mips-r1-mips16-soft/lib
+
+MULTILIB_REQUIRED   += mips32/mips16/EL
+MULTILIB_OSDIRNAMES += mips32/mips16/EL=!mipsel-r1-mips16-hard/lib
+MULTILIB_REQUIRED   += mips32/mips16/EL/msoft-float
+MULTILIB_OSDIRNAMES += mips32/mips16/EL/msoft-float=!mipsel-r1-mips16-soft/lib

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-*
  2015-06-15 15:46 [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-* Steve Ellcey 
@ 2015-06-15 18:58 ` Matthew Fortune
  2015-06-15 22:11   ` Steve Ellcey
  2015-06-16 16:40   ` Steve Ellcey
  0 siblings, 2 replies; 5+ messages in thread
From: Matthew Fortune @ 2015-06-15 18:58 UTC (permalink / raw)
  To: Steve Ellcey, gcc-patches; +Cc: clm

Hi Steve,

Having worked on the new layout I of course am happy with it. I think it
makes the cross compiled sysroots much easier to use for installing
on a target as well as making the library paths match for cross compiled
and native. A couple of minor things...

> diff --git a/gcc/config/mips/mti-linux.h b/gcc/config/mips/mti-linux.h
> index 80d5925..32b84d1 100644
> --- a/gcc/config/mips/mti-linux.h
> +++ b/gcc/config/mips/mti-linux.h
> @@ -18,16 +18,20 @@ along with GCC; see the file COPYING3.  If not see
>  <http://www.gnu.org/licenses/>.  */
>  
>  /* This target is a multilib target, specify the sysroot paths.  */
> +#define MIPS_SYSVERSION_SPEC \
> +    "%{mips32:r1}%{mips64:r1}%{mips32r2:r2}%{mips64r2:r2}%{mips32r6:r6}%{mips64r6:r6}%{mips16:-mips16}"
> +

I know we had long lines before in this file but can't we split this line safely like:

    "%{mips32:r1}%{mips64:r1}%{mips32r2:r2}%{mips64r2:r2}%{mips32r6:r6}" \
    "%{mips64r6:r6}%{mips16:-mips16}"

>  #undef SYSROOT_SUFFIX_SPEC
> -#if MIPS_ISA_DEFAULT == 33 /* mips32r2 is the default */
> -#define SYSROOT_SUFFIX_SPEC \
> -    "%{mips32:/mips32}%{mips64:/mips64}%{mips64r2:/mips64r2}%{mips32r6:/mips32r6}%{mips64r6:/mips64r6}%{mips16:/mips16}%{mmicromips:/micromips}%{mabi=64:/64}%{mel|EL:/el}%{msoft-float:/sof}%{!mips32r6:%{!mips64r6:%{mnan=2008:/nan2008}}}"
> -#elif MIPS_ISA_DEFAULT == 37 /* mips32r6 is the default */
>  #define SYSROOT_SUFFIX_SPEC \
> -    "%{mips32:/mips32}%{mips64:/mips64}%{mips32r2:/mips32r2}%{mips64r2:/mips64r2}%{mips64r6:/mips64r6}%{mips16:/mips16}%{mmicromips:/micromips}%{mabi=64:/64}%{mel|EL:/el}%{msoft-float:/sof}%{!mips32r6:%{!mips64r6:%{mnan=2008:/nan2008}}}"
> -#else /* Unexpected default ISA.  */
> -#error No SYSROOT_SUFFIX_SPEC exists for this default ISA
> -#endif
> +    "/%{mmicromips:micro}mips%{mel|EL:el}-"MIPS_SYSVERSION_SPEC"%{msoft-float:-soft;:-hard}%{!mips32r6:%{!mips64r6:%{mnan=2008:-nan2008}}}%{muclibc:-uclibc}"
> +

Similarly here.

> +#define SYSROOT_HEADERS_SUFFIX_SPEC SYSROOT_SUFFIX_SPEC
> +
> +#undef STARTFILE_PREFIX_SPEC
> +#define STARTFILE_PREFIX_SPEC                          \
> +  "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/}         \
> +   %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/}  \
> +   %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}"
>  
>  #undef DRIVER_SELF_SPECS
>  #define DRIVER_SELF_SPECS						\
> diff --git a/gcc/config/mips/t-img-linux b/gcc/config/mips/t-img-linux
> index 86b0a26..93d81920 100644
> --- a/gcc/config/mips/t-img-linux
> +++ b/gcc/config/mips/t-img-linux
> @@ -23,8 +23,16 @@ MULTILIB_OPTIONS = mips64r6 mabi=64 EL
>  MULTILIB_DIRNAMES = mips64r6 64 el
>  MULTILIB_MATCHES = EL=mel EB=meb
>  
> -# The 64 bit ABI is not supported on the mips32r6 architecture.
> -# Because mips32r6 is the default we can't use that flag to trigger
> -# the exception so we check for mabi=64 with no specific mips
> -# architecture flag instead.
> -MULTILIB_EXCEPTIONS += mabi=64*
> +MULTILIB_REQUIRED =
> +MULTILIB_OSDIRNAMES = .=mips-r6-hard/lib

Why no exclamation (!) here? I understand the ! is supposed to prevent the
tools from searching any other directory. Is it redundant on the default
multilib?

> +MULTILIB_REQUIRED += mips64r6
> +MULTILIB_OSDIRNAMES += mips64r6=!mips-r6-hard/lib32
> +MULTILIB_REQUIRED += mips64r6/mabi=64
> +MULTILIB_OSDIRNAMES += mips64r6/mabi.64=!mips-r6-hard/lib64
> +
> +MULTILIB_REQUIRED += EL
> +MULTILIB_OSDIRNAMES += EL=!mipsel-r6-hard/lib
> +MULTILIB_REQUIRED += mips64r6/EL
> +MULTILIB_OSDIRNAMES += mips64r6/EL=!mipsel-r6-hard/lib32
> +MULTILIB_REQUIRED += mips64r6/mabi=64/EL
> +MULTILIB_OSDIRNAMES += mips64r6/mabi.64/EL=!mipsel-r6-hard/lib64
> diff --git a/gcc/config/mips/t-mti-linux b/gcc/config/mips/t-mti-linux
> index c0dcbf0..2404c4ca 100644
> --- a/gcc/config/mips/t-mti-linux
> +++ b/gcc/config/mips/t-mti-linux
> @@ -23,26 +23,136 @@ MULTILIB_OPTIONS = mips32/mips64/mips64r2 mips16/mmicromips mabi=64 EL msoft-flo
>  MULTILIB_DIRNAMES = mips32 mips64 mips64r2 mips16 micromips 64 el sof nan2008
>  MULTILIB_MATCHES = EL=mel EB=meb mips32r2=mips32r3 mips32r2=mips32r5 mips64r2=mips64r3 mips64r2=mips64r5
>  
> -# The 64 bit ABI is not supported on the mips32 architecture.
> -MULTILIB_EXCEPTIONS += *mips32*/*mabi=64*
> -
> -# The 64 bit ABI is not supported on the mips32r2 architecture.
> -# Because mips32r2 is the default we can't use that flag to trigger
> -# the exception so we check for mabi=64 with no specific mips
> -# architecture flag instead.
> -MULTILIB_EXCEPTIONS += mabi=64*
> -
> -# We do not want to build mips16 versions of mips64* architectures.
> -MULTILIB_EXCEPTIONS += *mips64*/*mips16*
> -MULTILIB_EXCEPTIONS += *mips16/mabi=64*
> -
> -# We only want micromips for mips32r2 architecture.
> -MULTILIB_EXCEPTIONS += *mips32/mmicromips*
> -MULTILIB_EXCEPTIONS += *mips64*/mmicromips*
> -MULTILIB_EXCEPTIONS += *mmicromips/mabi=64*
> -
> -# We do not want nan2008 libraries for soft-float,
> -# mips32[r1], or mips64[r1].
> -MULTILIB_EXCEPTIONS += *msoft-float*/*mnan=2008*
> -MULTILIB_EXCEPTIONS += *mips32/*mnan=2008*
> -MULTILIB_EXCEPTIONS += *mips64/*mnan=2008*
> +MULTILIB_REQUIRED    =
> +MULTILIB_OSDIRNAMES  = .=mips-r2-hard/lib

Likewise.

> +MULTILIB_REQUIRED   += mips64r2
> +MULTILIB_OSDIRNAMES += mips64r2=!mips-r2-hard/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64=!mips-r2-hard/lib64
> +
> +MULTILIB_REQUIRED   += mnan=2008
> +MULTILIB_OSDIRNAMES += mnan.2008=mips-r2-hard-nan2008/lib

Doesn't this case need the '!'?

> +MULTILIB_REQUIRED   += mips64r2/mnan=2008
> +MULTILIB_OSDIRNAMES += mips64r2/mnan.2008=!mips-r2-hard-nan2008/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64/mnan=2008
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64/mnan.2008=!mips-r2-hard-nan2008/lib64
> +
> +MULTILIB_REQUIRED   += msoft-float
> +MULTILIB_OSDIRNAMES += msoft-float=mips-r2-soft/lib

Likewise.

> +MULTILIB_REQUIRED   += mips64r2/msoft-float
> +MULTILIB_OSDIRNAMES += mips64r2/msoft-float=!mips-r2-soft/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64/msoft-float
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64/msoft-float=!mips-r2-soft/lib64
> +
> +#MULTILIB_REQUIRED   += msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += msoft-float/mnan.2008=mips-r2-soft-nan2008/lib

Likewise.

> +#MULTILIB_REQUIRED   += mips64r2/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips64r2/msoft-float/mnan.2008=!mips-r2-soft-nan2008/lib32
> +#MULTILIB_REQUIRED   += mips64r2/mabi=64/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips64r2/mabi.64/msoft-float/mnan.2008=!mips-r2-soft-nan2008/lib64
> +
> +MULTILIB_REQUIRED   += EL
> +MULTILIB_OSDIRNAMES += EL=!mipsel-r2-hard/lib
> +MULTILIB_REQUIRED   += mips64r2/EL
> +MULTILIB_OSDIRNAMES += mips64r2/EL=!mipsel-r2-hard/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64/EL
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL=!mipsel-r2-hard/lib64
> +
> +MULTILIB_REQUIRED   += EL/mnan=2008
> +MULTILIB_OSDIRNAMES += EL/mnan.2008=!mipsel-r2-hard-nan2008/lib
> +MULTILIB_REQUIRED   += mips64r2/EL/mnan=2008
> +MULTILIB_OSDIRNAMES += mips64r2/EL/mnan.2008=!mipsel-r2-hard-nan2008/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/mnan=2008
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/mnan.2008=!mipsel-r2-hard-nan2008/lib64
> +
> +MULTILIB_REQUIRED   += EL/msoft-float
> +MULTILIB_OSDIRNAMES += EL/msoft-float=!mipsel-r2-soft/lib
> +MULTILIB_REQUIRED   += mips64r2/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips64r2/EL/msoft-float=!mipsel-r2-soft/lib32
> +MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/msoft-float=!mipsel-r2-soft/lib64
> +
> +#MULTILIB_REQUIRED   += EL/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib
> +#MULTILIB_REQUIRED   += mips64r2/EL/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips64r2/EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib32
> +#MULTILIB_REQUIRED   += mips64r2/mabi=64/EL/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips64r2/mabi.64/EL/msoft-float/mnan.2008=!mipsel-r2-soft-nan2008/lib64
> +
> +# We will not include any 64 bit mips16 combinations.
> +MULTILIB_REQUIRED   += mips16
> +MULTILIB_OSDIRNAMES += mips16=!mips-r2-mips16-hard/lib
> +MULTILIB_REQUIRED   += mips16/mnan=2008
> +MULTILIB_OSDIRNAMES += mips16/mnan.2008=!mips-r2-mips16-hard-nan2008/lib
> +MULTILIB_REQUIRED   += mips16/msoft-float
> +MULTILIB_OSDIRNAMES += mips16/msoft-float=!mips-r2-mips16-soft/lib
> +#MULTILIB_REQUIRED   += mips16/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips16/msoft-float/mnan.2008=!mips-r2-mips16-soft-nan2008/lib
> +
> +MULTILIB_REQUIRED   += mips16/EL
> +MULTILIB_OSDIRNAMES += mips16/EL=!mipsel-r2-mips16-hard/lib
> +MULTILIB_REQUIRED   += mips16/EL/mnan=2008
> +MULTILIB_OSDIRNAMES += mips16/EL/mnan.2008=!mipsel-r2-mips16-hard-nan2008/lib
> +MULTILIB_REQUIRED   += mips16/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips16/EL/msoft-float=!mipsel-r2-mips16-soft/lib
> +#MULTILIB_REQUIRED   += mips16/EL/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mips16/EL/msoft-float/mnan.2008=!mipsel-r2-mips16-soft-nan2008/lib
> +
> +MULTILIB_REQUIRED   += mmicromips
> +MULTILIB_OSDIRNAMES += mmicromips=!micromips-r2-hard/lib
> +MULTILIB_REQUIRED   += mmicromips/mnan=2008
> +MULTILIB_OSDIRNAMES += mmicromips/mnan.2008=!micromips-r2-hard-nan2008/lib
> +MULTILIB_REQUIRED   += mmicromips/msoft-float
> +MULTILIB_OSDIRNAMES += mmicromips/msoft-float=!micromips-r2-soft/lib
> +#MULTILIB_REQUIRED   += mmicromips/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mmicromips/msoft-float/mnan.2008=!micromips-r2-soft-nan2008/lib
> +
> +MULTILIB_REQUIRED   += mmicromips/EL
> +MULTILIB_OSDIRNAMES += mmicromips/EL=!micromipsel-r2-hard/lib
> +MULTILIB_REQUIRED   += mmicromips/EL/mnan=2008
> +MULTILIB_OSDIRNAMES += mmicromips/EL/mnan.2008=!micromipsel-r2-hard-nan2008/lib
> +MULTILIB_REQUIRED   += mmicromips/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mmicromips/EL/msoft-float=!micromipsel-r2-soft/lib
> +#MULTILIB_REQUIRED   += mmicromips/EL/msoft-float/mnan=2008
> +#MULTILIB_OSDIRNAMES += mmicromips/EL/msoft-float/mnan.2008=!micromipsel-r2-soft-nan2008/lib
> +
> +# Version 1 multilibs
> +
> +MULTILIB_REQUIRED   += mips32
> +MULTILIB_OSDIRNAMES += mips32=mips-r1-hard/lib

Likewise.

> +MULTILIB_REQUIRED   += mips64
> +MULTILIB_OSDIRNAMES += mips64=!mips-r1-hard/lib32
> +MULTILIB_REQUIRED   += mips64/mabi=64
> +MULTILIB_OSDIRNAMES += mips64/mabi.64=!mips-r1-hard/lib64
> +
> +MULTILIB_REQUIRED   += mips32/msoft-float
> +MULTILIB_OSDIRNAMES += mips32/msoft-float=mips-r1-soft/lib

Likewise.

> +MULTILIB_REQUIRED   += mips64/msoft-float
> +MULTILIB_OSDIRNAMES += mips64/msoft-float=!mips-r1-soft/lib32
> +MULTILIB_REQUIRED   += mips64/mabi=64/msoft-float
> +MULTILIB_OSDIRNAMES += mips64/mabi.64/msoft-float=!mips-r1-soft/lib64
> +
> +MULTILIB_REQUIRED   += mips32/EL
> +MULTILIB_OSDIRNAMES += mips32/EL=!mipsel-r1-hard/lib
> +MULTILIB_REQUIRED   += mips64/EL
> +MULTILIB_OSDIRNAMES += mips64/EL=!mipsel-r1-hard/lib32
> +MULTILIB_REQUIRED   += mips64/mabi=64/EL
> +MULTILIB_OSDIRNAMES += mips64/mabi.64/EL=!mipsel-r1-hard/lib64
> +
> +MULTILIB_REQUIRED   += mips32/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips32/EL/msoft-float=!mipsel-r1-soft/lib
> +MULTILIB_REQUIRED   += mips64/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips64/EL/msoft-float=!mipsel-r1-soft/lib32
> +MULTILIB_REQUIRED   += mips64/mabi=64/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips64/mabi.64/EL/msoft-float=!mipsel-r1-soft/lib64
> +
> +# We will not include any 64 bit mips16 combinations.
> +MULTILIB_REQUIRED   += mips32/mips16
> +MULTILIB_OSDIRNAMES += mips32/mips16=!mips-r1-mips16-hard/lib
> +MULTILIB_REQUIRED   += mips32/mips16/msoft-float
> +MULTILIB_OSDIRNAMES += mips32/mips16/msoft-float=!mips-r1-mips16-soft/lib
> +
> +MULTILIB_REQUIRED   += mips32/mips16/EL
> +MULTILIB_OSDIRNAMES += mips32/mips16/EL=!mipsel-r1-mips16-hard/lib
> +MULTILIB_REQUIRED   += mips32/mips16/EL/msoft-float
> +MULTILIB_OSDIRNAMES += mips32/mips16/EL/msoft-float=!mipsel-r1-mips16-soft/lib

Apart from wanting to understand the need/lack of ! in various places, this is
otherwise OK.

Matthew

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-*
  2015-06-15 18:58 ` Matthew Fortune
@ 2015-06-15 22:11   ` Steve Ellcey
  2015-06-16 16:40   ` Steve Ellcey
  1 sibling, 0 replies; 5+ messages in thread
From: Steve Ellcey @ 2015-06-15 22:11 UTC (permalink / raw)
  To: Matthew Fortune; +Cc: gcc-patches, clm


> Apart from wanting to understand the need/lack of ! in various places, this is
> otherwise OK.
> 
> Matthew

Ok, I split the long lines and added the missing '!' characters to all
the MULTILIB_OSDIRNAMES except for the default ones.  Using the '!' on
the default MULTILIB_OSDIRNAMES like:

MULTILIB_OSDIRNAMES = .=mips-r6-hard/lib

in t-img-linux causes the '--print-multi-os-directory' option to include
the '!' character in the output when using the default options and that
causes all sorts of problems when building.

Without a '!' on the default case:

% inst*/bin/*-gcc --print-multi-os-directory
mips-r6-hard/lib

With a '!' on the default case:

% inst*/bin/*-gcc --print-multi-os-directory
!mips-r6-hard/lib

This is probably a bug in the scripts that parse the t-* files and
setting up the various multi-lib lists but I didn't dig into exactly
where or what the problem was, I just left the '!' off the default case.
The non-default cases should all have a '!' and I have added it to the
ones that were missing it.

I will check this patch in after I have done one more round of testing
to make sure that my latest changes didn't break anything.

Steve Ellcey
sellcey@imgtec.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-*
  2015-06-15 18:58 ` Matthew Fortune
  2015-06-15 22:11   ` Steve Ellcey
@ 2015-06-16 16:40   ` Steve Ellcey
  2015-06-16 16:44     ` Matthew Fortune
  1 sibling, 1 reply; 5+ messages in thread
From: Steve Ellcey @ 2015-06-16 16:40 UTC (permalink / raw)
  To: Matthew Fortune; +Cc: gcc-patches, clm

As follow-up to this patch, I forgot to include a testsuite patch to two
mips specific tests that fail with the new layout.  These tests are
loongson specific and have includes of system headers in them.   The way
mips.exp in testsuite/gcc.target/mips works is that for runnable tests
requiring a specific ABI that is incompatible with the ABI being tested
the test is converted to an assemble only test.  With the old layouts
for mips-mti-linux* and mips-img-linux*, this was no problem because
there was a single copy of /usr/include in sysroot used by all
compilations.  With the new layout there are multiple copies
of /usr/include under each of the various system sysroots and if the ABI
does not match any of those than the test will not know where to find
the include files.  Since there are only two of these tests and I could
not think of a clean way to make the tests work on the mti or img
toolchains I just added a target option to skip them for the mti and img
toolchains.

I ran this by Matthew and got his OK so I will check this patch in along
with the patch to change the sysroot layout.

Steve Ellcey
sellcey@imgtec.com

2015-06-16  Steve Ellcey  <sellcey@imgtec.com>

	* gcc.target/mips/loongson-shift-count-truncated-1.c:
	Skip on mips*-mti-linux* and mips*-img-linux* targets.
	* gcc.target/mips/loongson-simd.c: Ditto.


diff --git a/gcc/testsuite/gcc.target/mips/loongson-shift-count-truncated-1.c b/gcc/testsuite/gcc.target/mips/loongson-shift-count-truncated-1.c
index 778d739..f57a18c 100644
--- a/gcc/testsuite/gcc.target/mips/loongson-shift-count-truncated-1.c
+++ b/gcc/testsuite/gcc.target/mips/loongson-shift-count-truncated-1.c
@@ -1,6 +1,6 @@
 /* Test case for SHIFT_COUNT_TRUNCATED on Loongson.  */
 
-/* { dg-do run } */
+/* { dg-do run { target { ! { mips*-mti-linux* mips*-img-linux* } } } } */
 /* loongson.h does not handle or check for MIPS16ness.  There doesn't
    seem any good reason for it to, given that the Loongson processors
    do not support MIPS16.  */
diff --git a/gcc/testsuite/gcc.target/mips/loongson-simd.c b/gcc/testsuite/gcc.target/mips/loongson-simd.c
index 3d72e93..6d2ceb6 100644
--- a/gcc/testsuite/gcc.target/mips/loongson-simd.c
+++ b/gcc/testsuite/gcc.target/mips/loongson-simd.c
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
-/* { dg-do run } */
+/* { dg-do run { target { ! { mips*-mti-linux* mips*-img-linux* } } } } */
 /* loongson.h does not handle or check for MIPS16ness or
    microMIPSness.  There doesn't seem any good reason for it to, given
    that the Loongson processors do not support either.  The effective target


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-*
  2015-06-16 16:40   ` Steve Ellcey
@ 2015-06-16 16:44     ` Matthew Fortune
  0 siblings, 0 replies; 5+ messages in thread
From: Matthew Fortune @ 2015-06-16 16:44 UTC (permalink / raw)
  To: Steve Ellcey; +Cc: gcc-patches, clm

Steve Ellcey <Steve.Ellcey@imgtec.com> writes:
> As follow-up to this patch, I forgot to include a testsuite patch to two
> mips specific tests that fail with the new layout.  These tests are
> loongson specific and have includes of system headers in them.   The way
> mips.exp in testsuite/gcc.target/mips works is that for runnable tests
> requiring a specific ABI that is incompatible with the ABI being tested
> the test is converted to an assemble only test.  With the old layouts
> for mips-mti-linux* and mips-img-linux*, this was no problem because
> there was a single copy of /usr/include in sysroot used by all
> compilations.  With the new layout there are multiple copies
> of /usr/include under each of the various system sysroots and if the ABI
> does not match any of those than the test will not know where to find
> the include files.  Since there are only two of these tests and I could
> not think of a clean way to make the tests work on the mti or img
> toolchains I just added a target option to skip them for the mti and img
> toolchains.
> 
> I ran this by Matthew and got his OK so I will check this patch in along
> with the patch to change the sysroot layout.

Agreed, I see no way to avoid this.

Thanks,
Matthew

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-06-16 16:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-15 15:46 [Patch, MIPS] Modify sysroot layout for mips-mti-* and mips-img-* Steve Ellcey 
2015-06-15 18:58 ` Matthew Fortune
2015-06-15 22:11   ` Steve Ellcey
2015-06-16 16:40   ` Steve Ellcey
2015-06-16 16:44     ` Matthew Fortune

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).