Commit aaf8008c by Richard Earnshaw Committed by Richard Earnshaw

[genmultilib] Update basic multilib configuration


The standard arm-eabi configuration comes with a basic set of multilibs that
are suitable mostly for simple testing of the compiler in various
configurations.  We try to keep the number of libraries build small so
that build times do not become too onerous.

Using the new auto-fp selection code we can now cover all supported
architectures except for those with single-precision only FP units with
just 4 multilibs.  This is done with the rewrite of t-arm-elf.  Now that we
canonicalize -mcpu into suitable -march definitions we don't need to match
CPU names to architectures any more; the driver will do this for us.

I also noticed whilst writing this patch that the existing MULTILIB_DEFAULTS
setting in the compiler was causing more problems than it was worth; and
furthermore was simply wrong if the compiler is ever configured with
--with-mode, --with-float or --with-endian.  The remaining options also
pertained to pre-eabi builds and aren't interesting today either.  It
seemed best to just delete the definition entirely.

	* config/arm/elf.h (MULTILIB_DEFAULTS): Delete.
	* config/arm/t-arm-elf: Rewritten.

From-SVN: r249294
parent 2e17e319
2017-06-16 Richard Earnshaw <rearnsha@arm.com> 2017-06-16 Richard Earnshaw <rearnsha@arm.com>
* config/arm/elf.h (MULTILIB_DEFAULTS): Delete.
* config/arm/t-arm-elf: Rewritten.
2017-06-16 Richard Earnshaw <rearnsha@arm.com>
* config/arm/arm.h (TARGET_HARD_FLOAT): Also check that we * config/arm/arm.h (TARGET_HARD_FLOAT): Also check that we
have some floating-point instructions. have some floating-point instructions.
(TARGET_SOFT_FLOAT): Define as inverse of TARGET_HARD_FLOAT. (TARGET_SOFT_FLOAT): Define as inverse of TARGET_HARD_FLOAT.
......
...@@ -107,10 +107,6 @@ ...@@ -107,10 +107,6 @@
#define TARGET_DEFAULT (MASK_APCS_FRAME) #define TARGET_DEFAULT (MASK_APCS_FRAME)
#endif #endif
#ifndef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS \
{ "marm", "mlittle-endian", "mfloat-abi=soft", "mno-thumb-interwork", "fno-leading-underscore" }
#endif
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
......
...@@ -16,75 +16,110 @@ ...@@ -16,75 +16,110 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
MULTILIB_OPTIONS = marm/mthumb # Build a very basic set of libraries that should cater for most cases.
MULTILIB_DIRNAMES = arm thumb
# Single-precision floating-point is NOT supported; we don't build a
# suitable library for that. Use the rm-profile config in that case.
# PART 1 - Useful groups of options
dp_fpus := vfp vfpv2 vfpv3 vfpv3-fp16 vfpv3-d16 vfpv3-d16-fp16 \
neon neon-vfpv3 neon-fp16 vfpv4 neon-vfpv4 vfpv4-d16 \
fpv5-d16 fp-armv8 neon-fp-armv8 crypto-neon-fp-armv8 \
vfp3
sp_fpus := vfpv3xd vfpv3xd-fp16 fpv4-sp-d16 fpv5-sp-d16
v7a_fps := vfpv3 vfpv3-fp16 vfpv4 simd neon-fp16 neon-vfpv4
v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
neon-fp16 simd
# Not all these permutations exist for all architecture variants, but
# it seems to work ok.
v8_fps := simd fp16 crypto fp16+crypto
# We don't do anything special with these. Pre-v4t probably doesn't work.
all_early_nofp := armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t
all_early_arch := armv5e armv5tej armv6 armv6j armv6k armv6z armv6kz \
armv6zk armv6t2 iwmmxt iwmmxt2
all_v7_a_r := armv7-a armv7ve armv7-r
all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a
# No floating point variants, require thumb1 softfp
all_nofp_t := armv6-m armv6s-m armv8-m.base
all_nofp_t2 := armv7-m
all_sp_only := armv7e-m armv8-m.main
MULTILIB_OPTIONS =
MULTILIB_DIRNAMES =
MULTILIB_EXCEPTIONS = MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES = MULTILIB_MATCHES =
MULTILIB_REUSE =
# PART 2 - multilib build rules
MULTILIB_OPTIONS += marm/mthumb
MULTILIB_DIRNAMES += arm thumb
MULTILIB_OPTIONS += mfpu=auto
MULTILIB_DIRNAMES += autofp
MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
MULTILIB_DIRNAMES += v5te v7
MULTILIB_OPTIONS += mfloat-abi=hard
MULTILIB_DIRNAMES += fpu
# Build a total of 4 library variants (base options plus the following):
MULTILIB_REQUIRED += mthumb
MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
# PART 3 - Match rules
# Map all supported FPUs onto mfpu=auto
MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
mfpu?auto=mfpu?$(FPU))
MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
march?armv5te+fp=march?$(ARCH) \
march?armv5te+fp=march?$(ARCH)+fp)
MULTILIB_MATCHES += march?armv7+fp=march?armv7
MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
march?armv7+fp=march?armv7-a+$(FPARCH))
MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
march?armv7+fp=march?armv7ve+$(FPARCH))
MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
march?armv7+fp=march?$(ARCH) \
march?armv7+fp=march?$(ARCH)+fp)
MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
march?armv7+fp=march?$(ARCH) \
$(foreach FPARCH, $(v8_fps), \
march?armv7+fp=march?$(ARCH)+$(FPARCH)))
MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
march?armv7+fp=march?$(ARCH)+fp.dp)
# PART 4 - Reuse rules
#MULTILIB_OPTIONS += mcpu=fa526/mcpu=fa626/mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
#MULTILIB_DIRNAMES += fa526 fa626 fa606te fa626te fmp626 fa726te MULTILIB_REUSE += mthumb=mthumb/mfpu.auto/march.armv5te+fp
#MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626 MULTILIB_REUSE += mthumb=mthumb/march.armv5te+fp
MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=marm/march.armv5te+fp/mfloat-abi.hard
#MULTILIB_OPTIONS += march=armv7 MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=march.armv5te+fp/mfloat-abi.hard
#MULTILIB_DIRNAMES += thumb2 MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=mfpu.auto/march.armv5te+fp/mfloat-abi.hard
#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
#MULTILIB_MATCHES += march?armv7=march?armv7-a MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
#MULTILIB_MATCHES += march?armv7=march?armv7-r MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
#MULTILIB_MATCHES += march?armv7=march?armv7-m
#MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
#MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
#MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
# Not quite true. We can support hard-vfp calling in Thumb2, but how do we
# express that here? Also, we really need architecture v5e or later
# (mcrr etc).
MULTILIB_OPTIONS += mfloat-abi=hard
MULTILIB_DIRNAMES += fpu
MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
# MULTILIB_OPTIONS += mcpu=ep9312
# MULTILIB_DIRNAMES += ep9312
# MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
#
# MULTILIB_OPTIONS += mlittle-endian/mbig-endian
# MULTILIB_DIRNAMES += le be
# MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
#
# MULTILIB_OPTIONS += mfloat-abi=hard/mfloat-abi=soft
# MULTILIB_DIRNAMES += fpu soft
# MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
#
# MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
# MULTILIB_DIRNAMES += normal interwork
#
# MULTILIB_OPTIONS += fno-leading-underscore/fleading-underscore
# MULTILIB_DIRNAMES += elf under
#
# MULTILIB_OPTIONS += mcpu=arm7
# MULTILIB_DIRNAMES += nofmult
# MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=arm7*
# # Note: the multilib_exceptions matches both -mthumb and
# # -mthumb-interwork
# #
# # We have to match all the arm cpu variants which do not have the
# # multiply instruction and treat them as if the user had specified
# # -mcpu=arm7. Note that in the following the ? is interpreted as
# # an = for the purposes of matching command line options.
# # FIXME: There ought to be a better way to do this.
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7d
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7di
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm70
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm700
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm700i
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm710
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm710c
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7100
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7500
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7500fe
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm6
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm60
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm600
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm610
# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm620
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