configCore.cmake 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. # CORTEX-M35
  68. if (ARM_CPU MATCHES "^[cC]ortex-[mM]35([^0-9].*)?$")
  69. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  70. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  71. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM35P_DSP_FP)
  72. SET(HARDFP ON)
  73. SET(LITTLEENDIAN ON)
  74. SET(COREID ARMCM35P_DSP_FP PARENT_SCOPE)
  75. endif()
  76. # CORTEX-M33
  77. if (ARM_CPU MATCHES "^[cC]ortex-[mM]33([^0-9].*)?$")
  78. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  79. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  80. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM33_DSP_FP)
  81. SET(HARDFP ON)
  82. SET(LITTLEENDIAN ON)
  83. SET(COREID ARMCM33_DSP_FP PARENT_SCOPE)
  84. endif()
  85. # CORTEX-M23
  86. if (ARM_CPU MATCHES "^[cC]ortex-[mM]23([^0-9].*)?$")
  87. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  88. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  89. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM23)
  90. SET(HARDFP OFF)
  91. SET(LITTLEENDIAN ON)
  92. SET(COREID ARMCM23 PARENT_SCOPE)
  93. endif()
  94. # CORTEX-M7
  95. if (ARM_CPU MATCHES "^[cC]ortex-[mM]7([^0-9].*)?$")
  96. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  97. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  98. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM7_DP)
  99. SET(HARDFP ON)
  100. SET(LITTLEENDIAN ON)
  101. SET(COREID ARMCM7_DP PARENT_SCOPE)
  102. endif()
  103. # CORTEX-M4
  104. if (ARM_CPU MATCHES "^[cC]ortex-[mM]4([^0-9].*)?$")
  105. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  106. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  107. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM4_FP)
  108. SET(HARDFP ON)
  109. SET(LITTLEENDIAN ON)
  110. SET(COREID ARMCM4_FP PARENT_SCOPE)
  111. endif()
  112. # CORTEX-M3
  113. if (ARM_CPU MATCHES "^[cC]ortex-[mM]3([^0-9].*)?$")
  114. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  115. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  116. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM3)
  117. SET(HARDFP OFF)
  118. SET(LITTLEENDIAN ON)
  119. SET(COREID ARMCM3 PARENT_SCOPE)
  120. endif()
  121. # CORTEX-M0plus
  122. if (ARM_CPU MATCHES "^[cC]ortex-[mM]0p([^0-9].*)?$")
  123. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  124. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  125. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0P)
  126. SET(HARDFP OFF)
  127. SET(LITTLEENDIAN ON)
  128. SET(COREID ARMCM0P PARENT_SCOPE)
  129. endif()
  130. # CORTEX-M0
  131. if (ARM_CPU MATCHES "^[cC]ortex-[mM]0([^0-9].*)?$")
  132. target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
  133. target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
  134. target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0)
  135. SET(HARDFP OFF)
  136. SET(LITTLEENDIAN ON)
  137. SET(COREID ARMCM0 PARENT_SCOPE)
  138. endif()
  139. ###################
  140. #
  141. # FEATURES
  142. #
  143. if (NEON AND NOT CORTEXM)
  144. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON)
  145. endif()
  146. if (NEONEXPERIMENTAL AND NOT CORTEXM)
  147. #target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL __FPU_PRESENT)
  148. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL)
  149. endif()
  150. if (HELIUM AND CORTEXM)
  151. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM)
  152. endif()
  153. if (MVEF AND CORTEXM)
  154. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEF)
  155. endif()
  156. if (MVEI AND CORTEXM)
  157. target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEI)
  158. endif()
  159. compilerSpecificCompileOptions(${PROJECTNAME} ${ROOT})
  160. endfunction()