1# Copyright (C) 2012-2021 Free Software Foundation, Inc. 2# 3# This file is part of GCC. 4# 5# GCC is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 3, or (at your option) 8# any later version. 9# 10# GCC is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with GCC; see the file COPYING3. If not see 17# <http://www.gnu.org/licenses/>. 18 19# This is a target makefile fragment that attempts to get 20# multilibs built for the range of CPU's, FPU's and ABI's that 21# are relevant for the A-profile architecture. It should 22# not be used in conjunction with another make file fragment and 23# assumes --with-arch, --with-cpu, --with-fpu, --with-float, --with-mode 24# have their default values during the configure step. We enforce 25# this during the top-level configury. 26 27# Arch and FPU variants to build libraries with 28 29MULTI_ARCH_OPTS_A = march=armv7-a/march=armv7-a+fp/march=armv7-a+simd/march=armv7ve+simd/march=armv8-a/march=armv8-a+simd/march=armv9-a/march=armv9-a+simd 30MULTI_ARCH_DIRS_A = v7-a v7-a+fp v7-a+simd v7ve+simd v8-a v8-a+simd v9-a v9-a+simd 31 32# ARMv7-A - build nofp, fp-d16 and SIMD variants 33 34MULTILIB_REQUIRED += mthumb/march=armv7-a/mfloat-abi=soft 35MULTILIB_REQUIRED += mthumb/march=armv7-a+fp/mfloat-abi=hard 36MULTILIB_REQUIRED += mthumb/march=armv7-a+fp/mfloat-abi=softfp 37MULTILIB_REQUIRED += mthumb/march=armv7-a+simd/mfloat-abi=hard 38MULTILIB_REQUIRED += mthumb/march=armv7-a+simd/mfloat-abi=softfp 39 40# ARMv7VE - only build a SIMD (+VFPv4) variant. 41MULTILIB_REQUIRED += mthumb/march=armv7ve+simd/mfloat-abi=hard 42MULTILIB_REQUIRED += mthumb/march=armv7ve+simd/mfloat-abi=softfp 43 44# ARMv8-A - build nofp and SIMD variants. 45MULTILIB_REQUIRED += mthumb/march=armv8-a/mfloat-abi=soft 46MULTILIB_REQUIRED += mthumb/march=armv8-a+simd/mfloat-abi=hard 47MULTILIB_REQUIRED += mthumb/march=armv8-a+simd/mfloat-abi=softfp 48 49# Armv9-A - build nofp and SIMD variants. 50MULTILIB_REQUIRED += mthumb/march=armv9-a/mfloat-abi=soft 51MULTILIB_REQUIRED += mthumb/march=armv9-a+simd/mfloat-abi=hard 52MULTILIB_REQUIRED += mthumb/march=armv9-a+simd/mfloat-abi=softfp 53 54# Matches 55 56# Arch Matches 57# Map all basic v7-a arch extensions to v7-a 58MULTILIB_MATCHES += $(foreach ARCH, $(v7_a_arch_variants), \ 59 march?armv7-a=march?armv7-a$(ARCH)) 60 61# Map all v7-a FP variants to vfpv3-d16 (+fp) 62MULTILIB_MATCHES += $(foreach ARCH, $(filter-out +fp, $(v7_a_nosimd_variants)), \ 63 march?armv7-a+fp=march?armv7-a$(ARCH)) 64 65MULTILIB_MATCHES += $(foreach ARCHVAR, $(v7_a_arch_variants), \ 66 $(foreach ARCH, $(v7_a_nosimd_variants), \ 67 march?armv7-a+fp=march?armv7-a$(ARCHVAR)$(ARCH))) 68 69# Map all v7-a SIMD variants to neon-vfpv3 (+simd) 70MULTILIB_MATCHES += $(foreach ARCH, $(filter-out +simd, $(v7_a_simd_variants)), \ 71 march?armv7-a+simd=march?armv7-a$(ARCH)) 72 73MULTILIB_MATCHES += $(foreach ARCHVAR, $(v7_a_arch_variants), \ 74 $(foreach ARCH, $(v7_a_simd_variants), \ 75 march?armv7-a+simd=march?armv7-a$(ARCHVAR)$(ARCH))) 76 77# Neither FP nor SIMD: map v7ve to v7-a 78MULTILIB_MATCHES += march?armv7-a=march?armv7ve 79 80# ARMv7ve FP-only variants: map down to v7-a+fp 81MULTILIB_MATCHES += $(foreach ARCH, $(v7ve_nosimd_variants), \ 82 march?armv7-a+fp=march?armv7ve$(ARCH)) 83 84# ARMv7ve with SIMD, but SIMD is less capable than the default - map down to v7-a+simd 85MULTILIB_MATCHES += $(foreach ARCH, $(v7ve_vfpv3_simd_variants), \ 86 march?armv7-a+simd=march?armv7ve$(ARCH)) 87 88# ARMv8 without SIMD: map down to base architecture 89MULTILIB_MATCHES += $(foreach ARCH, $(v8_a_nosimd_variants), \ 90 march?armv8-a=march?armv8-a$(ARCH)) 91 92# ARMv8 with SIMD: map down to base arch + simd 93MULTILIB_MATCHES += march?armv8-a+simd=march?armv8-a+crc+simd \ 94 $(foreach ARCH, $(filter-out +simd, $(v8_a_simd_variants)), \ 95 march?armv8-a+simd=march?armv8-a$(ARCH) \ 96 march?armv8-a+simd=march?armv8-a+crc$(ARCH)) 97 98# Baseline v8.1-a: map down to baseline v8-a 99MULTILIB_MATCHES += march?armv8-a=march?armv8.1-a 100 101# Map all v8.1-a SIMD variants to v8-a+simd 102MULTILIB_MATCHES += $(foreach ARCH, $(v8_1_a_simd_variants), \ 103 march?armv8-a+simd=march?armv8.1-a$(ARCH)) 104 105# Baseline v8.2-a: map down to baseline v8-a 106MULTILIB_MATCHES += march?armv8-a=march?armv8.2-a 107 108# Baseline v8.3-a: map down to baseline v8-a 109MULTILIB_MATCHES += march?armv8-a=march?armv8.3-a 110 111# Map all v8.2-a and v8.3-a SIMD variants to v8-a+simd 112MULTILIB_MATCHES += $(foreach ARCH, $(v8_2_a_simd_variants), \ 113 march?armv8-a+simd=march?armv8.2-a$(ARCH) \ 114 march?armv8-a+simd=march?armv8.3-a$(ARCH)) 115 116# Baseline v8.4-a: map down to baseline v8-a 117MULTILIB_MATCHES += march?armv8-a=march?armv8.4-a 118 119# Map all v8.4-a SIMD variants to v8-a+simd 120MULTILIB_MATCHES += $(foreach ARCH, $(v8_4_a_simd_variants), \ 121 march?armv8-a+simd=march?armv8.4-a$(ARCH)) 122 123# Baseline v8.5-a: map down to baseline v8-a 124MULTILIB_MATCHES += march?armv8-a=march?armv8.5-a 125 126# Map all v8.5-a SIMD variants to v8-a+simd 127MULTILIB_MATCHES += $(foreach ARCH, $(v8_5_a_simd_variants), \ 128 march?armv8-a+simd=march?armv8.5-a$(ARCH)) 129 130# Baseline v8.6-a: map down to baseline v8-a 131MULTILIB_MATCHES += march?armv8-a=march?armv8.6-a 132 133# Map all v8.6-a SIMD variants to v8-a+simd 134MULTILIB_MATCHES += $(foreach ARCH, $(v8_6_a_simd_variants), \ 135 march?armv8-a+simd=march?armv8.6-a$(ARCH)) 136 137# Armv9 without SIMD: map down to base architecture 138MULTILIB_MATCHES += $(foreach ARCH, $(v9_a_nosimd_variants), \ 139 march?armv9-a=march?armv9-a$(ARCH)) 140 141# Armv9 with SIMD: map down to base arch + simd 142MULTILIB_MATCHES += march?armv9-a+simd=march?armv9-a+crc+simd \ 143 $(foreach ARCH, $(filter-out +simd, $(v9_a_simd_variants)), \ 144 march?armv9-a+simd=march?armv9-a$(ARCH) \ 145 march?armv9-a+simd=march?armv9-a+crc$(ARCH)) 146 147# Use Thumb libraries for everything. 148 149MULTILIB_REUSE += mthumb/march.armv7-a/mfloat-abi.soft=marm/march.armv7-a/mfloat-abi.soft 150 151MULTILIB_REUSE += mthumb/march.armv8-a/mfloat-abi.soft=marm/march.armv8-a/mfloat-abi.soft 152 153MULTILIB_REUSE += mthumb/march.armv9-a/mfloat-abi.soft=marm/march.armv9-a/mfloat-abi.soft 154 155MULTILIB_REUSE += $(foreach ABI, hard softfp, \ 156 $(foreach ARCH, armv7-a+fp armv7-a+simd armv7ve+simd armv8-a+simd armv9-a+simd, \ 157 mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI))) 158 159# Softfp but no FP, use the soft-float libraries. 160MULTILIB_REUSE += $(foreach MODE, arm thumb, \ 161 $(foreach ARCH, armv7-a armv8-a armv9-a, \ 162 mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp)) 163