blob: c68c41c4624b11d65bdcc5949f3549504223ef87 [file] [log] [blame]
# SPDX-License-Identifier: Apache-2.0
# CCAC/MetaWare (MWDT) RISC-V target configuration
# Derive core (e.g. -av5rmx) and ISA feature flags (-Z*)
# Strictly from SoC Kconfig booleans (no board heuristics).
if(CONFIG_SOC_SERIES_RMX)
set(ARCMWDT_RISCV_CORE -av5rmx)
elseif(CONFIG_SOC_SERIES_RHX)
set(ARCMWDT_RISCV_CORE -av5rhx)
endif()
if(NOT ARCMWDT_RISCV_CORE)
message(FATAL_ERROR
"MWDT: Unable to determine ARC-V series "
"from SoC Kconfig (expect CONFIG_SOC_SERIES_RMX "
"or CONFIG_SOC_SERIES_RHX, etc.).")
endif()
# Translate Zephyr RISC-V ISA Kconfig options to MWDT (ccac) flags
set(ARCMWDT_RISCV_ISA_FLAGS)
# Base ISA extensions
if(CONFIG_RISCV_ISA_EXT_M)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zm)
endif()
if(CONFIG_RISCV_ISA_EXT_A)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Za)
endif()
# System and fence extensions
if(CONFIG_RISCV_ISA_EXT_ZICSR)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zicsr)
endif()
if(CONFIG_RISCV_ISA_EXT_ZIFENCEI)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zifencei)
endif()
# Base counters/timers
if(CONFIG_RISCV_ISA_EXT_ZICNTR)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zicntr)
endif()
# Floating point
if(CONFIG_RISCV_ISA_EXT_F)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zf)
endif()
if(CONFIG_RISCV_ISA_EXT_D)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zd)
endif()
# Bitmanip extensions
if(CONFIG_RISCV_ISA_EXT_ZBA)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zba)
endif()
if(CONFIG_RISCV_ISA_EXT_ZBB)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zbb)
endif()
if(CONFIG_RISCV_ISA_EXT_ZBC)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zbc)
endif()
if(CONFIG_RISCV_ISA_EXT_ZBS)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zbs)
endif()
# Compressed ISA and sub-extensions
# If full C is selected, use -Zc and add compressed FPU sub-exts as selected.
if(CONFIG_RISCV_ISA_EXT_C)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zc)
if(CONFIG_RISCV_ISA_EXT_ZCF)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcf)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCD)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcd)
endif()
else()
if(CONFIG_RISCV_ISA_EXT_ZCA)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zca)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCB)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcb)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCD)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcd)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCF)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcf)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCMP)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcmp)
endif()
if(CONFIG_RISCV_ISA_EXT_ZCMT)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zcmt)
endif()
endif()
# Multiply-only (when M is not selected)
if(NOT CONFIG_RISCV_ISA_EXT_M AND CONFIG_RISCV_ISA_EXT_ZMMUL)
list(APPEND ARCMWDT_RISCV_ISA_FLAGS -Zmmul)
endif()
# Apply derived flags
if(ARCMWDT_RISCV_CORE)
list(APPEND TOOLCHAIN_C_FLAGS ${ARCMWDT_RISCV_CORE})
list(APPEND TOOLCHAIN_LD_FLAGS ${ARCMWDT_RISCV_CORE})
endif()
if(ARCMWDT_RISCV_ISA_FLAGS)
list(APPEND TOOLCHAIN_C_FLAGS ${ARCMWDT_RISCV_ISA_FLAGS})
list(APPEND TOOLCHAIN_LD_FLAGS ${ARCMWDT_RISCV_ISA_FLAGS})
endif()