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_ARM
37 config BR2_ARM_CPU_HAS_THUMB
40 config BR2_ARM_CPU_HAS_THUMB2
43 config BR2_ARM_CPU_ARMV4
46 config BR2_ARM_CPU_ARMV5
49 config BR2_ARM_CPU_ARMV6
52 config BR2_ARM_CPU_ARMV7A
56 prompt
"Target Architecture Variant"
57 depends on BR2_arm || BR2_armeb
60 Specific CPU variant to use
64 select BR2_ARM_CPU_HAS_ARM
65 select BR2_ARM_CPU_HAS_THUMB
66 select BR2_ARM_CPU_ARMV4
67 select BR2_ARCH_HAS_MMU_OPTIONAL
70 select BR2_ARM_CPU_HAS_ARM
71 select BR2_ARM_CPU_HAS_THUMB
72 select BR2_ARM_CPU_ARMV4
73 select BR2_ARCH_HAS_MMU_OPTIONAL
76 select BR2_ARM_CPU_HAS_ARM
77 select BR2_ARM_CPU_MAYBE_HAS_VFPV2
78 select BR2_ARM_CPU_HAS_THUMB
79 select BR2_ARM_CPU_ARMV5
80 select BR2_ARCH_HAS_MMU_OPTIONAL
83 select BR2_ARM_CPU_HAS_ARM
84 select BR2_ARM_CPU_HAS_THUMB
85 select BR2_ARM_CPU_ARMV6
86 select BR2_ARCH_HAS_MMU_OPTIONAL
87 config BR2_arm1136jf_s
89 select BR2_ARM_CPU_HAS_ARM
90 select BR2_ARM_CPU_HAS_VFPV2
91 select BR2_ARM_CPU_HAS_THUMB
92 select BR2_ARM_CPU_ARMV6
93 select BR2_ARCH_HAS_MMU_OPTIONAL
94 config BR2_arm1176jz_s
96 select BR2_ARM_CPU_HAS_ARM
97 select BR2_ARM_CPU_HAS_THUMB
98 select BR2_ARM_CPU_ARMV6
99 select BR2_ARCH_HAS_MMU_OPTIONAL
100 config BR2_arm1176jzf_s
102 select BR2_ARM_CPU_HAS_ARM
103 select BR2_ARM_CPU_HAS_VFPV2
104 select BR2_ARM_CPU_HAS_THUMB
105 select BR2_ARM_CPU_ARMV6
106 select BR2_ARCH_HAS_MMU_OPTIONAL
109 select BR2_ARM_CPU_HAS_ARM
110 select BR2_ARM_CPU_MAYBE_HAS_NEON
111 select BR2_ARM_CPU_MAYBE_HAS_VFPV4
112 select BR2_ARM_CPU_HAS_THUMB2
113 select BR2_ARM_CPU_ARMV7A
114 select BR2_ARCH_HAS_MMU_OPTIONAL
117 select BR2_ARM_CPU_HAS_ARM
118 select BR2_ARM_CPU_HAS_NEON
119 select BR2_ARM_CPU_HAS_VFPV4
120 select BR2_ARM_CPU_HAS_THUMB2
121 select BR2_ARM_CPU_ARMV7A
122 select BR2_ARCH_HAS_MMU_OPTIONAL
125 select BR2_ARM_CPU_HAS_ARM
126 select BR2_ARM_CPU_HAS_NEON
127 select BR2_ARM_CPU_HAS_VFPV3
128 select BR2_ARM_CPU_HAS_THUMB2
129 select BR2_ARM_CPU_ARMV7A
130 select BR2_ARCH_HAS_MMU_OPTIONAL
133 select BR2_ARM_CPU_HAS_ARM
134 select BR2_ARM_CPU_MAYBE_HAS_NEON
135 select BR2_ARM_CPU_MAYBE_HAS_VFPV3
136 select BR2_ARM_CPU_HAS_THUMB2
137 select BR2_ARM_CPU_ARMV7A
138 select BR2_ARCH_HAS_MMU_OPTIONAL
139 config BR2_cortex_a12
141 select BR2_ARM_CPU_HAS_ARM
142 select BR2_ARM_CPU_HAS_NEON
143 select BR2_ARM_CPU_HAS_VFPV4
144 select BR2_ARM_CPU_HAS_THUMB2
145 select BR2_ARM_CPU_ARMV7A
146 select BR2_ARCH_HAS_MMU_OPTIONAL
147 config BR2_cortex_a15
149 select BR2_ARM_CPU_HAS_ARM
150 select BR2_ARM_CPU_HAS_NEON
151 select BR2_ARM_CPU_HAS_VFPV4
152 select BR2_ARM_CPU_HAS_THUMB2
153 select BR2_ARM_CPU_ARMV7A
154 select BR2_ARCH_HAS_MMU_OPTIONAL
157 select BR2_ARM_CPU_HAS_THUMB
158 select BR2_ARM_CPU_HAS_THUMB2
161 select BR2_ARM_CPU_HAS_ARM
162 select BR2_ARM_CPU_ARMV4
163 select BR2_ARCH_HAS_MMU_OPTIONAL
166 select BR2_ARM_CPU_HAS_ARM
167 select BR2_ARM_CPU_HAS_VFPV3
168 select BR2_ARM_CPU_ARMV7A
169 select BR2_ARCH_HAS_MMU_OPTIONAL
171 bool
"strongarm sa110/sa1100"
172 select BR2_ARM_CPU_HAS_ARM
173 select BR2_ARM_CPU_ARMV4
174 select BR2_ARCH_HAS_MMU_OPTIONAL
177 select BR2_ARM_CPU_HAS_ARM
178 select BR2_ARM_CPU_HAS_THUMB
179 select BR2_ARM_CPU_ARMV5
180 select BR2_ARCH_HAS_MMU_OPTIONAL
183 select BR2_ARM_CPU_HAS_ARM
184 select BR2_ARM_CPU_ARMV5
185 select BR2_ARCH_HAS_MMU_OPTIONAL
190 depends on BR2_arm || BR2_armeb
191 default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_VFPV2
194 Application Binary Interface to use. The Application Binary
195 Interface describes the calling conventions
(how arguments
196 are passed to functions
, how the return value is passed
, how
197 system calls are made
, etc.
).
202 The EABI is currently the standard ARM ABI
, which is used in
203 most projects. It supports both the 'soft' floating point
204 model
(in which floating point instructions are emulated in
205 software
) and the 'softfp' floating point model
(in which
206 floating point instructions are executed using an hardware
207 floating point unit
, but floating point arguments to
208 functions are passed in integer registers
).
210 The 'softfp' floating point model is link
-compatible with
211 the 'soft' floating point model
, i.e you can link a library
212 built 'soft' with some other code built 'softfp'.
214 However
, passing the floating point arguments in integer
215 registers is a bit inefficient
, so if your ARM processor has
216 a floating point unit
, and you don't have pre
-compiled
217 'soft' or 'softfp' code
, using the EABIhf ABI will provide
218 better floating point performances.
220 If your processor does not have a floating point unit
, then
221 you must use this ABI.
223 config BR2_ARM_EABIHF
225 depends on BR2_ARM_CPU_MAYBE_HAS_VFPV2 || BR2_ARM_CPU_HAS_VFPV2
227 The EABIhf is an extension of EABI which supports the 'hard'
228 floating point model. This model uses the floating point
229 unit to execute floating point instructions
, and passes
230 floating point arguments in floating point registers.
232 It is more efficient than EABI for floating point related
233 workload. However
, it does not allow to link against code
234 that has been pre
-built for the 'soft' or 'softfp' floating
237 If your processor has a floating point unit
, and you don't
238 depend on existing pre
-compiled code
, this option is most
239 likely the best choice.
243 config BR2_ARM_ENABLE_NEON
244 bool
"Enable NEON SIMD extension support"
245 depends on BR2_ARM_CPU_MAYBE_HAS_NEON
246 select BR2_ARM_CPU_HAS_NEON
248 For some CPU cores
, the NEON SIMD extension is optional.
249 Select this option if you are certain your particular
250 implementation has NEON support
and you want to use it.
253 prompt
"Floating point strategy"
254 depends on BR2_ARM_EABI || BR2_ARM_EABIHF
255 default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4
256 default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
257 default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2
258 default BR2_ARM_SOFT_FLOAT if
!BR2_ARM_CPU_HAS_VFPV2
260 config BR2_ARM_SOFT_FLOAT
262 depends on BR2_ARM_EABI
263 select BR2_SOFT_FLOAT
265 This option allows to use software emulated floating
266 point. It should be used for ARM cores that do not include a
267 Vector Floating Point unit
, such as ARMv5 cores
(ARM926 for
268 example
) or certain ARMv6 cores.
270 config BR2_ARM_FPU_VFPV2
272 depends on BR2_ARM_CPU_HAS_VFPV2 || BR2_ARM_CPU_MAYBE_HAS_VFPV2
274 This option allows to use the VFPv2 floating point unit
, as
275 available in some ARMv5 processors
(ARM926EJ
-S
) and some
276 ARMv6 processors
(ARM1136JF
-S
, ARM1176JZF
-S
and ARM11
279 Note that this option is also safe to use for newer cores
280 such as Cortex
-A
, because the VFPv3
and VFPv4 units are
281 backward compatible with VFPv2.
283 config BR2_ARM_FPU_VFPV3
285 depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
287 This option allows to use the VFPv3 floating point unit
, as
288 available in some ARMv7 processors
(Cortex
-A
{8, 9}). This
289 option requires a VFPv3 unit that has
32 double
-precision
290 registers
, which is not necessarily the case in all SOCs
291 based on Cortex
-A
{8, 9}. If you're unsure
, use VFPv3
-D16
292 instead
, which is guaranteed to work on all Cortex
-A
{8, 9}.
294 Note that this option is also safe to use for newer cores
295 that have a VFPv4 unit
, because VFPv4 is backward compatible
296 with VFPv3. They must of course also have
32
297 double
-precision registers.
299 config BR2_ARM_FPU_VFPV3D16
301 depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
303 This option allows to use the VFPv3 floating point unit
, as
304 available in some ARMv7 processors
(Cortex
-A
{8, 9}). This
305 option requires a VFPv3 unit that has
16 double
-precision
306 registers
, which is generally the case in all SOCs based on
307 Cortex
-A
{8, 9}, even though VFPv3 is technically optional on
308 Cortex
-A9. This is the safest option for those cores.
310 Note that this option is also safe to use for newer cores
311 such that have a VFPv4 unit
, because the VFPv4 is backward
312 compatible with VFPv3.
314 config BR2_ARM_FPU_VFPV4
316 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
318 This option allows to use the VFPv4 floating point unit
, as
319 available in some ARMv7 processors
(Cortex
-A
{5, 7, 12,
320 15}). This option requires a VFPv4 unit that has
32
321 double
-precision registers
, which is not necessarily the
322 case in all SOCs based on Cortex
-A
{5, 7, 12, 15}. If you're
323 unsure
, you should probably use VFPv4
-D16 instead.
325 Note that if you want binary code that works on all ARMv7
326 cores
, including the earlier Cortex
-A
{8, 9}, you should
327 instead select VFPv3.
329 config BR2_ARM_FPU_VFPV4D16
331 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
333 This option allows to use the VFPv4 floating point unit
, as
334 available in some ARMv7 processors
(Cortex
-A
{5, 7, 12,
335 15}). This option requires a VFPv4 unit that has
16
336 double
-precision registers
, which is always available on
337 Cortex
-A12
and Cortex
-A15
, but optional on Cortex
-A5
and
340 Note that if you want binary code that works on all ARMv7
341 cores
, including the earlier Cortex
-A
{8, 9}, you should
342 instead select VFPv3
-D16.
344 config BR2_ARM_FPU_NEON
346 depends on BR2_ARM_CPU_HAS_NEON
348 This option allows to use the NEON SIMD unit
, as available
349 in some ARMv7 processors
, as a floating
-point unit. It
350 should however be noted that using NEON for floating point
351 operations doesn't provide a complete compatibility with the
354 config BR2_ARM_FPU_NEON_VFPV4
356 depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
357 depends on BR2_ARM_CPU_HAS_NEON
359 This option allows to use both the VFPv4
and the NEON SIMD
360 units for floating point operations. Note that some ARMv7
361 cores do not necessarily have VFPv4
and/or NEON support
, for
362 example on Cortex
-A5
and Cortex
-A7
, support for VFPv4
and
368 prompt
"ARM instruction set"
370 config BR2_ARM_INSTRUCTIONS_ARM
372 depends on BR2_ARM_CPU_HAS_ARM
374 This option instructs the compiler to generate regular ARM
375 instructions
, that are all
32 bits wide.
377 config BR2_ARM_INSTRUCTIONS_THUMB
379 depends on BR2_ARM_CPU_HAS_THUMB
380 # Thumb
-1 and VFP are not compatible
381 depends on BR2_ARM_SOFT_FLOAT
383 This option instructions the compiler to generate Thumb
384 instructions
, which allows to mix
16 bits instructions
and
385 32 bits instructions. This generally provides a much smaller
386 compiled binary size.
388 comment
"Thumb1 is not compatible with VFP"
389 depends on BR2_ARM_CPU_HAS_THUMB
390 depends on
!BR2_ARM_SOFT_FLOAT
392 config BR2_ARM_INSTRUCTIONS_THUMB2
394 depends on BR2_ARM_CPU_HAS_THUMB2
396 This option instructions the compiler to generate Thumb2
397 instructions
, which allows to mix
16 bits instructions
and
398 32 bits instructions. This generally provides a much smaller
399 compiled binary size.
404 default
"arm" if BR2_arm
405 default
"armeb" if BR2_armeb
408 default
"LITTLE" if BR2_arm
409 default
"BIG" if BR2_armeb
411 config BR2_ARCH_HAS_ATOMICS
414 config BR2_GCC_TARGET_CPU
415 default
"arm920t" if BR2_arm920t
416 default
"arm922t" if BR2_arm922t
417 default
"arm926ej-s" if BR2_arm926t
418 default
"arm1136j-s" if BR2_arm1136j_s
419 default
"arm1136jf-s" if BR2_arm1136jf_s
420 default
"arm1176jz-s" if BR2_arm1176jz_s
421 default
"arm1176jzf-s" if BR2_arm1176jzf_s
422 default
"cortex-a5" if BR2_cortex_a5
423 default
"cortex-a7" if BR2_cortex_a7
424 default
"cortex-a8" if BR2_cortex_a8
425 default
"cortex-a9" if BR2_cortex_a9
426 default
"cortex-a12" if BR2_cortex_a12
427 default
"cortex-a15" if BR2_cortex_a15
428 default
"cortex-m3" if BR2_cortex_m3
429 default
"fa526" if BR2_fa526
430 default
"marvell-pj4" if BR2_pj4
431 default
"strongarm" if BR2_strongarm
432 default
"xscale" if BR2_xscale
433 default
"iwmmxt" if BR2_iwmmxt
435 config BR2_GCC_TARGET_ABI
436 default
"aapcs-linux"
438 config BR2_GCC_TARGET_FPU
439 default
"vfp" if BR2_ARM_FPU_VFPV2
440 default
"vfpv3" if BR2_ARM_FPU_VFPV3
441 default
"vfpv3-d16" if BR2_ARM_FPU_VFPV3D16
442 default
"vfpv4" if BR2_ARM_FPU_VFPV4
443 default
"vfpv4-d16" if BR2_ARM_FPU_VFPV4D16
444 default
"neon" if BR2_ARM_FPU_NEON
445 default
"neon-vfpv4" if BR2_ARM_FPU_NEON_VFPV4
447 config BR2_GCC_TARGET_FLOAT_ABI
448 default
"soft" if BR2_ARM_SOFT_FLOAT
449 default
"softfp" if
!BR2_ARM_SOFT_FLOAT
&& BR2_ARM_EABI
450 default
"hard" if
!BR2_ARM_SOFT_FLOAT
&& BR2_ARM_EABIHF
452 config BR2_GCC_TARGET_MODE
453 default
"arm" if BR2_ARM_INSTRUCTIONS_ARM
454 default
"thumb" if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2