summaryrefslogtreecommitdiff
path: root/gcc/config/arm/t-aprofile
blob: fe2ec88d92de55813816deabd9da461c86c6c7e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Copyright (C) 2012-2022 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
# <http://www.gnu.org/licenses/>.

# 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 A-profile 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.

# Arch and FPU variants to build libraries with

MULTI_ARCH_OPTS_A       = march=armv7-a/march=armv7-a+fp/march=armv7-a+simd/march=armv7ve+simd/march=armv8-a/march=armv8-a+simd
MULTI_ARCH_DIRS_A       = v7-a v7-a+fp v7-a+simd v7ve+simd v8-a v8-a+simd

# ARMv7-A - build nofp, fp-d16 and SIMD variants

MULTILIB_REQUIRED	+= mthumb/march=armv7-a/mfloat-abi=soft
MULTILIB_REQUIRED	+= mthumb/march=armv7-a+fp/mfloat-abi=hard
MULTILIB_REQUIRED	+= mthumb/march=armv7-a+fp/mfloat-abi=softfp
MULTILIB_REQUIRED	+= mthumb/march=armv7-a+simd/mfloat-abi=hard
MULTILIB_REQUIRED	+= mthumb/march=armv7-a+simd/mfloat-abi=softfp

# ARMv7VE - only build a SIMD (+VFPv4) variant.
MULTILIB_REQUIRED	+= mthumb/march=armv7ve+simd/mfloat-abi=hard
MULTILIB_REQUIRED	+= mthumb/march=armv7ve+simd/mfloat-abi=softfp

# ARMv8-A - build nofp and SIMD variants.
MULTILIB_REQUIRED	+= mthumb/march=armv8-a/mfloat-abi=soft
MULTILIB_REQUIRED	+= mthumb/march=armv8-a+simd/mfloat-abi=hard
MULTILIB_REQUIRED	+= mthumb/march=armv8-a+simd/mfloat-abi=softfp

# Matches

# Arch Matches
# Map all basic v7-a arch extensions to v7-a
MULTILIB_MATCHES	+= $(foreach ARCH, $(v7_a_arch_variants), \
			     march?armv7-a=march?armv7-a$(ARCH))

# Map all v7-a FP variants to vfpv3-d16 (+fp)
MULTILIB_MATCHES	+= $(foreach ARCH, $(filter-out +fp, $(v7_a_nosimd_variants)), \
			     march?armv7-a+fp=march?armv7-a$(ARCH))

MULTILIB_MATCHES	+= $(foreach ARCHVAR, $(v7_a_arch_variants), \
			     $(foreach ARCH, $(v7_a_nosimd_variants), \
			       march?armv7-a+fp=march?armv7-a$(ARCHVAR)$(ARCH)))

# Map all v7-a SIMD variants to neon-vfpv3 (+simd)
MULTILIB_MATCHES	+= $(foreach ARCH, $(filter-out +simd, $(v7_a_simd_variants)), \
			     march?armv7-a+simd=march?armv7-a$(ARCH))

MULTILIB_MATCHES	+= $(foreach ARCHVAR, $(v7_a_arch_variants), \
			     $(foreach ARCH, $(v7_a_simd_variants), \
			       march?armv7-a+simd=march?armv7-a$(ARCHVAR)$(ARCH)))

# Neither FP nor SIMD: map v7ve to v7-a
MULTILIB_MATCHES	+= march?armv7-a=march?armv7ve

# ARMv7ve FP-only variants: map down to v7-a+fp
MULTILIB_MATCHES	+= $(foreach ARCH, $(v7ve_nosimd_variants), \
			     march?armv7-a+fp=march?armv7ve$(ARCH))

# ARMv7ve with SIMD, but SIMD is less capable than the default - map down to v7-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v7ve_vfpv3_simd_variants), \
			     march?armv7-a+simd=march?armv7ve$(ARCH))

# ARMv8 without SIMD: map down to base architecture
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_a_nosimd_variants), \
			     march?armv8-a=march?armv8-a$(ARCH))

# ARMv8 with SIMD: map down to base arch + simd
MULTILIB_MATCHES	+= march?armv8-a+simd=march?armv8-a+crc+simd \
			   $(foreach ARCH, $(filter-out +simd, $(v8_a_simd_variants)), \
			     march?armv8-a+simd=march?armv8-a$(ARCH) \
			     march?armv8-a+simd=march?armv8-a+crc$(ARCH))

# Baseline v8.1-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.1-a

# Map all v8.1-a SIMD variants to v8-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_1_a_simd_variants), \
			     march?armv8-a+simd=march?armv8.1-a$(ARCH))

# Baseline v8.2-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.2-a

# Baseline v8.3-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.3-a

# Map all v8.2-a and v8.3-a SIMD variants to v8-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_2_a_simd_variants), \
			     march?armv8-a+simd=march?armv8.2-a$(ARCH) \
			     march?armv8-a+simd=march?armv8.3-a$(ARCH))

# Baseline v8.4-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.4-a

# Map all v8.4-a SIMD variants to v8-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_4_a_simd_variants), \
			     march?armv8-a+simd=march?armv8.4-a$(ARCH))

# Baseline v8.5-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.5-a

# Map all v8.5-a SIMD variants to v8-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_5_a_simd_variants), \
			     march?armv8-a+simd=march?armv8.5-a$(ARCH))

# Baseline v8.6-a: map down to baseline v8-a
MULTILIB_MATCHES	+= march?armv8-a=march?armv8.6-a

# Map all v8.6-a SIMD variants to v8-a+simd
MULTILIB_MATCHES	+= $(foreach ARCH, $(v8_6_a_simd_variants), \
			     march?armv8-a+simd=march?armv8.6-a$(ARCH))

# Armv9 without SIMD: map down to base architecture
MULTILIB_MATCHES    += march?armv8-a=march?armv9-a
# No variants without SIMD.

# Armv9 with SIMD: map down to base arch + simd
MULTILIB_MATCHES    += $(foreach ARCH, $(v9_a_simd_variants), \
			     march?armv8-a+simd=march?armv9-a$(ARCH))

# Use Thumb libraries for everything.

MULTILIB_REUSE		+= mthumb/march.armv7-a/mfloat-abi.soft=marm/march.armv7-a/mfloat-abi.soft

MULTILIB_REUSE		+= mthumb/march.armv8-a/mfloat-abi.soft=marm/march.armv8-a/mfloat-abi.soft

MULTILIB_REUSE		+= $(foreach ABI, hard softfp, \
			     $(foreach ARCH, armv7-a+fp armv7-a+simd armv7ve+simd armv8-a+simd, \
			       mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI)))

# Softfp but no FP, use the soft-float libraries.
MULTILIB_REUSE		+= $(foreach MODE, arm thumb, \
			     $(foreach ARCH, armv7-a armv8-a, \
			       mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp))