1# Copyright (c) 2025 IAR Systems AB
2#
3# SPDX-License-Identifier: Apache-2.0
4
5# Determines what argument to give to --fpu= based on the
6# KConfiguration and sets this to ICCARM_FPU
7
8if(CONFIG_FPU)
9
10  # 32-bit
11  if("${ARCH}" STREQUAL "arm")
12    if(CONFIG_CPU_AARCH32_CORTEX_R)
13      if(CONFIG_CPU_CORTEX_R4 OR CONFIG_CPU_CORTEX_R5) # VFPv3
14        if(CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
15          set(ICCARM_FPU VFPv3_D16)
16        elseif(CONFIG_VFP_FEATURE_SINGLE_PRECISION)
17          set(ICCARM_FPU VFPv3-SP)
18        endif()
19        if(CONFIG_VFP_FEATURE_HALF_PRECISION)
20          set(ICCARM_FPU ${ICCARM_FPU}_Fp16)
21        endif()
22      elseif(CONFIG_CPU_CORTEX_R52)
23        if(CONFIG_VFP_FEATURE_DOUBLE_PRECISION)
24          set(ICCARM_FPU VFPv5_D16)
25        elseif(CONFIG_VFP_FEATURE_SINGLE_PRECISION)
26          set(ICCARM_FPU VFPv5-SP)
27        endif()
28      endif()
29    elseif(CONFIG_CPU_CORTEX_M)
30      # Defines a mapping from ICCARM_CPU to FPU
31      if(CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION)
32        set(PRECISION_TOKEN _D16)
33      else()
34        set(PRECISION_TOKEN _SP)
35      endif()
36
37      set(FPU_FOR_Cortex-M4           FPv4${PRECISION_TOKEN})
38      set(FPU_FOR_Cortex-M7           FPv5${PRECISION_TOKEN})
39      set(FPU_FOR_Cortex-M33          FPv5${PRECISION_TOKEN})
40      set(FPU_FOR_Cortex-M33.no_dsp   FPv5${PRECISION_TOKEN})
41      set(FPU_FOR_Cortex-M55          FPv5${PRECISION_TOKEN})
42      set(FPU_FOR_Cortex-M55.no_mve   FPv5${PRECISION_TOKEN})
43      set(FPU_FOR_Cortex-M55.no_dsp   FPv5${PRECISION_TOKEN})
44      set(FPU_FOR_Cortex-M85          FPv5${PRECISION_TOKEN})
45      set(FPU_FOR_Cortex-M85.no_mve   FPv5${PRECISION_TOKEN})
46      set(FPU_FOR_Cortex-M85.no_dsp   FPv5${PRECISION_TOKEN})
47
48      set(ICCARM_FPU ${FPU_FOR_${ICCARM_CPU}})
49    endif()
50  # 64-bit
51  else()
52    set(ICCARM_FPU none)
53  endif()
54
55endif() #CONFIG_FPU
56