[ARM] Allow combination of aprofile and rmprofile multilibs
authorThomas Preud'homme <thomas.preudhomme@arm.com>
Fri, 5 May 2017 16:50:40 +0000 (16:50 +0000)
committerThomas Preud'homme <thopre01@gcc.gnu.org>
Fri, 5 May 2017 16:50:40 +0000 (16:50 +0000)
2017-05-05  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config.gcc: Allow combinations of aprofile and rmprofile values for
    --with-multilib-list.
    * config/arm/t-multilib: New file.
    * config/arm/t-aprofile: Remove initialization of MULTILIB_*
    variables.  Remove setting of ISA and floating-point ABI in
    MULTILIB_OPTIONS and MULTILIB_DIRNAMES.  Set architecture and FPU in
    MULTI_ARCH_OPTS_A and MULTI_ARCH_DIRS_A rather than MULTILIB_OPTIONS
    and MULTILIB_DIRNAMES respectively.  Add comment to introduce all
    matches.  Add architecture matches for marvel-pj4 and generic-armv7-a
    CPU options.
    * config/arm/t-rmprofile: Likewise except for the matches changes.
    * doc/install.texi (--with-multilib-list): Document the combination of
    aprofile and rmprofile values and warn about pitfalls in doing that.

From-SVN: r247646

gcc/ChangeLog
gcc/config.gcc
gcc/config/arm/t-aprofile
gcc/config/arm/t-multilib [new file with mode: 0644]
gcc/config/arm/t-rmprofile
gcc/doc/install.texi

index 604193c..db61cd6 100644 (file)
@@ -1,3 +1,19 @@
+2017-05-05  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       * config.gcc: Allow combinations of aprofile and rmprofile values for
+       --with-multilib-list.
+       * config/arm/t-multilib: New file.
+       * config/arm/t-aprofile: Remove initialization of MULTILIB_*
+       variables.  Remove setting of ISA and floating-point ABI in
+       MULTILIB_OPTIONS and MULTILIB_DIRNAMES.  Set architecture and FPU in
+       MULTI_ARCH_OPTS_A and MULTI_ARCH_DIRS_A rather than MULTILIB_OPTIONS
+       and MULTILIB_DIRNAMES respectively.  Add comment to introduce all
+       matches.  Add architecture matches for marvel-pj4 and generic-armv7-a
+       CPU options.
+       * config/arm/t-rmprofile: Likewise except for the matches changes.
+       * doc/install.texi (--with-multilib-list): Document the combination of
+       aprofile and rmprofile values and warn about pitfalls in doing that.
+
 2017-05-05  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * config/aarch64/aarch64.md (movsi_aarch64): Remove '*' from r=w.
index b8bb4d6..5c9feac 100644 (file)
@@ -3791,34 +3791,18 @@ case "${target}" in
                # Add extra multilibs
                if test "x$with_multilib_list" != x; then
                        arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
-                       case ${arm_multilibs} in
-                       aprofile)
-                               # Note that arm/t-aprofile is a
-                               # stand-alone make file fragment to be
-                               # used only with itself.  We do not
-                               # specifically use the
-                               # TM_MULTILIB_OPTION framework because
-                               # this shorthand is more
-                               # pragmatic.
-                               tmake_profile_file="arm/t-aprofile"
-                               ;;
-                       rmprofile)
-                               # Note that arm/t-rmprofile is a
-                               # stand-alone make file fragment to be
-                               # used only with itself.  We do not
-                               # specifically use the
-                               # TM_MULTILIB_OPTION framework because
-                               # this shorthand is more
-                               # pragmatic.
-                               tmake_profile_file="arm/t-rmprofile"
-                               ;;
-                       default)
-                               ;;
-                       *)
-                               echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
-                               exit 1
-                               ;;
-                       esac
+                       if test "x${arm_multilibs}" != xdefault ; then
+                               for arm_multilib in ${arm_multilibs}; do
+                                       case ${arm_multilib} in
+                                       aprofile|rmprofile)
+                                               tmake_profile_file="arm/t-multilib"
+                                               ;;
+                                       *)
+                                               echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
+                                               exit 1
+                                               ;;
+                                       esac
+                               done
 
                        if test "x${tmake_profile_file}" != x ; then
                                # arm/t-aprofile and arm/t-rmprofile are only
