# Copyright (c) 2023 Meta Platforms
# SPDX-License-Identifier: Apache-2.0

if(CONFIG_CMSIS_NN)

  set(CMSIS_NN_DIR ${ZEPHYR_CURRENT_MODULE_DIR})
  set(cmsis_glue_path ${ZEPHYR_CMSIS_MODULE_DIR})

  zephyr_library()

  zephyr_library_compile_options(-Ofast)

  zephyr_include_directories(${CMSIS_NN_DIR}/Include)

  zephyr_library_include_directories(${cmsis_glue_path}/CMSIS/Core/Include)

  if(CONFIG_CMSIS_NN_ACTIVATION)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/ActivationFunctions/*_s8*.c")
    file(GLOB SRC_S16 "${CMSIS_NN_DIR}/Source/ActivationFunctions/*_s16*.c")
    zephyr_library_sources(${SRC} ${SRC_S16}
      ${CMSIS_NN_DIR}/Source/ActivationFunctions/arm_relu_q7.c
      ${CMSIS_NN_DIR}/Source/ActivationFunctions/arm_relu_q15.c)
  endif()

  if(CONFIG_CMSIS_NN_BASICMATH)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/BasicMathFunctions/*_*.c")
    zephyr_library_sources(${SRC})
  endif()

  if(CONFIG_CMSIS_NN_CONCATENATION)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/ConcatenationFunctions/*_*.c")
    zephyr_library_sources(${SRC})
  endif()

  if(CONFIG_CMSIS_NN_CONVOLUTION)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/ConvolutionFunctions/*_s8*.c")
    file(GLOB SRC_S16 "${CMSIS_NN_DIR}/Source/ConvolutionFunctions/*_s16*.c")
    zephyr_library_sources(${SRC} ${SRC_S16})
  endif()

  if(CONFIG_CMSIS_NN_FULLYCONNECTED)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/FullyConnectedFunctions/*_s8.c")
    file(GLOB SRC_S16 "${CMSIS_NN_DIR}/Source/FullyConnectedFunctions/*_s16*.c")
    zephyr_library_sources(${SRC} ${SRC_S16})
  endif()

  if(CONFIG_CMSIS_NN_NNSUPPORT)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/NNSupportFunctions/*_s8*.c")
    file(GLOB SRC_S16 "${CMSIS_NN_DIR}/Source/NNSupportFunctions/*_s16*.c")
    zephyr_library_sources(${SRC} ${SRC_S16}
      ${CMSIS_NN_DIR}/Source/NNSupportFunctions/arm_nntables.c
      ${CMSIS_NN_DIR}/Source/NNSupportFunctions/arm_q7_to_q15_with_offset.c
      ${CMSIS_NN_DIR}/Source/NNSupportFunctions/arm_s8_to_s16_unordered_with_offset.c)
  endif()

  if(CONFIG_CMSIS_NN_POOLING)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/PoolingFunctions/*_s8.c")
    file(GLOB SRC_S16 "${CMSIS_NN_DIR}/Source/PoolingFunctions/*_s16.c")
    zephyr_library_sources(${SRC} ${SRC_S16})
  endif()

  if(CONFIG_CMSIS_NN_RESHAPE)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/ReshapeFunctions/*_*.c")
    zephyr_library_sources(${SRC})
  endif()

  if(CONFIG_CMSIS_NN_SOFTMAX)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/SoftmaxFunctions/*_s8.c")
    zephyr_library_sources(${SRC}
      ${CMSIS_NN_DIR}/Source/SoftmaxFunctions/arm_softmax_s8_s16.c
      ${CMSIS_NN_DIR}/Source/SoftmaxFunctions/arm_softmax_s16.c
      ${CMSIS_NN_DIR}/Source/SoftmaxFunctions/arm_nn_softmax_common_s8.c)
  endif()

  if(CONFIG_CMSIS_NN_SVD)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/SVDFunctions/*_s8.c")
    zephyr_library_sources(${SRC})
  endif()

  if(CONFIG_CMSIS_NN_LSTM)
    file(GLOB SRC "${CMSIS_NN_DIR}/Source/LSTMFunctions/*_s16.c")
    zephyr_library_sources(${SRC})
  endif()

endif()
