File tree Expand file tree Collapse file tree 5 files changed +71
-33
lines changed Expand file tree Collapse file tree 5 files changed +71
-33
lines changed Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ find_program(CMAKE_ASM_COMPILER ${CROSS_COMPILE}armclang PATHS ${TOOLCHAIN_HOME}
1010# the final executable.
1111#
1212include (${ZEPHYR_BASE} /cmake/gcc-m-cpu.cmake)
13+ include (${ZEPHYR_BASE} /cmake/gcc-m-fpu.cmake)
1314set (CMAKE_SYSTEM_PROCESSOR ${GCC_M_CPU} )
1415
1516list (APPEND TOOLCHAIN_C_FLAGS
@@ -30,20 +31,8 @@ else()
3031
3132 list (APPEND TOOLCHAIN_C_FLAGS -mabi=aapcs)
3233
33- # Defines a mapping from GCC_M_CPU to FPU
34-
35- if (CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION)
36- set (PRECISION_TOKEN)
37- else ()
38- set (PRECISION_TOKEN sp-)
39- endif ()
40-
41- set (FPU_FOR_cortex-m4 fpv4-${PRECISION_TOKEN} d16)
42- set (FPU_FOR_cortex-m7 fpv5-${PRECISION_TOKEN} d16)
43- set (FPU_FOR_cortex-m33 fpv5-${PRECISION_TOKEN} d16)
44-
4534 if (CONFIG_FPU)
46- list (APPEND TOOLCHAIN_C_FLAGS -mfpu=${FPU_FOR_ ${GCC_M_CPU} })
35+ list (APPEND TOOLCHAIN_C_FLAGS -mfpu=${GCC_M_FPU } )
4736 if (CONFIG_FP_SOFTABI)
4837 list (APPEND TOOLCHAIN_C_FLAGS -mfloat-abi=softfp)
4938 elseif (CONFIG_FP_HARDABI)
Original file line number Diff line number Diff line change @@ -51,6 +51,7 @@ foreach(file_name include/stddef.h include-fixed/limits.h)
5151endforeach ()
5252
5353include (${ZEPHYR_BASE} /cmake/gcc-m-cpu.cmake)
54+ include (${ZEPHYR_BASE} /cmake/gcc-m-fpu.cmake)
5455
5556if ("${ARCH} " STREQUAL "arm" )
5657 include (${ZEPHYR_BASE} /cmake/compiler/gcc/target_arm.cmake)
Original file line number Diff line number Diff line change @@ -10,26 +10,10 @@ endif()
1010list (APPEND TOOLCHAIN_C_FLAGS -mabi=aapcs)
1111list (APPEND TOOLCHAIN_LD_FLAGS -mabi=aapcs)
1212
13- # Defines a mapping from GCC_M_CPU to FPU
14-
15- if (CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION)
16- set (PRECISION_TOKEN)
17- else ()
18- set (PRECISION_TOKEN sp-)
19- endif ()
20-
21- set (FPU_FOR_cortex-m4 fpv4-${PRECISION_TOKEN} d16)
22- set (FPU_FOR_cortex-m7 fpv5-${PRECISION_TOKEN} d16)
23- set (FPU_FOR_cortex-m33 fpv5-${PRECISION_TOKEN} d16)
24- set (FPU_FOR_cortex-m33+nodsp fpv5-${PRECISION_TOKEN} d16)
25- set (FPU_FOR_cortex-m55 auto)
26- set (FPU_FOR_cortex-m55+nomve.fp auto)
27- set (FPU_FOR_cortex-m55+nomve auto)
28- set (FPU_FOR_cortex-m55+nodsp auto)
29-
3013if (CONFIG_FPU)
31- list (APPEND TOOLCHAIN_C_FLAGS -mfpu=${FPU_FOR_${GCC_M_CPU} })
32- list (APPEND TOOLCHAIN_LD_FLAGS -mfpu=${FPU_FOR_${GCC_M_CPU} })
14+ list (APPEND TOOLCHAIN_C_FLAGS -mfpu=${GCC_M_FPU} )
15+ list (APPEND TOOLCHAIN_LD_FLAGS -mfpu=${GCC_M_FPU} )
16+
3317 if (CONFIG_FP_SOFTABI)
3418 list (APPEND TOOLCHAIN_C_FLAGS -mfloat-abi=softfp)
3519 list (APPEND TOOLCHAIN_LD_FLAGS -mfloat-abi=softfp)
Original file line number Diff line number Diff line change @@ -35,13 +35,36 @@ if("${ARCH}" STREQUAL "arm")
3535 set (GCC_M_CPU cortex-m55+nodsp)
3636 endif ()
3737 elseif (CONFIG_CPU_CORTEX_R4)
38- set (GCC_M_CPU cortex-r4)
38+ if (CONFIG_FPU AND CONFIG_CPU_HAS_VFP)
39+ set (GCC_M_CPU cortex-r4f)
40+ else ()
41+ set (GCC_M_CPU cortex-r4)
42+ endif ()
3943 elseif (CONFIG_CPU_CORTEX_R5)
4044 set (GCC_M_CPU cortex-r5)
45+ if (CONFIG_FPU AND CONFIG_CPU_HAS_VFP)
46+ if (NOT CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
47+ set (GCC_M_CPU ${GCC_M_CPU} +nofp.dp)
48+ endif ()
49+ else ()
50+ set (GCC_M_CPU ${GCC_M_CPU} +nofp)
51+ endif ()
4152 elseif (CONFIG_CPU_CORTEX_R7)
4253 set (GCC_M_CPU cortex-r7)
54+ if (CONFIG_FPU AND CONFIG_CPU_HAS_VFP)
55+ if (NOT CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
56+ set (GCC_M_CPU ${GCC_M_CPU} +nofp.dp)
57+ endif ()
58+ else ()
59+ set (GCC_M_CPU ${GCC_M_CPU} +nofp)
60+ endif ()
4361 elseif (CONFIG_CPU_CORTEX_R52)
4462 set (GCC_M_CPU cortex-r52)
63+ if (CONFIG_FPU AND CONFIG_CPU_HAS_VFP)
64+ if (NOT CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
65+ set (GCC_M_CPU ${GCC_M_CPU} +nofp.dp)
66+ endif ()
67+ endif ()
4568 elseif (CONFIG_CPU_CORTEX_A9)
4669 set (GCC_M_CPU cortex-a9)
4770 else ()
Original file line number Diff line number Diff line change 1+ # SPDX-License-Identifier: Apache-2.0
2+
3+ # Determines what argument to give to -mfpu= based on the
4+ # KConfig'uration and sets this to GCC_M_FPU
5+
6+ if (CONFIG_FPU)
7+
8+ if ("${ARCH} " STREQUAL "arm" )
9+ if (CONFIG_CPU_AARCH32_CORTEX_R)
10+ if (CONFIG_CPU_CORTEX_R4 OR CONFIG_CPU_CORTEX_R5) # VFPv3
11+ if (CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
12+ set (GCC_M_FPU vfpv3-d16)
13+ elseif (CONFIG_VFP_FEATURE_SINGLE_PRECISION)
14+ set (GCC_M_FPU vfpv3xd)
15+ endif ()
16+ if (CONFIG_VFP_FEATURE_HALF_PRECISION)
17+ set (GCC_M_FPU ${GCC_M_FPU} -fp16)
18+ endif ()
19+ endif ()
20+ elseif (CONFIG_CPU_CORTEX_M)
21+ # Defines a mapping from GCC_M_CPU to FPU
22+ if (CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION)
23+ set (PRECISION_TOKEN)
24+ else ()
25+ set (PRECISION_TOKEN sp-)
26+ endif ()
27+
28+ set (FPU_FOR_cortex-m4 fpv4-${PRECISION_TOKEN} d16)
29+ set (FPU_FOR_cortex-m7 fpv5-${PRECISION_TOKEN} d16)
30+ set (FPU_FOR_cortex-m33 fpv5-${PRECISION_TOKEN} d16)
31+ set (FPU_FOR_cortex-m33+nodsp fpv5-${PRECISION_TOKEN} d16)
32+ set (FPU_FOR_cortex-m55 auto)
33+ set (FPU_FOR_cortex-m55+nomve.fp auto)
34+ set (FPU_FOR_cortex-m55+nomve auto)
35+ set (FPU_FOR_cortex-m55+nodsp auto)
36+
37+ set (GCC_M_FPU ${FPU_FOR_${GCC_M_CPU} })
38+ endif ()
39+ endif ()
40+
41+ endif () #CONFIG_FPU
You can’t perform that action at this time.
0 commit comments