Commit 2f738ca5 by Thomas Preud'homme Committed by Thomas Preud'homme

[ARM] Allow combination of aprofile and rmprofile multilibs

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
parent 77fa3ec1
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.
......
......@@ -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
......
......@@ -24,30 +24,13 @@
# 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
......
# 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
......@@ -24,33 +24,14 @@
# 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
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment