2 config BR2_ARM_CPU_HAS_NEON
5 # for some cores
, NEON support is optional
6 config BR2_ARM_CPU_MAYBE_HAS_NEON
9 # for some cores
, VFPv2 is optional
10 config BR2_ARM_CPU_MAYBE_HAS_VFPV2
13 config BR2_ARM_CPU_HAS_VFPV2
16 # for some cores
, VFPv3 is optional
17 config BR2_ARM_CPU_MAYBE_HAS_VFPV3
19 select BR2_ARM_CPU_MAYBE_HAS_VFPV2
21 config BR2_ARM_CPU_HAS_VFPV3
23 select BR2_ARM_CPU_HAS_VFPV2
25 # for some cores
, VFPv4 is optional
26 config BR2_ARM_CPU_MAYBE_HAS_VFPV4
28 select BR2_ARM_CPU_MAYBE_HAS_VFPV3
30 config BR2_ARM_CPU_HAS_VFPV4
32 select BR2_ARM_CPU_HAS_VFPV3
34 config BR2_ARM_CPU_HAS_THUMB
37 config BR2_ARM_CPU_HAS_THUMB2
41 prompt
"Target Architecture Variant"
42 depends on BR2_arm || BR2_armeb
45 Specific CPU variant to use
49 select BR2_ARM_CPU_HAS_THUMB
52 select BR2_ARM_CPU_HAS_THUMB
55 select BR2_ARM_CPU_MAYBE_HAS_VFPV2
56 select BR2_ARM_CPU_HAS_THUMB
59 select BR2_ARM_CPU_HAS_THUMB
60 config BR2_arm1136jf_s_r0
61 bool
"arm1136jf_s rev0"
62 select BR2_ARM_CPU_HAS_VFPV2
63 select BR2_ARM_CPU_HAS_THUMB
64 config BR2_arm1136jf_s_r1
65 bool
"arm1136jf_s rev1"
66 select BR2_ARM_CPU_HAS_VFPV2
67 select BR2_ARM_CPU_HAS_THUMB
68 config BR2_arm1176jz_s
70 select BR2_ARM_CPU_HAS_THUMB
71 config BR2_arm1176jzf_s
73 select BR2_ARM_CPU_HAS_VFPV2
74 select BR2_ARM_CPU_HAS_THUMB
77 select BR2_ARM_CPU_MAYBE_HAS_NEON
78 select BR2_ARM_CPU_MAYBE_HAS_VFPV4
79 select BR2_ARM_CPU_HAS_THUMB2
82 select BR2_ARM_CPU_HAS_NEON
83 select BR2_ARM_CPU_HAS_VFPV4
84 select BR2_ARM_CPU_HAS_THUMB2
87 select BR2_ARM_CPU_HAS_NEON
88 select BR2_ARM_CPU_HAS_VFPV3
89 select BR2_ARM_CPU_HAS_THUMB2
92 select BR2_ARM_CPU_MAYBE_HAS_NEON
93 select BR2_ARM_CPU_MAYBE_HAS_VFPV3
94 select BR2_ARM_CPU_HAS_THUMB2
97 select BR2_ARM_CPU_HAS_NEON
98 select BR2_ARM_CPU_HAS_VFPV4
99 select BR2_ARM_CPU_HAS_THUMB2
100 config BR2_cortex_a15
102 select BR2_ARM_CPU_HAS_NEON
103 select BR2_ARM_CPU_HAS_VFPV4
104 select BR2_ARM_CPU_HAS_THUMB2
109 select BR2_ARM_CPU_HAS_VFPV3
111 bool
"strongarm sa110/sa1100"
114 select BR2_ARM_CPU_HAS_THUMB
119 config BR2_arm1136jf_s
121 default BR2_arm1136jf_s_r0 || BR2_arm1136jf_s_r1
125 depends on BR2_arm || BR2_armeb
128 Application Binary Interface to use. The Application Binary
129 Interface describes the calling conventions
(how arguments
130 are passed to functions
, how the return value is passed
, how
131 system calls are made
, etc.
).
136 The EABI is currently the standard ARM ABI
, which is used in
137 most projects. It supports both the 'soft' floating point
138 model
(in which floating point instructions are emulated in
139 software
) and the 'softfp' floating point model
(in which
140 floating point instructions are executed using an hardware
141 floating point unit
, but floating point arguments to
142 functions are passed in integer registers
).
144 The 'softfp' floating point model is link
-compatible with
145 the 'soft' floating point model
, i.e you can link a library
146 built 'soft' with some other code built 'softfp'.
148 However
, passing the floating point arguments in integer
149 registers is a bit inefficient
, so if your ARM processor has
150 a floating point unit
, and you don't have pre
-compiled
151 'soft' or 'softfp' code
, using the EABIhf ABI will provide
152 better floating point performances.
154 If your processor does not have a floating point unit
, then
155 you must use this ABI.
157 config BR2_ARM_EABIHF
159 depends on BR2_ARM_CPU_MAYBE_HAS_VFPV2 || BR2_ARM_CPU_HAS_VFPV2
161 The EABIhf is an extension of EABI which supports the 'hard'
162 floating point model. This model uses the floating point
163 unit to execute floating point instructions
, and passes
164 floating point arguments in floating point registers.
166 It is more efficient than EABI for floating point related
167 workload. However
, it does not allow to link against code
168 that has been pre
-built for the 'soft' or 'softfp' floating
171 If your processor has a floating point unit
, and you don't
172 depend on existing pre
-compiled code
, this option is most
173 likely the best choice.
177 config BR2_ARM_ENABLE_NEON
178 bool
"Enable NEON SIMD extension support"
179 depends on BR2_ARM_CPU_MAYBE_HAS_NEON
180 select BR2_ARM_CPU_HAS_NEON
182 For some CPU cores
, the NEON SIMD extension is optional.
183 Select this option if you are certain your particular
184 implementation has NEON support
and you want to use it.
187 prompt
"Floating point strategy"
188 depends on BR2_ARM_EABI || BR2_ARM_EABIHF
189 default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4
190 default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
191 default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2
192 default BR2_ARM_SOFT_FLOAT if
!BR2_ARM_CPU_HAS_VFPV2
194 config BR2_ARM_SOFT_FLOAT
196 depends on BR2_ARM_EABI
197 select BR2_SOFT_FLOAT
199 This option allows to use software emulated floating
200 point. It should be used for ARM cores that do not include a
201 Vector Floating Point unit
, such as ARMv5 cores
(ARM926 for
202 example
) or certain ARMv6 cores.
204 config BR2_ARM_FPU_VFPV2
206 depends on BR2_ARM_CPU_HAS_VFPV2 || BR2_ARM_CPU_MAYBE_HAS_VFPV2
208 This option allows to use the VFPv2 floating point unit
, as
209 available in some ARMv5 processors
(ARM926EJ
-S
) and some
210 ARMv6 processors
(ARM1136JF
-S
, ARM1176JZF
-S
and ARM11
213 Note that this option is also safe to use for newer cores
214 such as Cortex
-A
, because the VFPv3
and VFPv4 units are
215 backward compatible with VFPv2.
217 config BR2_ARM_FPU_VFPV3
219 depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
221 This option allows to use the VFPv3 floating point unit
, as
222 available in some ARMv7 processors
(Cortex
-A
{8, 9}). This
223 option requires a VFPv3 unit that has
32 double
-precision
224 registers
, which is not necessarily the case in all SOCs
225 based on Cortex
-A
{8, 9}. If you're unsure
, use VFPv3
-D16
226 instead
, which is guaranteed to work on all Cortex
-A
{8, 9}.
228 Note that this option is also safe to use for newer cores
229 that have a VFPv4 unit
, because VFPv4 is backward compatible
230 with VFPv3. They must of course also have
32
231 double
-precision registers.
233 config BR2_ARM_FPU_VFPV3D16
235 depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
237 This option allows to use the VFPv3 floating point unit
, as
238 available in some ARMv7 processors
(Cortex
-A
{8, 9}). This
239 option requires a VFPv3 unit that has
16 double
-precision
240 registers
, which is generally the case in all SOCs based on
241 Cortex
-A
{8, 9}, even though VFPv3 is technically optional on
242 Cortex
-A9. This is the safest option for those cores.
244 Note that this option is also safe to use for newer cores
245 such that have a VFPv4 unit
, because the VFPv4 is backward
246 compatible with VFPv3.
248 config BR2_ARM_FPU_VFPV4
250 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
252 This option allows to use the VFPv4 floating point unit
, as
253 available in some ARMv7 processors
(Cortex
-A
{5, 7, 12,
254 15}). This option requires a VFPv4 unit that has
32
255 double
-precision registers
, which is not necessarily the
256 case in all SOCs based on Cortex
-A
{5, 7, 12, 15}. If you're
257 unsure
, you should probably use VFPv4
-D16 instead.
259 Note that if you want binary code that works on all ARMv7
260 cores
, including the earlier Cortex
-A
{8, 9}, you should
261 instead select VFPv3.
263 config BR2_ARM_FPU_VFPV4D16
265 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
267 This option allows to use the VFPv4 floating point unit
, as
268 available in some ARMv7 processors
(Cortex
-A
{5, 7, 12,
269 15}). This option requires a VFPv4 unit that has
16
270 double
-precision registers
, which is always available on
271 Cortex
-A12
and Cortex
-A15
, but optional on Cortex
-A5
and
274 Note that if you want binary code that works on all ARMv7
275 cores
, including the earlier Cortex
-A
{8, 9}, you should
276 instead select VFPv3
-D16.
278 config BR2_ARM_FPU_NEON
280 depends on BR2_ARM_CPU_HAS_NEON
282 This option allows to use the NEON SIMD unit
, as available
283 in some ARMv7 processors
, as a floating
-point unit. It
284 should however be noted that using NEON for floating point
285 operations doesn't provide a complete compatibility with the
288 config BR2_ARM_FPU_NEON_VFPV4
290 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
291 depends on BR2_ARM_CPU_HAS_NEON
293 This option allows to use both the VFPv4
and the NEON SIMD
294 units for floating point operations. Note that some ARMv7
295 cores do not necessarily have VFPv4
and/or NEON support
, for
296 example on Cortex
-A5
and Cortex
-A7
, support for VFPv4
and
302 prompt
"ARM instruction set"
303 depends on BR2_ARM_CPU_HAS_THUMB || BR2_ARM_CPU_HAS_THUMB2
305 config BR2_ARM_INSTRUCTIONS_ARM_CHOICE
308 This option instructs the compiler to generate regular ARM
309 instructions
, that are all
32 bits wide.
311 config BR2_ARM_INSTRUCTIONS_THUMB
313 depends on BR2_ARM_CPU_HAS_THUMB
315 This option instructions the compiler to generate Thumb
316 instructions
, which allows to mix
16 bits instructions
and
317 32 bits instructions. This generally provides a much smaller
318 compiled binary size.
320 config BR2_ARM_INSTRUCTIONS_THUMB2
322 depends on BR2_ARM_CPU_HAS_THUMB2
324 This option instructions the compiler to generate Thumb2
325 instructions
, which allows to mix
16 bits instructions
and
326 32 bits instructions. This generally provides a much smaller
327 compiled binary size.
331 config BR2_ARM_INSTRUCTIONS_ARM
333 depends on
!(BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2
)
336 default
"arm" if BR2_arm
337 default
"armeb" if BR2_armeb
340 default
"LITTLE" if BR2_arm
341 default
"BIG" if BR2_armeb
343 config BR2_GCC_TARGET_CPU
344 default
"arm920" if BR2_arm920
345 default
"arm920t" if BR2_arm920t
346 default
"arm922t" if BR2_arm922t
347 default
"arm926ej-s" if BR2_arm926t
348 default
"arm1136j-s" if BR2_arm1136j_s
349 default
"arm1136jf-s" if BR2_arm1136jf_s
350 default
"arm1176jz-s" if BR2_arm1176jz_s
351 default
"arm1176jzf-s" if BR2_arm1176jzf_s
352 default
"cortex-a5" if BR2_cortex_a5
353 default
"cortex-a7" if BR2_cortex_a7
354 default
"cortex-a8" if BR2_cortex_a8
355 default
"cortex-a9" if BR2_cortex_a9
356 default
"cortex-a12" if BR2_cortex_a12
357 default
"cortex-a15" if BR2_cortex_a15
358 default
"fa526" if BR2_fa526
359 default
"marvell-pj4" if BR2_pj4
360 default
"strongarm" if BR2_strongarm
361 default
"xscale" if BR2_xscale
362 default
"iwmmxt" if BR2_iwmmxt
364 config BR2_GCC_TARGET_ARCH
365 default
"armv4t" if BR2_arm920t
366 default
"armv4t" if BR2_arm922t
367 default
"armv5te" if BR2_arm926t
368 default
"armv5t" if BR2_arm10t
369 default
"armv6j" if BR2_arm1136jf_s_r0
370 default
"armv6k" if BR2_arm1136jf_s_r1
371 default
"armv6zk" if BR2_arm1176jz_s
372 default
"armv6zk" if BR2_arm1176jzf_s
373 default
"armv7-a" if BR2_cortex_a5
374 default
"armv7-a" if BR2_cortex_a7
375 default
"armv7-a" if BR2_cortex_a8
376 default
"armv7-a" if BR2_cortex_a9
377 default
"armv7-a" if BR2_cortex_a12
378 default
"armv7-a" if BR2_cortex_a15
379 default
"armv4" if BR2_fa526
380 default
"armv7-a" if BR2_pj4
381 default
"armv4" if BR2_strongarm
382 default
"armv5te" if BR2_xscale
383 default
"iwmmxt" if BR2_iwmmxt
385 config BR2_GCC_TARGET_ABI
386 default
"aapcs-linux"
388 config BR2_GCC_TARGET_FPU
389 default
"vfp" if BR2_ARM_FPU_VFPV2
390 default
"vfpv3" if BR2_ARM_FPU_VFPV3
391 default
"vfpv3-d16" if BR2_ARM_FPU_VFPV3D16
392 default
"vfpv4" if BR2_ARM_FPU_VFPV4
393 default
"vfpv4-d16" if BR2_ARM_FPU_VFPV4D16
394 default
"neon" if BR2_ARM_FPU_NEON
395 default
"neon-vfpv4" if BR2_ARM_FPU_NEON_VFPV4
397 config BR2_GCC_TARGET_FLOAT_ABI
398 default
"soft" if BR2_ARM_SOFT_FLOAT
399 default
"softfp" if
!BR2_ARM_SOFT_FLOAT
&& BR2_ARM_EABI
400 default
"hard" if
!BR2_ARM_SOFT_FLOAT
&& BR2_ARM_EABIHF
402 config BR2_GCC_TARGET_MODE
403 default
"arm" if BR2_ARM_INSTRUCTIONS_ARM
404 default
"thumb" if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2