cmake_minimum_required (VERSION 3.14)
cmake_policy(SET CMP0077 NEW)
project(CMSISDSP)

include(CMakePrintHelpers)

# DSP Sources
SET(DSP ${CMAKE_CURRENT_SOURCE_DIR}/..)

option(NEON "Neon acceleration" OFF)
option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF)
option(HELIUMEXPERIMENTAL "Helium experimental acceleration" OFF)
option(LOOPUNROLL "Loop unrolling" ON)
option(ROUNDING "Rounding" OFF)
option(MATRIXCHECK "Matrix Checks" OFF)
option(HELIUM "Helium acceleration (MVEF and MVEI supported)" OFF)
option(MVEF "MVEF intrinsics supported" OFF)
option(MVEI "MVEI intrinsics supported" OFF)
option(MVEFLOAT16 "Float16 MVE intrinsics supported" OFF)
option(DISABLEFLOAT16 "Disable building float16 kernels" OFF)
option(HOST "Build for host" OFF)
option(AUTOVECTORIZE "Prefer autovectorizable code to one using C intrinsics" OFF)
option(LAXVECTORCONVERSIONS "Lax vector conversions" ON)

###########################
#
# CMSIS DSP
#
###########################

add_library(CMSISDSP STATIC)

include(BasicMathFunctions/Config.cmake)

include(ComplexMathFunctions/Config.cmake)

include(QuaternionMathFunctions/Config.cmake)

include(ControllerFunctions/Config.cmake)
 
include(FastMathFunctions/Config.cmake)
 
include(FilteringFunctions/Config.cmake)
 
include(MatrixFunctions/Config.cmake)

include(StatisticsFunctions/Config.cmake)

include(SupportFunctions/Config.cmake)

include(TransformFunctions/Config.cmake)
 
include(CommonTables/Config.cmake)
  
include(SVMFunctions/Config.cmake)

include(BayesFunctions/Config.cmake)

include(DistanceFunctions/Config.cmake)

include(InterpolationFunctions/Config.cmake)

include(WindowFunctions/Config.cmake)

### Includes

target_include_directories(CMSISDSP PUBLIC "${DSP}/Include" "${DSP}/Include/dsp" "${CMSISCORE}/Include")

include(configDsp.cmake)

configDsp(CMSISDSP)

get_target_property(SOURCES_CMSIS_DSP CMSISDSP SOURCES)
cmake_minimum_required(VERSION ${TI_MIN_CMAKE_VERSION})
project(cmsis_dsp LANGUAGES C ASM)

ti_init_package(NAMESPACE FeatExtract PACKAGE_NAME LPF3 PACKAGE_TYPE COMPONENT)
ti_add_package_dependency(FeatExtract)

# Build for m33f architecture (cc27xx)
SET(TI_ARCH m33f)
ti_add_library(
    cmsis_dsp_${TI_ARCH} 
    SOURCES ${SOURCES_CMSIS_DSP} 
    ADD_SDK_INCLUDE_PATH Include
    LINK_PUBLIC CMakeCommon::${TI_TOOLCHAIN_NAME}_${TI_ARCH}
)
target_include_directories(cmsis_dsp_${TI_ARCH} PRIVATE "${DSP}/PrivateInclude")
target_include_directories(cmsis_dsp_${TI_ARCH} PUBLIC "${DSP}/Include")
target_include_directories(cmsis_dsp_${TI_ARCH} PUBLIC "${CMSISCORE}/Include")

# Build for m4f architecture (cc13x2/cc1352)
SET(TI_ARCH m4f)
ti_add_library(
    cmsis_dsp_${TI_ARCH} 
    SOURCES ${SOURCES_CMSIS_DSP} 
    ADD_SDK_INCLUDE_PATH Include
    LINK_PUBLIC CMakeCommon::${TI_TOOLCHAIN_NAME}_${TI_ARCH}
)
target_include_directories(cmsis_dsp_${TI_ARCH} PRIVATE "${DSP}/PrivateInclude")
target_include_directories(cmsis_dsp_${TI_ARCH} PUBLIC "${DSP}/Include")
target_include_directories(cmsis_dsp_${TI_ARCH} PUBLIC "${CMSISCORE}/Include")

ti_export_package()