index 19df7a6..b71cbda 100644 (file)
 # have their default values during the configure step.  We enforce
 # this during the top-level configury.
 
-MULTILIB_OPTIONS     =
-MULTILIB_DIRNAMES    =
-MULTILIB_EXCEPTIONS  =
-MULTILIB_MATCHES     =
-MULTILIB_REUSE      =
+# Arch and FPU variants to build libraries with
 
-# We have the following hierachy:
-#   ISA: A32 (.) or T32 (thumb)
-#   Architecture: ARMv7-A (v7-a), ARMv7VE (v7ve), or ARMv8-A (v8-a).
-#   FPU: VFPv3-D16 (fpv3), NEONv1 (simdv1), VFPv4-D16 (fpv4),
-#        NEON-VFPV4 (simdvfpv4), NEON for ARMv8 (simdv8), or None (.).
-#   Float-abi: Soft (.), softfp (softfp), or hard (hardfp).
+MULTI_ARCH_OPTS_A       = march=armv7-a/march=armv7ve/march=armv8-a
+MULTI_ARCH_DIRS_A       = v7-a v7ve v8-a
 
-MULTILIB_OPTIONS       += mthumb
-MULTILIB_DIRNAMES      += thumb
-
-MULTILIB_OPTIONS       += march=armv7-a/march=armv7ve/march=armv8-a
-MULTILIB_DIRNAMES      += v7-a v7ve v8-a
-
-MULTILIB_OPTIONS       += mfpu=vfpv3-d16/mfpu=neon/mfpu=vfpv4-d16/mfpu=neon-vfpv4/mfpu=neon-fp-armv8
-MULTILIB_DIRNAMES      += fpv3 simdv1 fpv4 simdvfpv4 simdv8
-
-MULTILIB_OPTIONS       += mfloat-abi=softfp/mfloat-abi=hard
-MULTILIB_DIRNAMES      += softfp hard
+MULTI_FPU_OPTS_A        = mfpu=vfpv3-d16/mfpu=neon/mfpu=vfpv4-d16/mfpu=neon-vfpv4/mfpu=neon-fp-armv8
+MULTI_FPU_DIRS_A        = fpv3 simdv1 fpv4 simdvfpv4 simdv8
 
 
 # Option combinations to build library with
@@ -71,7 +54,11 @@ MULTILIB_REQUIRED      += *march=armv8-a
 MULTILIB_REQUIRED      += *march=armv8-a/mfpu=neon-fp-armv8/mfloat-abi=*
 
 
+# Matches
+
 # CPU Matches
+MULTILIB_MATCHES       += march?armv7-a=mcpu?marvell-pj4
+MULTILIB_MATCHES       += march?armv7-a=mcpu?generic-armv7-a
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a8
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a9
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a5
diff --git a/gcc/config/arm/t-multilib b/gcc/config/arm/t-multilib
new file mode 100644 (file)
index 0000000..642e731
--- /dev/null
@@ -0,0 +1,69 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# 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/>.
+
+# This is a target makefile fragment that attempts to get
+# multilibs built for the range of CPU's, FPU's and ABI's that
+# are relevant for the ARM architecture.  It should not be used in
+# conjunction with another make file fragment and assumes --with-arch,
+# --with-cpu, --with-fpu, --with-float, --with-mode have their default
+# values during the configure step.  We enforce this during the
+# top-level configury.
+
+MULTILIB_OPTIONS     =
+MULTILIB_DIRNAMES    =
+MULTILIB_EXCEPTIONS  =
+MULTILIB_MATCHES     =
+MULTILIB_REUSE      =
+
+comma := ,
+tm_multilib_list := $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
+
+HAS_APROFILE := $(filter aprofile,$(tm_multilib_list))
+HAS_RMPROFILE := $(filter rmprofile,$(tm_multilib_list))
+
+ifneq (,$(HAS_APROFILE))
+include $(srcdir)/config/arm/t-aprofile
+endif
+ifneq (,$(HAS_RMPROFILE))
+include $(srcdir)/config/arm/t-rmprofile
+endif
+SEP := $(and $(HAS_APROFILE),$(HAS_RMPROFILE),/)
+
+
+# We have the following hierachy:
+#   ISA: A32 (.) or T16/T32 (thumb)
+#   Architecture: ARMv6-M (v6-m), ARMv7-M (v7-m), ARMv7E-M (v7e-m),
+#                 ARMv7 (v7-ar), ARMv7-A (v7-a), ARMv7VE (v7ve),
+#                 ARMv8-M Baseline (v8-m.base), ARMv8-M Mainline (v8-m.main)
+#                 or ARMv8-A (v8-a).
+#   FPU: VFPv3-D16 (fpv3), NEONv1 (simdv1), FPV4-SP-D16 (fpv4-sp),
+#        VFPv4-D16 (fpv4), NEON-VFPV4 (simdvfpv4), FPV5-SP-D16 (fpv5-sp),
+#        VFPv5-D16 (fpv5), NEON for ARMv8 (simdv8), or None (.).
+#   Float-abi: Soft (.), softfp (softfp), or hard (hard).
+
+MULTILIB_OPTIONS       += mthumb
+MULTILIB_DIRNAMES      += thumb
+
+MULTILIB_OPTIONS       += $(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM)
+MULTILIB_DIRNAMES      += $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM)
+
+MULTILIB_OPTIONS       += $(MULTI_FPU_OPTS_A)$(SEP)$(MULTI_FPU_OPTS_RM)
+MULTILIB_DIRNAMES      += $(MULTI_FPU_DIRS_A) $(MULTI_FPU_DIRS_RM)
+
+MULTILIB_OPTIONS       += mfloat-abi=softfp/mfloat-abi=hard
+MULTILIB_DIRNAMES      += softfp hard
index 2a48f91..8cd7351 100644 (file)
 # values during the configure step.  We enforce this during the
 # top-level configury.
 
