# SPDX-License-Identifier: Apache-2.0

# Configures CMake for using ccac

# MWDT compiler (CCAC) can't be used for preprocessing the DTS sources as it has
# weird restrictions about file extensions. Synopsys Jira issue: P10019563-38578
# Let's temporarily use GNU compiler instead.
find_program(CMAKE_DTS_PREPROCESSOR arc-elf32-gcc)
if (NOT CMAKE_DTS_PREPROCESSOR)
  find_program(CMAKE_DTS_PREPROCESSOR arc-linux-gcc)
endif()

if (NOT CMAKE_DTS_PREPROCESSOR)
  find_program(CMAKE_DTS_PREPROCESSOR gcc)
endif()

if(NOT CMAKE_DTS_PREPROCESSOR)
  message(FATAL_ERROR "Zephyr was unable to find any GNU compiler (ARC or host one) for DTS preprocessing")
endif()

find_program(CMAKE_C_COMPILER ${CROSS_COMPILE}ccac PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
find_program(CMAKE_LLVM_COV ${CROSS_COMPILE}llvm-cov PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
set(CMAKE_GCOV "${CMAKE_LLVM_COV} gcov")

if(CMAKE_C_COMPILER STREQUAL CMAKE_C_COMPILER-NOTFOUND)
  message(FATAL_ERROR "Zephyr was unable to find the Metaware compiler")
endif()

execute_process(
  COMMAND ${CMAKE_C_COMPILER} --version
  RESULT_VARIABLE ret
  OUTPUT_VARIABLE full_version_output
  ERROR_QUIET
  )

if(ret)
  message(FATAL_ERROR "Executing the below command failed. Are permissions set correctly?
  '${CMAKE_C_COMPILER} --version'"
  )
else()
  set(ARCMWDT_MIN_REQUIRED_VERS "2022.09")
#
# Regular version has format: "T-2022.06"
# Engineering builds: "ENG-2022.06-001"
# Check-in build: ENG-2022.12-D1039-C39098348
#
  string(REGEX MATCH "\ (ENG|[A-Z])-[0-9][0-9][0-9][0-9]\.[0-9][0-9]+.*"
    vers_string "${full_version_output}")

  string(REGEX MATCH "[0-9][0-9][0-9][0-9]\.[0-9][0-9]"
    reduced_version "${vers_string}")

  if("${reduced_version}" VERSION_LESS ${ARCMWDT_MIN_REQUIRED_VERS})
    message(FATAL_ERROR "Could NOT find ccac: Found unsuitable version \"${reduced_version}\", but required is at least \"${ARCMWDT_MIN_REQUIRED_VERS}\" (found ${CROSS_COMPILE}ccac)")
  endif()
endif()
