# Copyright (C) 2016-2017 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 # . # 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 = # 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). # Options to build libraries with 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 # Option combinations to build library with # Default CPU/Arch MULTILIB_REQUIRED += mthumb MULTILIB_REQUIRED += mfloat-abi=hard # ARMv6-M MULTILIB_REQUIRED += mthumb/march=armv6s-m # ARMv8-M Baseline MULTILIB_REQUIRED += mthumb/march=armv8-m.base # ARMv7-M MULTILIB_REQUIRED += mthumb/march=armv7-m # ARMv7E-M MULTILIB_REQUIRED += mthumb/march=armv7e-m MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv4-sp-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv4-sp-d16/mfloat-abi=hard MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-d16/mfloat-abi=hard MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-sp-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv7e-m/mfpu=fpv5-sp-d16/mfloat-abi=hard # ARMv8-M Mainline MULTILIB_REQUIRED += mthumb/march=armv8-m.main MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-d16/mfloat-abi=hard MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-sp-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv8-m.main/mfpu=fpv5-sp-d16/mfloat-abi=hard # ARMv7-R as well as ARMv7-A and ARMv8-A if aprofile was not specified MULTILIB_REQUIRED += mthumb/march=armv7 MULTILIB_REQUIRED += mthumb/march=armv7/mfpu=vfpv3-d16/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv7/mfpu=vfpv3-d16/mfloat-abi=hard # Matches # CPU Matches MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0 MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0.small-multiply MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus.small-multiply MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1 MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1.small-multiply MULTILIB_MATCHES += march?armv7-m=mcpu?cortex-m3 MULTILIB_MATCHES += march?armv7e-m=mcpu?cortex-m4 MULTILIB_MATCHES += march?armv7e-m=mcpu?cortex-m7 MULTILIB_MATCHES += march?armv8-m.base=mcpu?cortex-m23 MULTILIB_MATCHES += march?armv8-m.main=mcpu?cortex-m33 MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4 MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4f MULTILIB_MATCHES += march?armv7=mcpu?cortex-r5 MULTILIB_MATCHES += march?armv7=mcpu?cortex-r7 MULTILIB_MATCHES += march?armv7=mcpu?cortex-r8 MULTILIB_MATCHES += march?armv7=mcpu?marvell-pj4 MULTILIB_MATCHES += march?armv7=mcpu?generic-armv7-a MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a9 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a5 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a7 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a15 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a12 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a17 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a15.cortex-a7 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a17.cortex-a7 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a32 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a35 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a53 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a57 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a57.cortex-a53 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a72 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a72.cortex-a53 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a35 MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a53 MULTILIB_MATCHES += march?armv7=mcpu?exynos-m1 MULTILIB_MATCHES += march?armv7=mcpu?xgene1 # Arch Matches MULTILIB_MATCHES += march?armv6s-m=march?armv6-m MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp MULTILIB_MATCHES += march?armv7=march?armv7-r ifeq (,$(HAS_APROFILE)) MULTILIB_MATCHES += march?armv7=march?armv7-a MULTILIB_MATCHES += march?armv7=march?armv7ve MULTILIB_MATCHES += march?armv7=march?armv8-a MULTILIB_MATCHES += march?armv7=march?armv8-a+crc MULTILIB_MATCHES += march?armv7=march?armv8.1-a MULTILIB_MATCHES += march?armv7=march?armv8.1-a+crc MULTILIB_MATCHES += march?armv7=march?armv8.2-a MULTILIB_MATCHES += march?armv7=march?armv8.2-a+fp16 endif # FPU matches ifeq (,$(HAS_APROFILE)) MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-fp16 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon-fp16 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv4 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?vfpv4-d16 MULTILIB_MATCHES += mfpu?vfpv3-d16=mfpu?neon-vfpv4 MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?fp-armv8 MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?neon-fp-armv8 MULTILIB_MATCHES += mfpu?fpv5-d16=mfpu?crypto-neon-fp-armv8 endif # We map all requests for ARMv7-R or ARMv7-A in ARM mode to Thumb mode and # any FPU to VFPv3-d16 if possible. MULTILIB_REUSE += mthumb/march.armv7=march.armv7 MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7/mfpu.fpv5-d16/mfloat-abi.softfp MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7/mfpu.fpv5-d16/mfloat-abi.hard MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7/mfpu.fpv5-d16/mfloat-abi.softfp MULTILIB_REUSE += mthumb/march.armv7/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7/mfpu.fpv5-d16/mfloat-abi.hard