]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - arch/Config.in.arm
arch/arm: add the cortex A17 variant supported by gcc 5.x
[coffee/buildroot.git] / arch / Config.in.arm
1 # arm cpu features
2 config BR2_ARM_CPU_HAS_NEON
3         bool
4
5 # for some cores, NEON support is optional
6 config BR2_ARM_CPU_MAYBE_HAS_NEON
7         bool
8
9 # for some cores, VFPv2 is optional
10 config BR2_ARM_CPU_MAYBE_HAS_VFPV2
11         bool
12
13 config BR2_ARM_CPU_HAS_VFPV2
14         bool
15
16 # for some cores, VFPv3 is optional
17 config BR2_ARM_CPU_MAYBE_HAS_VFPV3
18         bool
19         select BR2_ARM_CPU_MAYBE_HAS_VFPV2
20
21 config BR2_ARM_CPU_HAS_VFPV3
22         bool
23         select BR2_ARM_CPU_HAS_VFPV2
24
25 # for some cores, VFPv4 is optional
26 config BR2_ARM_CPU_MAYBE_HAS_VFPV4
27         bool
28         select BR2_ARM_CPU_MAYBE_HAS_VFPV3
29
30 config BR2_ARM_CPU_HAS_VFPV4
31         bool
32         select BR2_ARM_CPU_HAS_VFPV3
33
34 config BR2_ARM_CPU_HAS_ARM
35         bool
36
37 config BR2_ARM_CPU_HAS_THUMB
38         bool
39
40 config BR2_ARM_CPU_HAS_THUMB2
41         bool
42
43 config BR2_ARM_CPU_ARMV4
44         bool
45
46 config BR2_ARM_CPU_ARMV5
47         bool
48
49 config BR2_ARM_CPU_ARMV6
50         bool
51
52 config BR2_ARM_CPU_ARMV7A
53         bool
54
55 choice
56         prompt "Target Architecture Variant"
57         depends on BR2_arm || BR2_armeb
58         default BR2_arm926t
59         help
60           Specific CPU variant to use
61
62 config BR2_arm920t
63         bool "arm920t"
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
68 config BR2_arm922t
69         bool "arm922t"
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
74 config BR2_arm926t
75         bool "arm926t"
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
81 config BR2_arm1136j_s
82         bool "arm1136j-s"
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
88         bool "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
95         bool "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
101         bool "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
107 config BR2_arm11mpcore
108         bool "mpcore"
109         select BR2_ARM_CPU_HAS_ARM
110         select BR2_ARM_CPU_MAYBE_HAS_VFPV2
111         select BR2_ARM_CPU_HAS_THUMB
112         select BR2_ARM_CPU_ARMV6
113         select BR2_ARCH_HAS_MMU_OPTIONAL
114 config BR2_cortex_a5
115         bool "cortex-A5"
116         select BR2_ARM_CPU_HAS_ARM
117         select BR2_ARM_CPU_MAYBE_HAS_NEON
118         select BR2_ARM_CPU_MAYBE_HAS_VFPV4
119         select BR2_ARM_CPU_HAS_THUMB2
120         select BR2_ARM_CPU_ARMV7A
121         select BR2_ARCH_HAS_MMU_OPTIONAL
122 config BR2_cortex_a7
123         bool "cortex-A7"
124         select BR2_ARM_CPU_HAS_ARM
125         select BR2_ARM_CPU_HAS_NEON
126         select BR2_ARM_CPU_HAS_VFPV4
127         select BR2_ARM_CPU_HAS_THUMB2
128         select BR2_ARM_CPU_ARMV7A
129         select BR2_ARCH_HAS_MMU_OPTIONAL
130 config BR2_cortex_a8
131         bool "cortex-A8"
132         select BR2_ARM_CPU_HAS_ARM
133         select BR2_ARM_CPU_HAS_NEON
134         select BR2_ARM_CPU_HAS_VFPV3
135         select BR2_ARM_CPU_HAS_THUMB2
136         select BR2_ARM_CPU_ARMV7A
137         select BR2_ARCH_HAS_MMU_OPTIONAL
138 config BR2_cortex_a9
139         bool "cortex-A9"
140         select BR2_ARM_CPU_HAS_ARM
141         select BR2_ARM_CPU_MAYBE_HAS_NEON
142         select BR2_ARM_CPU_MAYBE_HAS_VFPV3
143         select BR2_ARM_CPU_HAS_THUMB2
144         select BR2_ARM_CPU_ARMV7A
145         select BR2_ARCH_HAS_MMU_OPTIONAL
146 config BR2_cortex_a12
147         bool "cortex-A12"
148         select BR2_ARM_CPU_HAS_ARM
149         select BR2_ARM_CPU_HAS_NEON
150         select BR2_ARM_CPU_HAS_VFPV4
151         select BR2_ARM_CPU_HAS_THUMB2
152         select BR2_ARM_CPU_ARMV7A
153         select BR2_ARCH_HAS_MMU_OPTIONAL
154 config BR2_cortex_a15
155         bool "cortex-A15"
156         select BR2_ARM_CPU_HAS_ARM
157         select BR2_ARM_CPU_HAS_NEON
158         select BR2_ARM_CPU_HAS_VFPV4
159         select BR2_ARM_CPU_HAS_THUMB2
160         select BR2_ARM_CPU_ARMV7A
161         select BR2_ARCH_HAS_MMU_OPTIONAL
162 config BR2_cortex_a17
163         bool "cortex-A17"
164         select BR2_ARM_CPU_HAS_ARM
165         select BR2_ARM_CPU_HAS_NEON
166         select BR2_ARM_CPU_HAS_VFPV4
167         select BR2_ARM_CPU_HAS_THUMB2
168         select BR2_ARM_CPU_ARMV7A
169         select BR2_ARCH_HAS_MMU_OPTIONAL
170 config BR2_cortex_m3
171         bool "cortex-M3"
172         select BR2_ARM_CPU_HAS_THUMB
173         select BR2_ARM_CPU_HAS_THUMB2
174 config BR2_fa526
175         bool "fa526/626"
176         select BR2_ARM_CPU_HAS_ARM
177         select BR2_ARM_CPU_ARMV4
178         select BR2_ARCH_HAS_MMU_OPTIONAL
179 config BR2_pj4
180         bool "pj4"
181         select BR2_ARM_CPU_HAS_ARM
182         select BR2_ARM_CPU_HAS_VFPV3
183         select BR2_ARM_CPU_ARMV7A
184         select BR2_ARCH_HAS_MMU_OPTIONAL
185 config BR2_strongarm
186         bool "strongarm sa110/sa1100"
187         select BR2_ARM_CPU_HAS_ARM
188         select BR2_ARM_CPU_ARMV4
189         select BR2_ARCH_HAS_MMU_OPTIONAL
190 config BR2_xscale
191         bool "xscale"
192         select BR2_ARM_CPU_HAS_ARM
193         select BR2_ARM_CPU_HAS_THUMB
194         select BR2_ARM_CPU_ARMV5
195         select BR2_ARCH_HAS_MMU_OPTIONAL
196 config BR2_iwmmxt
197         bool "iwmmxt"
198         select BR2_ARM_CPU_HAS_ARM
199         select BR2_ARM_CPU_ARMV5
200         select BR2_ARCH_HAS_MMU_OPTIONAL
201 endchoice
202
203 config BR2_ARM_ENABLE_NEON
204         bool "Enable NEON SIMD extension support"
205         depends on BR2_ARM_CPU_MAYBE_HAS_NEON
206         select BR2_ARM_CPU_HAS_NEON
207         help
208           For some CPU cores, the NEON SIMD extension is optional.
209           Select this option if you are certain your particular
210           implementation has NEON support and you want to use it.
211
212 config BR2_ARM_ENABLE_VFP
213         bool "Enable VFP extension support"
214         depends on BR2_ARM_CPU_MAYBE_HAS_VFPV2
215         select BR2_ARM_CPU_HAS_VFPV4 if BR2_ARM_CPU_MAYBE_HAS_VFPV4
216         select BR2_ARM_CPU_HAS_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3
217         select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2
218         help
219           For some CPU cores, the VFP extension is optional. Select
220           this option if you are certain your particular
221           implementation has VFP support and you want to use it.
222
223 choice
224         prompt "Target ABI"
225         depends on BR2_arm || BR2_armeb
226         default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_VFPV2
227         default BR2_ARM_EABI
228         help
229           Application Binary Interface to use. The Application Binary
230           Interface describes the calling conventions (how arguments
231           are passed to functions, how the return value is passed, how
232           system calls are made, etc.).
233
234 config BR2_ARM_EABI
235         bool "EABI"
236         help
237           The EABI is currently the standard ARM ABI, which is used in
238           most projects. It supports both the 'soft' floating point
239           model (in which floating point instructions are emulated in
240           software) and the 'softfp' floating point model (in which
241           floating point instructions are executed using an hardware
242           floating point unit, but floating point arguments to
243           functions are passed in integer registers).
244
245           The 'softfp' floating point model is link-compatible with
246           the 'soft' floating point model, i.e you can link a library
247           built 'soft' with some other code built 'softfp'.
248
249           However, passing the floating point arguments in integer
250           registers is a bit inefficient, so if your ARM processor has
251           a floating point unit, and you don't have pre-compiled
252           'soft' or 'softfp' code, using the EABIhf ABI will provide
253           better floating point performances.
254
255           If your processor does not have a floating point unit, then
256           you must use this ABI.
257
258 config BR2_ARM_EABIHF
259         bool "EABIhf"
260         depends on BR2_ARM_CPU_HAS_VFPV2
261         help
262           The EABIhf is an extension of EABI which supports the 'hard'
263           floating point model. This model uses the floating point
264           unit to execute floating point instructions, and passes
265           floating point arguments in floating point registers.
266
267           It is more efficient than EABI for floating point related
268           workload. However, it does not allow to link against code
269           that has been pre-built for the 'soft' or 'softfp' floating
270           point models.
271
272           If your processor has a floating point unit, and you don't
273           depend on existing pre-compiled code, this option is most
274           likely the best choice.
275
276 endchoice
277
278 choice
279         prompt "Floating point strategy"
280         depends on BR2_ARM_EABI || BR2_ARM_EABIHF
281         default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4
282         default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
283         default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2
284         default BR2_ARM_SOFT_FLOAT if !BR2_ARM_CPU_HAS_VFPV2
285
286 config BR2_ARM_SOFT_FLOAT
287         bool "Soft float"
288         depends on BR2_ARM_EABI
289         select BR2_SOFT_FLOAT
290         help
291           This option allows to use software emulated floating
292           point. It should be used for ARM cores that do not include a
293           Vector Floating Point unit, such as ARMv5 cores (ARM926 for
294           example) or certain ARMv6 cores.
295
296 config BR2_ARM_FPU_VFPV2
297         bool "VFPv2"
298         depends on BR2_ARM_CPU_HAS_VFPV2
299         help
300           This option allows to use the VFPv2 floating point unit, as
301           available in some ARMv5 processors (ARM926EJ-S) and some
302           ARMv6 processors (ARM1136JF-S, ARM1176JZF-S and ARM11
303           MPCore).
304
305           Note that this option is also safe to use for newer cores
306           such as Cortex-A, because the VFPv3 and VFPv4 units are
307           backward compatible with VFPv2.
308
309 config BR2_ARM_FPU_VFPV3
310         bool "VFPv3"
311         depends on BR2_ARM_CPU_HAS_VFPV3
312         help
313           This option allows to use the VFPv3 floating point unit, as
314           available in some ARMv7 processors (Cortex-A{8, 9}). This
315           option requires a VFPv3 unit that has 32 double-precision
316           registers, which is not necessarily the case in all SOCs
317           based on Cortex-A{8, 9}. If you're unsure, use VFPv3-D16
318           instead, which is guaranteed to work on all Cortex-A{8, 9}.
319
320           Note that this option is also safe to use for newer cores
321           that have a VFPv4 unit, because VFPv4 is backward compatible
322           with VFPv3. They must of course also have 32
323           double-precision registers.
324
325 config BR2_ARM_FPU_VFPV3D16
326         bool "VFPv3-D16"
327         depends on BR2_ARM_CPU_HAS_VFPV3
328         help
329           This option allows to use the VFPv3 floating point unit, as
330           available in some ARMv7 processors (Cortex-A{8, 9}). This
331           option requires a VFPv3 unit that has 16 double-precision
332           registers, which is generally the case in all SOCs based on
333           Cortex-A{8, 9}, even though VFPv3 is technically optional on
334           Cortex-A9. This is the safest option for those cores.
335
336           Note that this option is also safe to use for newer cores
337           such that have a VFPv4 unit, because the VFPv4 is backward
338           compatible with VFPv3.
339
340 config BR2_ARM_FPU_VFPV4
341         bool "VFPv4"
342         depends on BR2_ARM_CPU_HAS_VFPV4
343         help
344           This option allows to use the VFPv4 floating point unit, as
345           available in some ARMv7 processors (Cortex-A{5, 7, 12,
346           15}). This option requires a VFPv4 unit that has 32
347           double-precision registers, which is not necessarily the
348           case in all SOCs based on Cortex-A{5, 7, 12, 15}. If you're
349           unsure, you should probably use VFPv4-D16 instead.
350
351           Note that if you want binary code that works on all ARMv7
352           cores, including the earlier Cortex-A{8, 9}, you should
353           instead select VFPv3.
354
355 config BR2_ARM_FPU_VFPV4D16
356         bool "VFPv4-D16"
357         depends on BR2_ARM_CPU_HAS_VFPV4
358         help
359           This option allows to use the VFPv4 floating point unit, as
360           available in some ARMv7 processors (Cortex-A{5, 7, 12,
361           15}). This option requires a VFPv4 unit that has 16
362           double-precision registers, which is always available on
363           Cortex-A12 and Cortex-A15, but optional on Cortex-A5 and
364           Cortex-A7.
365
366           Note that if you want binary code that works on all ARMv7
367           cores, including the earlier Cortex-A{8, 9}, you should
368           instead select VFPv3-D16.
369
370 config BR2_ARM_FPU_NEON
371         bool "NEON"
372         depends on BR2_ARM_CPU_HAS_NEON
373         help
374           This option allows to use the NEON SIMD unit, as available
375           in some ARMv7 processors, as a floating-point unit. It
376           should however be noted that using NEON for floating point
377           operations doesn't provide a complete compatibility with the
378           IEEE 754.
379
380 config BR2_ARM_FPU_NEON_VFPV4
381         bool "NEON/VFPv4"
382         depends on BR2_ARM_CPU_HAS_VFPV4
383         depends on BR2_ARM_CPU_HAS_NEON
384         help
385           This option allows to use both the VFPv4 and the NEON SIMD
386           units for floating point operations. Note that some ARMv7
387           cores do not necessarily have VFPv4 and/or NEON support, for
388           example on Cortex-A5 and Cortex-A7, support for VFPv4 and
389           NEON is optional.
390
391 endchoice
392
393 choice
394         prompt "ARM instruction set"
395
396 config BR2_ARM_INSTRUCTIONS_ARM
397         bool "ARM"
398         depends on BR2_ARM_CPU_HAS_ARM
399         help
400           This option instructs the compiler to generate regular ARM
401           instructions, that are all 32 bits wide.
402
403 config BR2_ARM_INSTRUCTIONS_THUMB
404         bool "Thumb"
405         depends on BR2_ARM_CPU_HAS_THUMB
406         # Thumb-1 and VFP are not compatible
407         depends on BR2_ARM_SOFT_FLOAT
408         help
409           This option instructions the compiler to generate Thumb
410           instructions, which allows to mix 16 bits instructions and
411           32 bits instructions. This generally provides a much smaller
412           compiled binary size.
413
414 comment "Thumb1 is not compatible with VFP"
415         depends on BR2_ARM_CPU_HAS_THUMB
416         depends on !BR2_ARM_SOFT_FLOAT
417
418 config BR2_ARM_INSTRUCTIONS_THUMB2
419         bool "Thumb2"
420         depends on BR2_ARM_CPU_HAS_THUMB2
421         help
422           This option instructions the compiler to generate Thumb2
423           instructions, which allows to mix 16 bits instructions and
424           32 bits instructions. This generally provides a much smaller
425           compiled binary size.
426
427 endchoice
428
429 config BR2_ARCH
430         default "arm"   if BR2_arm
431         default "armeb" if BR2_armeb
432
433 config BR2_ENDIAN
434         default "LITTLE" if BR2_arm
435         default "BIG"    if BR2_armeb
436
437 config BR2_GCC_TARGET_CPU
438         default "arm920t"       if BR2_arm920t
439         default "arm922t"       if BR2_arm922t
440         default "arm926ej-s"    if BR2_arm926t
441         default "arm1136j-s"    if BR2_arm1136j_s
442         default "arm1136jf-s"   if BR2_arm1136jf_s
443         default "arm1176jz-s"   if BR2_arm1176jz_s
444         default "arm1176jzf-s"  if BR2_arm1176jzf_s
445         default "mpcore"        if BR2_arm11mpcore && BR2_ARM_CPU_HAS_VFPV2
446         default "mpcorenovfp"   if BR2_arm11mpcore
447         default "cortex-a5"     if BR2_cortex_a5
448         default "cortex-a7"     if BR2_cortex_a7
449         default "cortex-a8"     if BR2_cortex_a8
450         default "cortex-a9"     if BR2_cortex_a9
451         default "cortex-a12"    if BR2_cortex_a12
452         default "cortex-a15"    if BR2_cortex_a15
453         default "cortex-a17"    if BR2_cortex_a17
454         default "cortex-m3"     if BR2_cortex_m3
455         default "fa526"         if BR2_fa526
456         default "marvell-pj4"   if BR2_pj4
457         default "strongarm"     if BR2_strongarm
458         default "xscale"        if BR2_xscale
459         default "iwmmxt"        if BR2_iwmmxt
460
461 config BR2_GCC_TARGET_ABI
462         default "aapcs-linux"
463
464 config BR2_GCC_TARGET_FPU
465         default "vfp"           if BR2_ARM_FPU_VFPV2
466         default "vfpv3"         if BR2_ARM_FPU_VFPV3
467         default "vfpv3-d16"     if BR2_ARM_FPU_VFPV3D16
468         default "vfpv4"         if BR2_ARM_FPU_VFPV4
469         default "vfpv4-d16"     if BR2_ARM_FPU_VFPV4D16
470         default "neon"          if BR2_ARM_FPU_NEON
471         default "neon-vfpv4"    if BR2_ARM_FPU_NEON_VFPV4
472
473 config BR2_GCC_TARGET_FLOAT_ABI
474         default "soft"          if BR2_ARM_SOFT_FLOAT
475         default "softfp"        if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABI
476         default "hard"          if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABIHF
477
478 config BR2_GCC_TARGET_MODE
479         default "arm"           if BR2_ARM_INSTRUCTIONS_ARM
480         default "thumb"         if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2