cmake_minimum_required(VERSION 3.29)

if(SOC STREQUAL "am275x")
    set(SOC "AM275")
    set(C7X_DEFINE C7524)
    set(MMA_DEFINE 2_256F)
    set(MCU_PLUS_SDK_SOC am275x)
    set(DEVICE C7524)
    set(MMA 2_256F)
    set(TARGET_PLATFORM "")
elseif(SOC STREQUAL "am62dx")
    set(SOC "AM62D")
    set(C7X_DEFINE C7504)
    set(MMA_DEFINE 2_256)
    set(MCU_PLUS_SDK_SOC am62dx)
    set(DEVICE C7504)
    set(MMA 2_256)
    set(TARGET_PLATFORM "")
elseif(SOC STREQUAL "am62ax")
    set(SOC "AM62A")
    set(C7X_DEFINE C7504)
    set(MMA_DEFINE 2_256)
    set(MCU_PLUS_SDK_SOC am62ax)
    set(DEVICE C7504)
    set(MMA 2_256)
    set(TARGET_PLATFORM "")
else()
    message("invalid target!")
endif()

string(REPLACE "C" "" SILICON_VERSION ${C7X_DEFINE})

# set toolchain file
if(CMAKE_HOST_WIN32)
    # Windows-specific configuration
    set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/ti_c7x_windows.cmake)
else()
    # Linux/Unix-specific configuration
    set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/ti_c7x_linux.cmake)
endif()

set(project_name TutorialModuleLib)
set(CMAKE_C_COMPILER_WORKS TRUE)
project(${project_name})

# Cmake custom utility functions for VLOP
include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake)

# Define a variable to control optimization mode
option(USE_OPTIMIZED_VERSION "Use C7x optimized implementations" ON)

# Include the source files
set(source_files
    "${CMAKE_SOURCE_DIR}/ModTutorial.c"
    "${CMAKE_SOURCE_DIR}/ModTutorialBiquadMono.c"
    "${CMAKE_SOURCE_DIR}/ModTutorialBiquad.c"
    "${CMAKE_SOURCE_DIR}/ModTutorialBiquadSmoothed.c"
    "${CMAKE_SOURCE_DIR}/ModTutorialPeakingFilter.c"
)

# Just creating these OBJECT and STATIC projects to test that they will build
add_library(${project_name}Objects OBJECT ${source_files})
add_library(${project_name} STATIC $<TARGET_OBJECTS:${project_name}Objects>)

# Include the header files
target_include_directories(${project_name}Objects BEFORE PUBLIC
    "${CMAKE_SOURCE_DIR}/../include"
    "${CMAKE_SOURCE_DIR}/../include/Targets"
)
