]>
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) | |
06e95715 | 76 | v8_2_a_simd_variants := $(call all_feat_combs, simd fp16 fp16fml crypto dotprod) |
946c6c45 | 77 | v8_4_a_simd_variants := $(call all_feat_combs, simd fp16 crypto) |
ae78a89f | 78 | v8_5_a_simd_variants := $(call all_feat_combs, simd fp16 crypto) |
9029d342 | 79 | v8_r_nosimd_variants := +crc |
42093880 | 80 | |
2f738ca5 TP |
81 | ifneq (,$(HAS_APROFILE)) |
82 | include $(srcdir)/config/arm/t-aprofile | |
83 | endif | |
84 | ifneq (,$(HAS_RMPROFILE)) | |
85 | include $(srcdir)/config/arm/t-rmprofile | |
86 | endif | |
87 | SEP := $(and $(HAS_APROFILE),$(HAS_RMPROFILE),/) | |
88 | ||
89 | ||
42093880 RE |
90 | MULTILIB_OPTIONS += marm/mthumb |
91 | MULTILIB_DIRNAMES += arm thumb | |
92 | ||
f4c8d44e AV |
93 | MULTILIB_OPTIONS += march=armv5te+fp/march=armv7/march=armv7+fp/march=armv7-r+fp.sp/$(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM) |
94 | MULTILIB_DIRNAMES += v5te v7 v7+fp v7-r+fp.sp $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM) | |
42093880 RE |
95 | |
96 | MULTILIB_OPTIONS += mfloat-abi=soft/mfloat-abi=softfp/mfloat-abi=hard | |
97 | MULTILIB_DIRNAMES += nofp softfp hard | |
98 | ||
99 | MULTILIB_REQUIRED += mthumb/mfloat-abi=soft | |
100 | MULTILIB_REQUIRED += marm/march=armv5te+fp/mfloat-abi=softfp | |
101 | MULTILIB_REQUIRED += marm/march=armv5te+fp/mfloat-abi=hard | |
102 | ||
103 | MULTILIB_REQUIRED += mthumb/march=armv7/mfloat-abi=soft | |
104 | MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=softfp | |
105 | MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=hard | |
106 | ||
f4c8d44e AV |
107 | MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=softfp |
108 | MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=hard | |
109 | ||
110 | # Map v7-r with double precision down onto common v7 code. | |
42093880 RE |
111 | MULTILIB_MATCHES += march?armv7=march?armv7-r |
112 | MULTILIB_MATCHES += march?armv7=march?armv7-r+idiv | |
f4c8d44e AV |
113 | MULTILIB_MATCHES += $(foreach ARCH, $(v7_r_dp_variants), \ |
114 | march?armv7+fp=march?armv7-r$(ARCH)) | |
115 | ||
116 | # Map v7-r single precision variants to v7-r with single precision. | |
117 | MULTILIB_MATCHES += $(foreach ARCH, \ | |
118 | $(filter-out +fp.sp, $(v7_r_sp_variants)), \ | |
119 | march?armv7-r+fp.sp=march?armv7-r$(ARCH)) | |
42093880 RE |
120 | |
121 | MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \ | |
122 | march?armv5te+fp=march?$(ARCH)+fp) | |
f4c8d44e | 123 | # Map v8-r down onto common v7 code or v7-r sp. |
9029d342 TP |
124 | MULTILIB_MATCHES += march?armv7=march?armv8-r |
125 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_r_nosimd_variants), \ | |
126 | march?armv7=march?armv8-r$(ARCH)) | |
127 | MULTILIB_MATCHES += $(foreach ARCH,+simd +crypto, \ | |
128 | march?armv7+fp=march?armv8-r$(ARCH) \ | |
129 | march?armv7+fp=march?armv8-r+crc$(ARCH)) | |
f4c8d44e AV |
130 | MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+fp.sp |
131 | MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+crc+fp.sp | |
42093880 RE |
132 | |
133 | ifeq (,$(HAS_APROFILE)) | |
134 | # Map all v7-a | |
135 | MULTILIB_MATCHES += march?armv7=march?armv7-a | |
136 | MULTILIB_MATCHES += $(foreach ARCH, $(v7_a_nosimd_variants) $(v7_a_simd_variants), \ | |
137 | march?armv7+fp=march?armv7-a$(ARCH)) | |
138 | ||
139 | MULTILIB_MATCHES += march?armv7=march?armv7ve | |
140 | ||
141 | # ARMv7ve FP/SIMD variants: map down to v7+fp | |
142 | MULTILIB_MATCHES += $(foreach ARCH, $(v7ve_nosimd_variants) $(v7ve_vfpv3_simd_variants) $(v7ve_vfpv4_simd_variants), \ | |
143 | march?armv7+fp=march?armv7ve$(ARCH)) | |
144 | ||
145 | # ARMv8 | |
146 | MULTILIB_MATCHES += march?armv7=march?armv8-a | |
147 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_a_nosimd_variants), \ | |
148 | march?armv7=march?armv8-a$(ARCH)) | |
149 | ||
150 | # ARMv8 with SIMD | |
151 | MULTILIB_MATCHES += march?armv7+fp=march?armv8-a+crc+simd \ | |
152 | $(foreach ARCH, $(v8_a_simd_variants), \ | |
153 | march?armv7+fp=march?armv8-a$(ARCH) \ | |
154 | march?armv7+fp=march?armv8-a+crc$(ARCH)) | |
155 | ||
156 | # Baseline v8.1-a | |
157 | MULTILIB_MATCHES += march?armv7=march?armv8.1-a | |
158 | ||
159 | # Map all v8.1-a SIMD variants | |
160 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_1_a_simd_variants), \ | |
161 | march?armv7+fp=march?armv8.1-a$(ARCH)) | |
162 | ||
163 | # Baseline v8.2-a: map down to baseline v8-a | |
164 | MULTILIB_MATCHES += march?armv7=march?armv8.2-a | |
165 | ||
a00a4222 KT |
166 | # Baseline v8.3-a: map down to baseline v8-a |
167 | MULTILIB_MATCHES += march?armv7=march?armv8.3-a | |
168 | ||
169 | # Map all v8.2-a SIMD variants. v8.3-a SIMD variants have the same mappings | |
42093880 | 170 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_2_a_simd_variants), \ |
a00a4222 KT |
171 | march?armv7+fp=march?armv8.2-a$(ARCH) \ |
172 | march?armv7+fp=march?armv8.3-a$(ARCH)) | |
42093880 | 173 | |
946c6c45 KT |
174 | # Baseline v8.4-a: map down to baseline v8-a |
175 | MULTILIB_MATCHES += march?armv7=march?armv8.4-a | |
176 | ||
177 | # Map all v8.4-a SIMD variants | |
178 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_4_a_simd_variants), \ | |
179 | march?armv7+fp=march?armv8.4-a$(ARCH)) | |
180 | ||
ae78a89f SD |
181 | # Baseline v8.5-a: map down to baseline v8-a |
182 | MULTILIB_MATCHES += march?armv7=march?armv8.5-a | |
183 | ||
184 | # Map all v8.5-a SIMD variants | |
185 | MULTILIB_MATCHES += $(foreach ARCH, $(v8_5_a_simd_variants), \ | |
186 | march?armv7+fp=march?armv8.5-a$(ARCH)) | |
187 | ||
8d106dd5 RE |
188 | endif # Not APROFILE. |
189 | ||
42093880 RE |
190 | # Use Thumb libraries for everything. |
191 | ||
192 | MULTILIB_REUSE += mthumb/march.armv7/mfloat-abi.soft=marm/march.armv7/mfloat-abi.soft | |
2f738ca5 | 193 | |
42093880 | 194 | MULTILIB_REUSE += $(foreach ABI, hard softfp, \ |
f4c8d44e | 195 | $(foreach ARCH, armv7+fp armv7-r+fp\.sp, \ |
42093880 | 196 | mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI))) |
2f738ca5 | 197 | |
42093880 RE |
198 | # Softfp but no FP, use the soft-float libraries. |
199 | MULTILIB_REUSE += $(foreach MODE, arm thumb, \ | |
200 | $(foreach ARCH, armv7, \ | |
201 | mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp)) | |
2f738ca5 | 202 |