#
# Copyright (c) 2019 Microchip Technology Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

zephyr_library()
zephyr_library_sources(pinmux.c)

if(DEFINED ENV{EVERGLADES_SPI_GEN})
  # Grab it from environment variable if defined
  set(EVERGLADES_SPI_GEN $ENV{EVERGLADES_SPI_GEN})
else()
  # Else find the tool in PATH

  if(CMAKE_HOST_APPLE)
    # CMAKE_HOST_UNIX is also true for Apple,
    # but there is no tool for Apple. So
    # we need to skip it.
    message(NOTICE "There is no SPI image generation tool for MacOS.")
  elseif(CMAKE_HOST_UNIX)
    set(EVERGLADES_SPI_GEN_FILENAME everglades_spi_gen_lin64)
  elseif(CMAKE_HOST_WIN32)
    set(EVERGLADES_SPI_GEN_FILENAME everglades_spi_gen.exe)
  endif()

  find_file(EVERGLADES_SPI_GEN_FINDFILE ${EVERGLADES_SPI_GEN_FILENAME} NO_DEFAULT_PATH)
  if(EVERGLADES_SPI_GEN_FINDFILE STREQUAL EVERGLADES_SPI_GEN_FINDFILE-NOTFOUND)
    message(WARNING "Microchip SPI Image Generation tool (${EVERGLADES_SPI_GEN_FILENAME}) is not available. SPI Image will not be generated.")
  else()
    set(EVERGLADES_SPI_GEN ${EVERGLADES_SPI_GEN_FINDFILE})
  endif()

  unset(EVERGLADES_SPI_GEN_FINDFILE)
  unset(EVERGLADES_SPI_GEN_FILENAME)
endif()

if(DEFINED EVERGLADES_SPI_GEN)
  if(DEFINED ENV{EVERGLADES_SPI_CFG})
    set(EVERGLADES_SPI_CFG $ENV{EVERGLADES_SPI_CFG})
  else()
    set(EVERGLADES_SPI_CFG ${BOARD_DIR}/support/spi_cfg.txt)
  endif()

  set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
    COMMAND ${EVERGLADES_SPI_GEN}
    -i ${EVERGLADES_SPI_CFG}
    -o ${PROJECT_BINARY_DIR}/${SPI_IMAGE_NAME}
  )

  unset(EVERGLADES_SPI_GEN)
  unset(EVERGLADES_SPI_CFG)
endif()
