support --with-multilib-list=@name for ARM
authorAlexandre Oliva <oliva@adacore.com>
Fri, 21 Dec 2018 05:40:53 +0000 (05:40 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 21 Dec 2018 05:40:53 +0000 (05:40 +0000)
Introduce @name as a means to specify alternate multilib profiles as
arguments to --with-multilib-list.

So far this is only implemented for ARM.

for  gcc/ChangeLog

* config.gcc (tmake_file): Add name to tmake_file for
        each @name in --with-multilib-list on arm-*-* targets.
* doc/install.texi (with-multilib-list): Document it.

From-SVN: r267320

gcc/ChangeLog
gcc/config.gcc
gcc/doc/install.texi

index 6fe19d3..e3eb937 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-21  Alexandre Oliva <oliva@adacore.com>
+
+       * config.gcc (tmake_file): Add name to tmake_file for
+       each @name in --with-multilib-list on arm-*-* targets.
+       * doc/install.texi (with-multilib-list): Document it.
+
 2018-12-21  Jakub Jelinek  <jakub@redhat.com>
 
        * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use
index 63efbf0..bd75e06 100644 (file)
@@ -3976,6 +3976,7 @@ case "${target}" in
 
                # Add extra multilibs
                if test "x$with_multilib_list" != x; then
+                       ml=
                        arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
                        if test "x${arm_multilibs}" != xdefault ; then
                                for arm_multilib in ${arm_multilibs}; do
@@ -3983,6 +3984,15 @@ case "${target}" in
                                        aprofile|rmprofile)
                                                tmake_profile_file="arm/t-multilib"
                                                ;;
+                                       @*)
+                                               ml=`echo "X$arm_multilib" | sed '1s,^X@,,'`
+                                               if test -f "${srcdir}/config/arm/${ml}"; then
+                                                       tmake_file="${tmake_file} arm/${ml}"
+                                               else
+                                                       echo "Error: ${ml} does not exist in ${srcdir}/config/arm" >&2
+                                                       exit 1
+                                               fi
+                                               ;;
                                        *)
                                                echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
                                                exit 1
@@ -4003,6 +4013,9 @@ case "${target}" in
                                    || test "x$with_mode" != x ; then
                                    echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=${with_multilib_list}" 1>&2
                                    exit 1
+                               elif test "x$ml" != x ; then
+                                   echo "Error: You cannot use builtin multilib profiles along with custom ones" 1>&2
+                                   exit 1
                                fi
                                # But pass the default value for float-abi
                                # through to the multilib selector
index 19adb7e..443003b 100644 (file)
@@ -1078,18 +1078,41 @@ values and meaning for each target is given below.
 
 @table @code
 @item arm*-*-*
-@var{list} is a comma separated list of @code{aprofile} and @code{rmprofile}
-to build multilibs for A or R and M architecture profiles respectively.  Note
-that, due to some limitation of the current multilib framework, using the
-combined @code{aprofile,rmprofile} multilibs selects in some cases a less
-optimal multilib than when using the multilib profile for the architecture
-targetted.  The special value @code{default} is also accepted and is equivalent
-to omitting the option, ie. only the default run-time library will be enabled.
+@var{list} is a comma separated list of @code{aprofile} and
+@code{rmprofile} to build multilibs for A or R and M architecture
+profiles respectively.  Note that, due to some limitation of the current
+multilib framework, using the combined @code{aprofile,rmprofile}
+multilibs selects in some cases a less optimal multilib than when using
+the multilib profile for the architecture targetted.  The special value
+@code{default} is also accepted and is equivalent to omitting the
+option, i.e., only the default run-time library will be enabled.
+
+@var{list} may instead contain @code{@@name}, to use the multilib
+configuration Makefile fragment @file{name} in @file{gcc/config/arm} in
+the source tree (it is part of the corresponding sources, after all).
+It is recommended, but not required, that files used for this purpose to
+be named starting with @file{t-ml-}, to make their intended purpose
+self-evident, in line with GCC conventions.  Such files enable custom,
+user-chosen multilib lists to be configured.  Whether multiple such
+files can be used together depends on the contents of the supplied
+files.  See @file{gcc/config/arm/t-multilib} and its supplementary
+@file{gcc/config/arm/t-*profile} files for an example of what such
+Makefile fragments might look like for this version of GCC.  The macros
+expected to be defined in these fragments are not stable across GCC
+releases, so make sure they define the @code{MULTILIB}-related macros
+expected by the version of GCC you are building.
+@ifnothtml
+@xref{Target Fragment,, Target Makefile Fragments, gccint, GNU Compiler
+Collection (GCC) Internals}.
+@end ifnothtml
+@ifhtml
+See ``Target Makefile Fragments'' in the internals manual.
+@end ifhtml
 
 The table below gives the combination of ISAs, architectures, FPUs and
-floating-point ABIs for which multilibs are built for each accepted value.
-The union of these options is considered when specifying both @code{aprofile}
-and @code{rmprofile}.
+floating-point ABIs for which multilibs are built for each predefined
+profile.  The union of these options is considered when specifying both
+@code{aprofile} and @code{rmprofile}.
 
 @multitable @columnfractions .15 .28 .30
 @item Option @tab aprofile @tab rmprofile