configCore.cmake 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. include(CMakePrintHelpers)
  2. cmake_policy(SET CMP0077 NEW)
  3. # Config core
  4. SET(CORTEXM ON)
  5. option(HARDFP "Hard floating point" ON)
  6. option(LITTLEENDIAN "Little endian" ON)
  7. option(FASTMATHCOMPUTATIONS "Fast Math enabled" OFF)
  8. # More detailed identification for benchmark results
  9. SET(COREID ARMCM7)
  10. ###################
  11. #
  12. # ALL CORTEX
  13. #
  14. function(configcore PROJECTNAME ROOT)
  15. if(EXPERIMENTAL)
  16. experimentalConfigcore(${PROJECTNAME} ${ROOT})
  17. SET(COREID ${COREID} PARENT_SCOPE)
  18. endif()
  19. ###################
  20. #
  21. # CORTEX-A
  22. #
  23. # CORTEX-A15
  24. if (ARM_CPU MATCHES "^[cC]ortex-[aA]15([^0-9].*)?$" )
  25. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
  26. SET(CORTEXM OFF)
  27. target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
  28. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
  29. SET(HARDFP ON)
  30. SET(LITTLEENDIAN ON)
  31. SET(COREID ARMCA15 PARENT_SCOPE)
  32. endif()
  33. # CORTEX-A9
  34. if (ARM_CPU MATCHES "^[cC]ortex-[aA]9([^0-9].*)?$" )
  35. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
  36. SET(CORTEXM OFF)
  37. target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
  38. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
  39. SET(HARDFP ON)
  40. SET(LITTLEENDIAN ON)
  41. SET(COREID ARMCA9 PARENT_SCOPE)
  42. endif()
  43. # CORTEX-A7
  44. if (ARM_CPU MATCHES "^[cC]ortex-[aA]7([^0-9].*)?$" )
  45. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
  46. SET(CORTEXM OFF)
  47. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
  48. target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
  49. SET(HARDFP ON)
  50. SET(LITTLEENDIAN ON)
  51. SET(COREID ARMCA7 PARENT_SCOPE)
  52. endif()
  53. # CORTEX-A5
  54. if (ARM_CPU MATCHES "^[cC]ortex-[aA]5([^0-9].*)?$" )
  55. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
  56. SET(CORTEXM OFF)
  57. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
  58. target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
  59. SET(HARDFP ON)
  60. SET(LITTLEENDIAN ON)
  61. SET(COREID ARMCA5 PARENT_SCOPE)
  62. endif()
  63. ###################
  64. #
  65. # CORTEX-M
  66. #
  67. if (ARM_CPU MATCHES "^[cC]ortex-[mM]55([^0-9].*)?$")
  68. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  69. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  70. target_compile_definitions(${PROJECTNAME} PRIVATE ARMv81MML_DSP_DP_MVE_FP)
  71. SET(HARDFP ON)
  72. SET(LITTLEENDIAN ON)
  73. SET(COREID ARMv81MML_DSP_DP_MVE_FP PARENT_SCOPE)
  74. endif()
  75. # CORTEX-M35
  76. if (ARM_CPU MATCHES "^[cC]ortex-[mM]35([^0-9].*)?$")
  77. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  78. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  79. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM35P_DSP_FP)
  80. SET(HARDFP ON)
  81. SET(LITTLEENDIAN ON)
  82. SET(COREID ARMCM35P_DSP_FP PARENT_SCOPE)
  83. endif()
  84. # CORTEX-M33
  85. if (ARM_CPU MATCHES "^[cC]ortex-[mM]33([^0-9].*)?$")
  86. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  87. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  88. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM33_DSP_FP)
  89. SET(HARDFP ON)
  90. SET(LITTLEENDIAN ON)
  91. SET(COREID ARMCM33_DSP_FP PARENT_SCOPE)
  92. endif()
  93. # CORTEX-M23
  94. if (ARM_CPU MATCHES "^[cC]ortex-[mM]23([^0-9].*)?$")
  95. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  96. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  97. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM23)
  98. SET(HARDFP OFF)
  99. SET(LITTLEENDIAN ON)
  100. SET(COREID ARMCM23 PARENT_SCOPE)
  101. endif()
  102. # CORTEX-M7
  103. if (ARM_CPU MATCHES "^[cC]ortex-[mM]7([^0-9].*)?$")
  104. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  105. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  106. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM7_DP)
  107. SET(HARDFP ON)
  108. SET(LITTLEENDIAN ON)
  109. SET(COREID ARMCM7_DP PARENT_SCOPE)
  110. endif()
  111. # CORTEX-M4
  112. if (ARM_CPU MATCHES "^[cC]ortex-[mM]4([^0-9].*)?$")
  113. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  114. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  115. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM4_FP)
  116. SET(HARDFP ON)
  117. SET(LITTLEENDIAN ON)
  118. SET(COREID ARMCM4_FP PARENT_SCOPE)
  119. endif()
  120. # CORTEX-M3
  121. if (ARM_CPU MATCHES "^[cC]ortex-[mM]3([^0-9].*)?$")
  122. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  123. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  124. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM3)
  125. SET(HARDFP OFF)
  126. SET(LITTLEENDIAN ON)
  127. SET(COREID ARMCM3 PARENT_SCOPE)
  128. endif()
  129. # CORTEX-M0plus
  130. if (ARM_CPU MATCHES "^[cC]ortex-[mM]0p([^0-9].*)?$")
  131. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  132. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  133. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0P)
  134. SET(HARDFP OFF)
  135. SET(LITTLEENDIAN ON)
  136. SET(COREID ARMCM0P PARENT_SCOPE)
  137. endif()
  138. # CORTEX-M0
  139. if (ARM_CPU MATCHES "^[cC]ortex-[mM]0([^0-9].*)?$")
  140. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  141. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  142. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0)
  143. SET(HARDFP OFF)
  144. SET(LITTLEENDIAN ON)
  145. SET(COREID ARMCM0 PARENT_SCOPE)
  146. endif()
  147. ###################
  148. #
  149. # FEATURES
  150. #
  151. if (NEON AND NOT CORTEXM)
  152. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON)
  153. endif()
  154. if (NEONEXPERIMENTAL AND NOT CORTEXM)
  155. #target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL __FPU_PRESENT)
  156. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL)
  157. endif()
  158. if (HELIUM AND CORTEXM)
  159. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM)
  160. endif()
  161. if (MVEF AND CORTEXM)
  162. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEF)
  163. endif()
  164. if (MVEI AND CORTEXM)
  165. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEI)
  166. endif()
  167. compilerSpecificCompileOptions(${PROJECTNAME} ${ROOT})
  168. endfunction()