]>
Commit | Line | Data |
---|---|---|
8d9254fc | 1 | # Copyright (C) 2016-2020 Free Software Foundation, Inc. |
2f738ca5 TP |
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 ARM architecture. It should not be used in | |
22 | # conjunction with another make file fragment and assumes --with-arch, | |
23 | # --with-cpu, --with-fpu, --with-float, --with-mode have their default | |
24 | # values during the configure step. We enforce this during the | |
25 | # top-level configury. | |
26 | ||
f4c8d44e AV |
27 | s-mlib: $(srcdir)/config/arm/t-multilib $(srcdir)/config/arm/t-aprofile $(srcdir)/config/arm/t-rmprofile |
28 | ||
2f738ca5 TP |
29 | MULTILIB_OPTIONS = |
30 | MULTILIB_DIRNAMES = | |
31 | MULTILIB_EXCEPTIONS = | |
32 | MULTILIB_MATCHES = | |
33 | MULTILIB_REUSE = | |
93aa40fe | 34 | MULTILIB_REQUIRED = |
2f738ca5 TP |
35 | |
36 | comma := , | |
37 | tm_multilib_list := $(subst $(comma), ,$(TM_MULTILIB_CONFIG)) | |
38 | ||
39 | HAS_APROFILE := $(filter aprofile,$(tm_multilib_list)) | |
40 | HAS_RMPROFILE := $(filter rmprofile,$(tm_multilib_list)) | |
41 | ||
93aa40fe RE |
42 | # Produce the combinatorial list of extensions. Where there are |
43 | # multiple permutations for a combination, the ordering is the | |
44 | # selected by the forward ordering of the original list. This matches | |
45 | # the canonical ordering generated by the canonicalizer in the driver. | |
46 | # | |
47 | # For example, | |
48 | # $(call all_feat_combs, a b) | |
49 | # will produce | |
50 | # +a +a+b +b | |
51 | # but will not include | |
52 | # +b+a | |
53 | # The rule is recursive and can be called with any (reasonable) list of | |
54 | # extensions. | |
55 | all_feat_combs = +$(firstword $(1)) \ | |
56 | $(if $(wordlist 2, $(words $(1)), $(1)), \ | |
57 | $(foreach OPT, \ | |
58 | $(call all_feat_combs, \ | |
59 | $(wordlist 2, $(words $(1)), $(1))), \ | |
60 | +$(firstword $(1))$(OPT) $(OPT)),) | |
61 | ||
42093880 | 62 | # Variables used. |
c3f808d3 | 63 | all_early_arch := armv5tej armv6 armv6j armv6k armv6z armv6kz \ |
42093880 | 64 | armv6zk armv6t2 iwmmxt iwmmxt2 |
cab81ec0 | 65 | v7_a_arch_variants := $(call all_feat_combs, mp sec) |
42093880 RE |
66 | v7_a_nosimd_variants := +fp +vfpv3 +vfpv3-d16-fp16 +vfpv3-fp16 +vfpv4-d16 +vfpv4 |
67 | v7_a_simd_variants := +simd +neon-fp16 +neon-vfpv4 | |
f4c8d44e AV |
68 | v7_r_sp_variants := +fp.sp +fp.sp+idiv +vfpv3xd-fp16 +vfpv3xd-fp16+idiv |
69 | v7_r_dp_variants := +fp +fp+idiv +vfpv3-d16-fp16 +vfpv3-d16-fp16+idiv | |
42093880 RE |
70 | v7ve_nosimd_variants := +vfpv3-d16 +vfpv3 +vfpv3-d16-fp16 +vfpv3-fp16 +fp +vfpv4 |
71 | v7ve_vfpv3_simd_variants := +neon +neon-fp16 | |
72 | v7ve_vfpv4_simd_variants := +simd | |
73 | v8_a_nosimd_variants := +crc | |
74 | v8_a_simd_variants := $(call all_feat_combs, simd crypto) | |
75 | v8_1_a_simd_variants := $(call all_feat_combs, simd crypto) | |
f782b667 DZ |
76 | v8_2_a_simd_variants := $(call all_feat_combs, simd fp16 fp16fml crypto dotprod i8mm bf16) |
77 | v8_4_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16) | |
78 | v8_5_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16) | |
79 | v8_6_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16) | |
9029d342 | 80 | v8_r_nosimd_variants := +crc |
42093880 | 81 | |
2f738ca5 TP |
82 | ifneq (,$(HAS_APROFILE)) |
83 | include $(srcdir)/config/arm/t-aprofile | |
84 | endif | |
85 | ifneq (,$(HAS_RMPROFILE)) | |
86 | include $(srcdir)/config/arm/t-rmprofile | |
87 | endif | |
88 | SEP := $(and $(HAS_APROFILE),$(HAS_RMPROFILE),/) | |
89 | ||
90 | ||
42093880 RE |
91 | MULTILIB_OPTIONS += marm/mthumb |
92 | MULTILIB_DIRNAMES += arm thumb | |
93 | ||
f4c8d44e AV |
94 | MULTILIB_OPTIONS += march=armv5te+fp/march=armv7/march=armv7+fp/march=armv7-r+fp.sp/$(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM) |
95 | MULTILIB_DIRNAMES += v5te v7 v7+fp v7-r+fp.sp $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM) | |
42093880 RE |
96 | |
97 | MULTILIB_OPTIONS += mfloat-abi=soft/mfloat-abi=softfp/mfloat-abi=hard | |
98 | MULTILIB_DIRNAMES += nofp softfp hard | |
99 | ||
100 | MULTILIB_REQUIRED += mthumb/mfloat-abi=soft | |
101 | MULTILIB_REQUIRED += marm/march=armv5te+fp/mfloat-abi=softfp | |
102 | MULTILIB_REQUIRED += marm/march=armv5te+fp/mfloat-abi=hard | |
103 | ||
104 | MULTILIB_REQUIRED += mthumb/march=armv7/mfloat-abi=soft | |
105 | MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=softfp | |
106 | MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=hard | |
107 | ||
f4c8d44e AV |
108 | MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=softfp |
109 | MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=hard | |
110 | ||
111 | # Map v7-r with double precision down onto common v7 code. | |
42093880 RE |
112 | MULTILIB_MATCHES += march?armv7=march?armv7-r |
113 | MULTILIB_MATCHES += march?armv7=march?armv7-r+idiv | |
f4c8d44e AV |
114 | MULTILIB_MATCHES += $(foreach ARCH, $(v7_r_dp_variants), \ |
115 | march?armv7+fp=march?armv7-r$(ARCH)) | |
116 | ||
117 | # Map v7-r single precision variants to v7-r with single precision. | |
118 | MULTILIB_MATCHES += $(foreach ARCH, \ | |
119 | $(filter-out +fp.sp, $(v7_r_sp_variants)), \ | |
120 | march?armv7-r+fp.sp=march?armv7-r$(ARCH)) | |
42093880 RE |
121 | |
122 | MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \ | |
123 | march?armv5te+fp=march?$(ARCH)+fp) | |
f4c8d44e | 124 | # Map v8-r down onto common v7 code or v7-r sp. |
9029d342 TP |
125 | MULTILIB_MATCHES += march?armv7=march?armv8-r |
126 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_r_nosimd_variants), \ | |
127 | march?armv7=march?armv8-r$(ARCH)) | |
128 | MULTILIB_MATCHES += $(foreach ARCH,+simd +crypto, \ | |
129 | march?armv7+fp=march?armv8-r$(ARCH) \ | |
130 | march?armv7+fp=march?armv8-r+crc$(ARCH)) | |
f4c8d44e AV |
131 | MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+fp.sp |
132 | MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+crc+fp.sp | |
42093880 RE |
133 | |
134 | ifeq (,$(HAS_APROFILE)) | |
135 | # Map all v7-a | |
136 | MULTILIB_MATCHES += march?armv7=march?armv7-a | |
137 | MULTILIB_MATCHES += $(foreach ARCH, $(v7_a_nosimd_variants) $(v7_a_simd_variants), \ | |
138 | march?armv7+fp=march?armv7-a$(ARCH)) | |
139 | ||
140 | MULTILIB_MATCHES += march?armv7=march?armv7ve | |
141 | ||
142 | # ARMv7ve FP/SIMD variants: map down to v7+fp | |
143 | MULTILIB_MATCHES += $(foreach ARCH, $(v7ve_nosimd_variants) $(v7ve_vfpv3_simd_variants) $(v7ve_vfpv4_simd_variants), \ | |
144 | march?armv7+fp=march?armv7ve$(ARCH)) | |
145 | ||
146 | # ARMv8 | |
147 | MULTILIB_MATCHES += march?armv7=march?armv8-a | |
148 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_a_nosimd_variants), \ | |
149 | march?armv7=march?armv8-a$(ARCH)) | |
150 | ||
151 | # ARMv8 with SIMD | |
152 | MULTILIB_MATCHES += march?armv7+fp=march?armv8-a+crc+simd \ | |
153 | $(foreach ARCH, $(v8_a_simd_variants), \ | |
154 | march?armv7+fp=march?armv8-a$(ARCH) \ | |
155 | march?armv7+fp=march?armv8-a+crc$(ARCH)) | |
156 | ||
157 | # Baseline v8.1-a | |
158 | MULTILIB_MATCHES += march?armv7=march?armv8.1-a | |
159 | ||
160 | # Map all v8.1-a SIMD variants | |
161 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_1_a_simd_variants), \ | |
162 | march?armv7+fp=march?armv8.1-a$(ARCH)) | |
163 | ||
164 | # Baseline v8.2-a: map down to baseline v8-a | |
165 | MULTILIB_MATCHES += march?armv7=march?armv8.2-a | |
166 | ||
a00a4222 KT |
167 | # Baseline v8.3-a: map down to baseline v8-a |
168 | MULTILIB_MATCHES += march?armv7=march?armv8.3-a | |
169 | ||
170 | # Map all v8.2-a SIMD variants. v8.3-a SIMD variants have the same mappings | |
42093880 | 171 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_2_a_simd_variants), \ |
a00a4222 KT |
172 | march?armv7+fp=march?armv8.2-a$(ARCH) \ |
173 | march?armv7+fp=march?armv8.3-a$(ARCH)) | |
42093880 | 174 | |
946c6c45 KT |
175 | # Baseline v8.4-a: map down to baseline v8-a |
176 | MULTILIB_MATCHES += march?armv7=march?armv8.4-a | |
177 | ||
178 | # Map all v8.4-a SIMD variants | |
179 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_4_a_simd_variants), \ | |
180 | march?armv7+fp=march?armv8.4-a$(ARCH)) | |
181 | ||
ae78a89f SD |
182 | # Baseline v8.5-a: map down to baseline v8-a |
183 | MULTILIB_MATCHES += march?armv7=march?armv8.5-a | |
184 | ||
185 | # Map all v8.5-a SIMD variants | |
186 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_5_a_simd_variants), \ | |
187 | march?armv7+fp=march?armv8.5-a$(ARCH)) | |
188 | ||
f782b667 DZ |
189 | # Baseline v8.6-a: map down to baseline v8-a |
190 | MULTILIB_MATCHES += march?armv7=march?armv8.6-a | |
191 | ||
192 | # Map all v8.6-a SIMD variants | |
193 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_6_a_simd_variants), \ | |
194 | march?armv7+fp=march?armv8.6-a$(ARCH)) | |
195 | ||
8d106dd5 RE |
196 | endif # Not APROFILE. |
197 | ||
42093880 RE |
198 | # Use Thumb libraries for everything. |
199 | ||
200 | MULTILIB_REUSE += mthumb/march.armv7/mfloat-abi.soft=marm/march.armv7/mfloat-abi.soft | |
2f738ca5 | 201 | |
42093880 | 202 | MULTILIB_REUSE += $(foreach ABI, hard softfp, \ |
f4c8d44e | 203 | $(foreach ARCH, armv7+fp armv7-r+fp\.sp, \ |
42093880 | 204 | mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI))) |
2f738ca5 | 205 | |
42093880 RE |
206 | # Softfp but no FP, use the soft-float libraries. |
207 | MULTILIB_REUSE += $(foreach MODE, arm thumb, \ | |
208 | $(foreach ARCH, armv7, \ | |
209 | mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp)) | |
2f738ca5 | 210 |