Config.in.arm 12 KB

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