-MULTILIB_OPTIONS     =
-MULTILIB_DIRNAMES    =
-MULTILIB_EXCEPTIONS  =
-MULTILIB_MATCHES     =
-MULTILIB_REUSE       =
 
-# We have the following hierachy:
-#   ISA: A32 (.) or T16/T32 (thumb).
-#   Architecture: ARMv6S-M (v6-m), ARMv7-M (v7-m), ARMv7E-M (v7e-m),
-#                 ARMv8-M Baseline (v8-m.base) or ARMv8-M Mainline (v8-m.main).
-#   FPU: VFPv3-D16 (fpv3), FPV4-SP-D16 (fpv4-sp), FPV5-SP-D16 (fpv5-sp),
-#        VFPv5-D16 (fpv5), or None (.).
-#   Float-abi: Soft (.), softfp (softfp), or hard (hardfp).
+# Arch and FPU variants to build libraries with
 
-# Options to build libraries with
+MULTI_ARCH_OPTS_RM      = march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main
+MULTI_ARCH_DIRS_RM      = v6-m v7-m v7e-m v7-ar v8-m.base v8-m.main
 
-MULTILIB_OPTIONS       += mthumb
-MULTILIB_DIRNAMES      += thumb
-
-MULTILIB_OPTIONS       += march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main
-MULTILIB_DIRNAMES      += v6-m v7-m v7e-m v7-ar v8-m.base v8-m.main
-
-MULTILIB_OPTIONS       += mfpu=vfpv3-d16/mfpu=fpv4-sp-d16/mfpu=fpv5-sp-d16/mfpu=fpv5-d16
-MULTILIB_DIRNAMES      += fpv3 fpv4-sp fpv5-sp fpv5
-
-MULTILIB_OPTIONS       += mfloat-abi=softfp/mfloat-abi=hard
-MULTILIB_DIRNAMES      += softfp hard
+MULTI_FPU_OPTS_RM       = mfpu=vfpv3-d16/mfpu=fpv4-sp-d16/mfpu=fpv5-sp-d16/mfpu=fpv5-d16
+MULTI_FPU_DIRS_RM       = fpv3 fpv4-sp fpv5-sp fpv5
 
 
 # Option combinations to build library with
index f165e11..b13fc1f 100644 (file)
@@ -1092,14 +1092,18 @@ for each target is given below.
 
 @table @code
 @item arm*-*-*
-@var{list} is one of@code{default}, @code{aprofile} or @code{rmprofile}.
-Specifying @code{default} is equivalent to omitting this option, ie. only the
-default runtime library will be enabled.  Specifying @code{aprofile} or
-@code{rmprofile} builds multilibs for a combination of ISA, architecture,
-FPU available and floating-point ABI.
+@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.
 
 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}.
 
 @multitable @columnfractions .15 .28 .30
 @item Option @tab aprofile @tab rmprofile