Config.in.arm 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. # arm cpu features
  2. config BR2_ARM_CPU_HAS_NEON
  3. bool
  4. # for some cores, NEON support is optional
  5. config BR2_ARM_CPU_MAYBE_HAS_NEON
  6. bool
  7. # for some cores, VFPv2 is optional
  8. config BR2_ARM_CPU_MAYBE_HAS_VFPV2
  9. bool
  10. config BR2_ARM_CPU_HAS_VFPV2
  11. bool
  12. # for some cores, VFPv3 is optional
  13. config BR2_ARM_CPU_MAYBE_HAS_VFPV3
  14. bool
  15. select BR2_ARM_CPU_MAYBE_HAS_VFPV2
  16. config BR2_ARM_CPU_HAS_VFPV3
  17. bool
  18. select BR2_ARM_CPU_HAS_VFPV2
  19. # for some cores, VFPv4 is optional
  20. config BR2_ARM_CPU_MAYBE_HAS_VFPV4
  21. bool
  22. select BR2_ARM_CPU_MAYBE_HAS_VFPV3
  23. config BR2_ARM_CPU_HAS_VFPV4
  24. bool
  25. select BR2_ARM_CPU_HAS_VFPV3
  26. config BR2_ARM_CPU_HAS_THUMB
  27. bool
  28. config BR2_ARM_CPU_HAS_THUMB2
  29. bool
  30. config BR2_ARM_CPU_ARMV4
  31. bool
  32. config BR2_ARM_CPU_ARMV5
  33. bool
  34. config BR2_ARM_CPU_ARMV6
  35. bool
  36. config BR2_ARM_CPU_ARMV7A
  37. bool
  38. choice
  39. prompt "Target Architecture Variant"
  40. depends on BR2_arm || BR2_armeb
  41. default BR2_arm926t
  42. help
  43. Specific CPU variant to use
  44. config BR2_arm920t
  45. bool "arm920t"
  46. select BR2_ARM_CPU_HAS_THUMB
  47. select BR2_ARM_CPU_ARMV4
  48. config BR2_arm922t
  49. bool "arm922t"
  50. select BR2_ARM_CPU_HAS_THUMB
  51. select BR2_ARM_CPU_ARMV4
  52. config BR2_arm926t
  53. bool "arm926t"
  54. select BR2_ARM_CPU_MAYBE_HAS_VFPV2
  55. select BR2_ARM_CPU_HAS_THUMB
  56. select BR2_ARM_CPU_ARMV5
  57. config BR2_arm1136jf_s_r0
  58. bool "arm1136jf_s rev0"
  59. select BR2_ARM_CPU_HAS_VFPV2
  60. select BR2_ARM_CPU_HAS_THUMB
  61. select BR2_ARM_CPU_ARMV6
  62. config BR2_arm1136jf_s_r1
  63. bool "arm1136jf_s rev1"
  64. select BR2_ARM_CPU_HAS_VFPV2
  65. select BR2_ARM_CPU_HAS_THUMB
  66. select BR2_ARM_CPU_ARMV6
  67. config BR2_arm1176jz_s
  68. bool "arm1176jz-s"
  69. select BR2_ARM_CPU_HAS_THUMB
  70. select BR2_ARM_CPU_ARMV6
  71. config BR2_arm1176jzf_s
  72. bool "arm1176jzf-s"
  73. select BR2_ARM_CPU_HAS_VFPV2
  74. select BR2_ARM_CPU_HAS_THUMB
  75. select BR2_ARM_CPU_ARMV6
  76. config BR2_cortex_a5
  77. bool "cortex-A5"
  78. select BR2_ARM_CPU_MAYBE_HAS_NEON
  79. select BR2_ARM_CPU_MAYBE_HAS_VFPV4
  80. select BR2_ARM_CPU_HAS_THUMB2
  81. select BR2_ARM_CPU_ARMV7A
  82. config BR2_cortex_a7
  83. bool "cortex-A7"
  84. select BR2_ARM_CPU_HAS_NEON
  85. select BR2_ARM_CPU_HAS_VFPV4
  86. select BR2_ARM_CPU_HAS_THUMB2
  87. select BR2_ARM_CPU_ARMV7A
  88. config BR2_cortex_a8
  89. bool "cortex-A8"
  90. select BR2_ARM_CPU_HAS_NEON
  91. select BR2_ARM_CPU_HAS_VFPV3
  92. select BR2_ARM_CPU_HAS_THUMB2
  93. select BR2_ARM_CPU_ARMV7A
  94. config BR2_cortex_a9
  95. bool "cortex-A9"
  96. select BR2_ARM_CPU_MAYBE_HAS_NEON
  97. select BR2_ARM_CPU_MAYBE_HAS_VFPV3
  98. select BR2_ARM_CPU_HAS_THUMB2
  99. select BR2_ARM_CPU_ARMV7A
  100. config BR2_cortex_a12
  101. bool "cortex-A12"
  102. select BR2_ARM_CPU_HAS_NEON
  103. select BR2_ARM_CPU_HAS_VFPV4
  104. select BR2_ARM_CPU_HAS_THUMB2
  105. select BR2_ARM_CPU_ARMV7A
  106. config BR2_cortex_a15
  107. bool "cortex-A15"
  108. select BR2_ARM_CPU_HAS_NEON
  109. select BR2_ARM_CPU_HAS_VFPV4
  110. select BR2_ARM_CPU_HAS_THUMB2
  111. select BR2_ARM_CPU_ARMV7A
  112. config BR2_fa526
  113. bool "fa526/626"
  114. select BR2_ARM_CPU_ARMV4
  115. config BR2_pj4
  116. bool "pj4"
  117. select BR2_ARM_CPU_HAS_VFPV3
  118. select BR2_ARM_CPU_ARMV7A
  119. config BR2_strongarm
  120. bool "strongarm sa110/sa1100"
  121. select BR2_ARM_CPU_ARMV4
  122. config BR2_xscale
  123. bool "xscale"
  124. select BR2_ARM_CPU_HAS_THUMB
  125. select BR2_ARM_CPU_ARMV5
  126. config BR2_iwmmxt
  127. bool "iwmmxt"
  128. select BR2_ARM_CPU_ARMV5
  129. endchoice
  130. config BR2_arm1136jf_s
  131. bool
  132. default BR2_arm1136jf_s_r0 || BR2_arm1136jf_s_r1
  133. choice
  134. prompt "Target ABI"
  135. depends on BR2_arm || BR2_armeb
  136. default BR2_ARM_EABI
  137. help
  138. Application Binary Interface to use. The Application Binary
  139. Interface describes the calling conventions (how arguments
  140. are passed to functions, how the return value is passed, how
  141. system calls are made, etc.).
  142. config BR2_ARM_EABI
  143. bool "EABI"
  144. help
  145. The EABI is currently the standard ARM ABI, which is used in
  146. most projects. It supports both the 'soft' floating point
  147. model (in which floating point instructions are emulated in
  148. software) and the 'softfp' floating point model (in which
  149. floating point instructions are executed using an hardware
  150. floating point unit, but floating point arguments to
  151. functions are passed in integer registers).
  152. The 'softfp' floating point model is link-compatible with
  153. the 'soft' floating point model, i.e you can link a library
  154. built 'soft' with some other code built 'softfp'.
  155. However, passing the floating point arguments in integer
  156. registers is a bit inefficient, so if your ARM processor has
  157. a floating point unit, and you don't have pre-compiled
  158. 'soft' or 'softfp' code, using the EABIhf ABI will provide
  159. better floating point performances.
  160. If your processor does not have a floating point unit, then
  161. you must use this ABI.
  162. config BR2_ARM_EABIHF
  163. bool "EABIhf"
  164. depends on BR2_ARM_CPU_MAYBE_HAS_VFPV2 || BR2_ARM_CPU_HAS_VFPV2
  165. help
  166. The EABIhf is an extension of EABI which supports the 'hard'
  167. floating point model. This model uses the floating point
  168. unit to execute floating point instructions, and passes
  169. floating point arguments in floating point registers.
  170. It is more efficient than EABI for floating point related
  171. workload. However, it does not allow to link against code
  172. that has been pre-built for the 'soft' or 'softfp' floating
  173. point models.
  174. If your processor has a floating point unit, and you don't
  175. depend on existing pre-compiled code, this option is most
  176. likely the best choice.
  177. endchoice
  178. config BR2_ARM_ENABLE_NEON
  179. bool "Enable NEON SIMD extension support"
  180. depends on BR2_ARM_CPU_MAYBE_HAS_NEON
  181. select BR2_ARM_CPU_HAS_NEON
  182. help
  183. For some CPU cores, the NEON SIMD extension is optional.
  184. Select this option if you are certain your particular
  185. implementation has NEON support and you want to use it.
  186. choice
  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
  193. config BR2_ARM_SOFT_FLOAT
  194. bool "Soft float"
  195. depends on BR2_ARM_EABI
  196. select BR2_SOFT_FLOAT
  197. help
  198. This option allows to use software emulated floating
  199. point. It should be used for ARM cores that do not include a
  200. Vector Floating Point unit, such as ARMv5 cores (ARM926 for
  201. example) or certain ARMv6 cores.
  202. config BR2_ARM_FPU_VFPV2
  203. bool "VFPv2"
  204. depends on BR2_ARM_CPU_HAS_VFPV2 || BR2_ARM_CPU_MAYBE_HAS_VFPV2
  205. help
  206. This option allows to use the VFPv2 floating point unit, as
  207. available in some ARMv5 processors (ARM926EJ-S) and some
  208. ARMv6 processors (ARM1136JF-S, ARM1176JZF-S and ARM11
  209. MPCore).
  210. Note that this option is also safe to use for newer cores
  211. such as Cortex-A, because the VFPv3 and VFPv4 units are
  212. backward compatible with VFPv2.
  213. config BR2_ARM_FPU_VFPV3
  214. bool "VFPv3"
  215. depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
  216. help
  217. This option allows to use the VFPv3 floating point unit, as
  218. available in some ARMv7 processors (Cortex-A{8, 9}). This
  219. option requires a VFPv3 unit that has 32 double-precision
  220. registers, which is not necessarily the case in all SOCs
  221. based on Cortex-A{8, 9}. If you're unsure, use VFPv3-D16
  222. instead, which is guaranteed to work on all Cortex-A{8, 9}.
  223. Note that this option is also safe to use for newer cores
  224. that have a VFPv4 unit, because VFPv4 is backward compatible
  225. with VFPv3. They must of course also have 32
  226. double-precision registers.
  227. config BR2_ARM_FPU_VFPV3D16
  228. bool "VFPv3-D16"
  229. depends on BR2_ARM_CPU_HAS_VFPV3 || BR2_ARM_CPU_MAYBE_HAS_VFPV3
  230. help
  231. This option allows to use the VFPv3 floating point unit, as
  232. available in some ARMv7 processors (Cortex-A{8, 9}). This
  233. option requires a VFPv3 unit that has 16 double-precision
  234. registers, which is generally the case in all SOCs based on
  235. Cortex-A{8, 9}, even though VFPv3 is technically optional on
  236. Cortex-A9. This is the safest option for those cores.
  237. Note that this option is also safe to use for newer cores
  238. such that have a VFPv4 unit, because the VFPv4 is backward
  239. compatible with VFPv3.
  240. config BR2_ARM_FPU_VFPV4
  241. bool "VFPv4"
  242. depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
  243. help
  244. This option allows to use the VFPv4 floating point unit, as
  245. available in some ARMv7 processors (Cortex-A{5, 7, 12,
  246. 15}). This option requires a VFPv4 unit that has 32
  247. double-precision registers, which is not necessarily the
  248. case in all SOCs based on Cortex-A{5, 7, 12, 15}. If you're
  249. unsure, you should probably use VFPv4-D16 instead.
  250. Note that if you want binary code that works on all ARMv7
  251. cores, including the earlier Cortex-A{8, 9}, you should
  252. instead select VFPv3.
  253. config BR2_ARM_FPU_VFPV4D16
  254. bool "VFPv4-D16"
  255. depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
  256. help
  257. This option allows to use the VFPv4 floating point unit, as
  258. available in some ARMv7 processors (Cortex-A{5, 7, 12,
  259. 15}). This option requires a VFPv4 unit that has 16
  260. double-precision registers, which is always available on
  261. Cortex-A12 and Cortex-A15, but optional on Cortex-A5 and
  262. Cortex-A7.
  263. Note that if you want binary code that works on all ARMv7
  264. cores, including the earlier Cortex-A{8, 9}, you should
  265. instead select VFPv3-D16.
  266. config BR2_ARM_FPU_NEON
  267. bool "NEON"
  268. depends on BR2_ARM_CPU_HAS_NEON
  269. help
  270. This option allows to use the NEON SIMD unit, as available
  271. in some ARMv7 processors, as a floating-point unit. It
  272. should however be noted that using NEON for floating point
  273. operations doesn't provide a complete compatibility with the
  274. IEEE 754.
  275. config BR2_ARM_FPU_NEON_VFPV4
  276. bool "NEON/VFPv4"
  277. depends on BR2_ARM_CPU_HAS_VFPV4 || BR2_ARM_CPU_MAYBE_HAS_VFPV4
  278. depends on BR2_ARM_CPU_HAS_NEON
  279. help
  280. This option allows to use both the VFPv4 and the NEON SIMD
  281. units for floating point operations. Note that some ARMv7
  282. cores do not necessarily have VFPv4 and/or NEON support, for
  283. example on Cortex-A5 and Cortex-A7, support for VFPv4 and
  284. NEON is optional.
  285. endchoice
  286. choice
  287. prompt "ARM instruction set"
  288. depends on BR2_ARM_CPU_HAS_THUMB || BR2_ARM_CPU_HAS_THUMB2
  289. config BR2_ARM_INSTRUCTIONS_ARM_CHOICE
  290. bool "ARM"
  291. help
  292. This option instructs the compiler to generate regular ARM
  293. instructions, that are all 32 bits wide.
  294. config BR2_ARM_INSTRUCTIONS_THUMB
  295. bool "Thumb"
  296. depends on BR2_ARM_CPU_HAS_THUMB
  297. help
  298. This option instructions the compiler to generate Thumb
  299. instructions, which allows to mix 16 bits instructions and
  300. 32 bits instructions. This generally provides a much smaller
  301. compiled binary size.
  302. config BR2_ARM_INSTRUCTIONS_THUMB2
  303. bool "Thumb2"
  304. depends on BR2_ARM_CPU_HAS_THUMB2
  305. help
  306. This option instructions the compiler to generate Thumb2
  307. instructions, which allows to mix 16 bits instructions and
  308. 32 bits instructions. This generally provides a much smaller
  309. compiled binary size.
  310. endchoice
  311. config BR2_ARM_INSTRUCTIONS_ARM
  312. def_bool y
  313. depends on !(BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2)
  314. config BR2_ARCH
  315. default "arm" if BR2_arm
  316. default "armeb" if BR2_armeb
  317. config BR2_ENDIAN
  318. default "LITTLE" if BR2_arm
  319. default "BIG" if BR2_armeb
  320. config BR2_ARCH_HAS_ATOMICS
  321. default y
  322. config BR2_GCC_TARGET_CPU
  323. default "arm920t" if BR2_arm920t
  324. default "arm922t" if BR2_arm922t
  325. default "arm926ej-s" if BR2_arm926t
  326. default "arm1136j-s" if BR2_arm1136j_s
  327. default "arm1136jf-s" if BR2_arm1136jf_s
  328. default "arm1176jz-s" if BR2_arm1176jz_s
  329. default "arm1176jzf-s" if BR2_arm1176jzf_s
  330. default "cortex-a5" if BR2_cortex_a5
  331. default "cortex-a7" if BR2_cortex_a7
  332. default "cortex-a8" if BR2_cortex_a8
  333. default "cortex-a9" if BR2_cortex_a9
  334. default "cortex-a12" if BR2_cortex_a12
  335. default "cortex-a15" if BR2_cortex_a15
  336. default "fa526" if BR2_fa526
  337. default "marvell-pj4" if BR2_pj4
  338. default "strongarm" if BR2_strongarm
  339. default "xscale" if BR2_xscale
  340. default "iwmmxt" if BR2_iwmmxt
  341. config BR2_GCC_TARGET_ARCH
  342. default "armv4t" if BR2_arm920t
  343. default "armv4t" if BR2_arm922t
  344. default "armv5te" if BR2_arm926t
  345. default "armv6j" if BR2_arm1136jf_s_r0
  346. default "armv6k" if BR2_arm1136jf_s_r1
  347. default "armv6zk" if BR2_arm1176jz_s
  348. default "armv6zk" if BR2_arm1176jzf_s
  349. default "armv7-a" if BR2_cortex_a5
  350. default "armv7-a" if BR2_cortex_a7
  351. default "armv7-a" if BR2_cortex_a8
  352. default "armv7-a" if BR2_cortex_a9
  353. default "armv7-a" if BR2_cortex_a12
  354. default "armv7-a" if BR2_cortex_a15
  355. default "armv4" if BR2_fa526
  356. default "armv7-a" if BR2_pj4
  357. default "armv4" if BR2_strongarm
  358. default "armv5te" if BR2_xscale
  359. default "iwmmxt" if BR2_iwmmxt
  360. config BR2_GCC_TARGET_ABI
  361. default "aapcs-linux"
  362. config BR2_GCC_TARGET_FPU
  363. default "vfp" if BR2_ARM_FPU_VFPV2
  364. default "vfpv3" if BR2_ARM_FPU_VFPV3
  365. default "vfpv3-d16" if BR2_ARM_FPU_VFPV3D16
  366. default "vfpv4" if BR2_ARM_FPU_VFPV4
  367. default "vfpv4-d16" if BR2_ARM_FPU_VFPV4D16
  368. default "neon" if BR2_ARM_FPU_NEON
  369. default "neon-vfpv4" if BR2_ARM_FPU_NEON_VFPV4
  370. config BR2_GCC_TARGET_FLOAT_ABI
  371. default "soft" if BR2_ARM_SOFT_FLOAT
  372. default "softfp" if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABI
  373. default "hard" if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABIHF
  374. config BR2_GCC_TARGET_MODE
  375. default "arm" if BR2_ARM_INSTRUCTIONS_ARM
  376. default "thumb" if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2