This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC] support --with-multilib-list=@/path/name
- From: Alexandre Oliva <oliva at adacore dot com>
- To: "Richard Earnshaw \(lists\)" <Richard dot Earnshaw at arm dot com>
- Cc: Olivier Hainque <hainque at adacore dot com>, gcc-patches at gcc dot gnu dot org, Nick Clifton <nickc at redhat dot com>, Ramana Radhakrishnan <ramana dot radhakrishnan at arm dot com>, Kyrylo Tkachov <kyrylo dot tkachov at arm dot com>, James Greenhalgh <james dot greenhalgh at arm dot com>, Marcus Shawcroft <marcus dot shawcroft at arm dot com>, Richard Sandiford <richard dot sandiford at arm dot com>, Kito Cheng <kito dot cheng at gmail dot com>, Palmer Dabbelt <palmer at sifive dot com>, Andrew Waterman <andrew at sifive dot com>, Jim Wilson <jimw at sifive dot com>, Oleg Endo <olegendo at gcc dot gnu dot org>, Jan Hubicka <hubicka at ucw dot cz>
- Date: Fri, 07 Dec 2018 19:22:54 -0200
- Subject: Re: [RFC] support --with-multilib-list=@/path/name
- References: <orbm6yz3vp.fsf@lxoliva.fsfla.org> <6a2f329b-083e-559b-c993-36d7a5b66701@arm.com> <ory39yptlq.fsf@lxoliva.fsfla.org>
On Nov 12, 2018, Alexandre Oliva <oliva@adacore.com> wrote:
> I'm having second thoughts on specifying external files with a
> full pathname, though, as it might lead to accidental GPL violations.
Here's a patch that takes the multilib list file from gcc/config/arm.
Any objections, further requests or advice, before I put it in and
proceed to extend it to other targets?
support --with-multilib-list=@name for ARM
Introduce @name as a means to specify alternate multilib profiles as
arguments to --with-multilib-list.
So far this is only implemented for ARM.
Tested on x86_64-linux-gnu-x-arm-eabi, comparing multilib.h before and
after the patch after configuring with preexisting profiles, and also
@name with and without preexisting profiles.
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.
---
gcc/config.gcc | 13 +++++++++++++
gcc/doc/install.texi | 43 +++++++++++++++++++++++++++++++++----------
2 files changed, 46 insertions(+), 10 deletions(-)
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 71f083555a44..2f10b73f525b 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -4040,6 +4040,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
@@ -4047,6 +4048,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
@@ -4067,6 +4077,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
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 19adb7ef8705..443003b0fde6 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -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
--
Alexandre Oliva, freedom fighter https://FSFLA.org/blogs/lxo
Be the change, be Free! FSF Latin America board member
GNU Toolchain Engineer Free Software Evangelist
Hay que enGNUrecerse, pero sin perder la terGNUra jamás-GNUChe