cmake_minimum_required(VERSION 3.20)

set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../..)
set(SYSTEM_DIR ${ROOT_DIR}/devices/eliot1)
set(ARM_GCC_DIR ${ROOT_DIR}/devices/eliot1/gcc)
set(DRIVERS_DIR ${ROOT_DIR}/devices/eliot1/drivers)
set(BOARD_CFG_DIR ${ROOT_DIR}/boards/eliot1m_mo_cfg)
set(BOARD_BSP_DIR ${BOARD_CFG_DIR}/armgcc/bsp_core1/build)
set(CMSIS_DIR ${ROOT_DIR}/CMSIS/Include)
set(CMSIS_DSP_DIR ${ROOT_DIR}/CMSIS/Include/DSP)

project(core1_dsp_test)

enable_language(ASM)

add_executable(${PROJECT_NAME}.elf
    ${CMAKE_CURRENT_SOURCE_DIR}/../main_core1.c
    ${DRIVERS_DIR}/hal_gpio.c
    ${DRIVERS_DIR}/hal_qspi.c
    ${DRIVERS_DIR}/hal_qspi_nor_flash.c
)

include_directories(
    ${CMSIS_DIR}
    ${SYSTEM_DIR}
    ${DRIVERS_DIR}
    ${DRIVERS_DIR}/private/
    ${BOARD_CFG_DIR}
    ${CMSIS_DSP_DIR}
    ${CMSIS_DSP_DIR}/dsp
)

target_link_directories(${PROJECT_NAME}.elf PUBLIC ${BOARD_BSP_DIR})
target_link_directories(${PROJECT_NAME}.elf PUBLIC ${ARM_GCC_DIR})

target_link_libraries(${PROJECT_NAME}.elf bsp_core1)
target_link_libraries(${PROJECT_NAME}.elf CMSISDSP)

# -DARM_MATH_LOOPUNROLL -DARM_MATH_ROUNDING -DDISABLEFLOAT16
add_definitions(-DARM_MATH_LOOPUNROLL -DARM_MATH_ROUNDING)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
     -DELIOT1M -DBOARD -DCPU_ELIOT1M_cm33_core1 \
     -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsingle-precision-constant -MMD -MP \
     -Os -g -fdata-sections -ffunction-sections")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \
     -mfloat-abi=hard -mfpu=fpv5-sp-d16 \
     -fdata-sections -ffunction-sections -Wl,--gc-sections \
     -T${ARM_GCC_DIR}/eliot1_cm33_core1_xip.ld")

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
    COMMAND ${CMAKE_OBJDUMP} -D ${PROJECT_NAME}.elf > ${PROJECT_NAME}.dis
    COMMENT "[post] Create disassemble file ${PROJECT_NAME}.dis"
)
