| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- include(CMakePrintHelpers)
- cmake_policy(SET CMP0077 NEW)
- # Config core
- SET(CORTEXM ON)
- SET(CORTEXA OFF)
- SET(CORTEXR OFF)
- option(HARDFP "Hard floating point" ON)
- option(LITTLEENDIAN "Little endian" ON)
- option(FASTMATHCOMPUTATIONS "Fast Math enabled" OFF)
- option(FLOAT16 "Scalar float16 supported by the core" OFF)
- option(HYBRID "Hybrid instrinsics" OFF)
- # More detailed identification for benchmark results
- SET(COREID ARMCM7)
- ###################
- #
- # ALL CORTEX
- #
- function(configcore PROJECTNAME ROOT)
- if(EXPERIMENTAL)
- experimentalConfigcore(${PROJECTNAME} ${ROOT})
- SET(COREID ${COREID} PARENT_SCOPE)
- endif()
- ###################
- #
- # CORTEX-A
- #
- # CORTEX-A32
- if (ARM_CPU MATCHES "^[cC]ortex-[aA]32([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
- SET(CORTEXM OFF)
- SET(CORTEXA ON)
- SET(CORTEXR OFF)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv8A)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCA32 PARENT_SCOPE)
- endif()
- # CORTEX-A15
- if (ARM_CPU MATCHES "^[cC]ortex-[aA]15([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
- SET(CORTEXM OFF)
- SET(CORTEXA ON)
- SET(CORTEXR OFF)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCA15 PARENT_SCOPE)
- endif()
-
- # CORTEX-A9
- if (ARM_CPU MATCHES "^[cC]ortex-[aA]9([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
- SET(CORTEXM OFF)
- SET(CORTEXA ON)
- SET(CORTEXR OFF)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCA9 PARENT_SCOPE)
-
- endif()
-
- # CORTEX-A7
- if (ARM_CPU MATCHES "^[cC]ortex-[aA]7([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
- SET(CORTEXM OFF)
- SET(CORTEXA ON)
- SET(CORTEXR OFF)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCA7 PARENT_SCOPE)
-
- endif()
-
- # CORTEX-A5
- if (ARM_CPU MATCHES "^[cC]ortex-[aA]5([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
- SET(CORTEXM OFF)
- SET(CORTEXA ON)
- SET(CORTEXR OFF)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCA5 PARENT_SCOPE)
- endif()
- ###################
- #
- # CORTEX-R
- #
- # CORTEX-R52
- if (ARM_CPU MATCHES "^[cC]ortex-[rR]52([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${CORER}/Include")
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCR52)
- SET(CORTEXM OFF)
- SET(CORTEXA OFF)
- SET(CORTEXR ON)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv8R)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXR)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCR52 PARENT_SCOPE)
- endif()
- # CORTEX-R8
- if (ARM_CPU MATCHES "^[cC]ortex-[rR]8([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${CORER}/Include")
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCR8)
- SET(CORTEXM OFF)
- SET(CORTEXA OFF)
- SET(CORTEXR ON)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7R)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXR)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCR8 PARENT_SCOPE)
- endif()
- # CORTEX-R5
- if (ARM_CPU MATCHES "^[cC]ortex-[rR]5([^0-9].*)?$" )
- target_include_directories(${PROJECTNAME} PUBLIC "${CORER}/Include")
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCR5)
- SET(CORTEXM OFF)
- SET(CORTEXA OFF)
- SET(CORTEXR ON)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7R)
-
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXR)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCR5 PARENT_SCOPE)
- endif()
-
- ###################
- #
- # CORTEX-M
- #
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]55([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMv81MML_DSP_DP_MVE_FP)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMv81MML_DSP_DP_MVE_FP PARENT_SCOPE)
- if (HYBRID)
- target_compile_definitions(${PROJECTNAME} PRIVATE __ARM_MVE_HYBRID_INTRINSICS)
- endif()
- endif()
-
- # CORTEX-M35
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]35([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM35P_DSP_FP)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM35P_DSP_FP PARENT_SCOPE)
- endif()
-
- # CORTEX-M33
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]33([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM33_DSP_FP)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM33_DSP_FP PARENT_SCOPE)
- endif()
-
- # CORTEX-M23
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]23([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM23)
- SET(HARDFP OFF)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM23 PARENT_SCOPE)
- endif()
-
- # CORTEX-M7
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]7([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM7_DP)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM7_DP PARENT_SCOPE)
- endif()
-
- # CORTEX-M4
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]4([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM4_FP)
- SET(HARDFP ON)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM4_FP PARENT_SCOPE)
- endif()
-
- # CORTEX-M3
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]3([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM3)
- SET(HARDFP OFF)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM3 PARENT_SCOPE)
- endif()
-
- # CORTEX-M0plus
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]0p([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0P)
- SET(HARDFP OFF)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM0P PARENT_SCOPE)
- endif()
-
- # CORTEX-M0
- if (ARM_CPU MATCHES "^[cC]ortex-[mM]0([^0-9].*)?$")
- target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
- target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0)
- SET(HARDFP OFF)
- SET(LITTLEENDIAN ON)
- SET(COREID ARMCM0 PARENT_SCOPE)
- endif()
-
- ###################
- #
- # FEATURES
- #
-
- if (NEON AND NOT CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON)
- endif()
-
- if (NEONEXPERIMENTAL AND NOT CORTEXM)
- #target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL __FPU_PRESENT)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL)
- endif()
- if (HELIUMEXPERIMENTAL)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM_EXPERIMENTAL)
- endif()
- if (HELIUM AND CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM)
- endif()
- if (MVEF AND CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEF)
- endif()
- if (MVEI AND CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEI)
- endif()
- compilerSpecificCompileOptions(${PROJECTNAME} ${ROOT})
- endfunction()
|