cmake_minimum_required(VERSION 3.10)

project(StepMotorCtrl C ASM)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_ASM_COMPILER_OPTIONS "")

SET(CMAKE_EXECUTABLE_SUFFIX ".elf")

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/libs/device/py32md530.ld)

set(CMAKE_C_FLAGS "-mcpu=cortex-m0plus -mthumb -Wall -Wextra -Wpedantic -Wno-unused-parameter -ffunction-sections -fdata-sections -O0 -g -MMD -MP" CACHE STRING "" FORCE)
set(CMAKE_ASM_FLAGS "-mcpu=cortex-m0plus -mthumb -x assembler-with-cpp" CACHE STRING "" FORCE)

set(CMAKE_EXE_LINKER_FLAGS "-mcpu=cortex-m0plus -mthumb -T${LINKER_SCRIPT} -Wl,--gc-sections -Wl,--print-memory-usage -u _printf_float -specs=nano.specs -specs=nosys.specs" CACHE STRING "" FORCE)

include_directories(
    ${CMAKE_SOURCE_DIR}/libs
    ${CMAKE_SOURCE_DIR}/libs/CMSIS
    ${CMAKE_SOURCE_DIR}/libs/device
    ${CMAKE_SOURCE_DIR}/config
    ${CMAKE_SOURCE_DIR}/bsp
    ${CMAKE_SOURCE_DIR}/bsp/device/led
    ${CMAKE_SOURCE_DIR}/bsp/device/key
    ${CMAKE_SOURCE_DIR}/bsp/device/eeprom
    ${CMAKE_SOURCE_DIR}/bsp/device/limit_switch
    ${CMAKE_SOURCE_DIR}/bsp/device/as5600
    ${CMAKE_SOURCE_DIR}/bsp/device/id
    ${CMAKE_SOURCE_DIR}/bsp/modbus
    ${CMAKE_SOURCE_DIR}/drv/system
    ${CMAKE_SOURCE_DIR}/drv/timer
    ${CMAKE_SOURCE_DIR}/drv/uart
    ${CMAKE_SOURCE_DIR}/drv/i2c
    ${CMAKE_SOURCE_DIR}/drv/adc
    ${CMAKE_SOURCE_DIR}/drv/gpio
    ${CMAKE_SOURCE_DIR}/drv/log
    ${CMAKE_SOURCE_DIR}/app
    ${CMAKE_SOURCE_DIR}/app/tasks
    ${CMAKE_SOURCE_DIR}/app/stepper
)

file(GLOB_RECURSE SOURCES
    ${CMAKE_SOURCE_DIR}/app/*.c
    ${CMAKE_SOURCE_DIR}/bsp/*.c
    ${CMAKE_SOURCE_DIR}/bsp/device/*/*.c
    ${CMAKE_SOURCE_DIR}/bsp/modbus/*.c
    ${CMAKE_SOURCE_DIR}/drv/*/*.c
    ${CMAKE_SOURCE_DIR}/libs/device/*.c
    ${CMAKE_SOURCE_DIR}/libs/device/*.s
)

add_executable(${PROJECT_NAME} ${SOURCES})
set(ELF_FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf)
set(HEX_FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(OUTPUT ${HEX_FILE} ${BIN_FILE}
    COMMAND ${CMAKE_OBJCOPY} -O ihex ${ELF_FILE} ${HEX_FILE}
    COMMAND ${CMAKE_OBJCOPY} -O binary ${ELF_FILE} ${BIN_FILE}
    DEPENDS ${PROJECT_NAME}
    COMMENT "Generating hex and bin files..."
)
add_custom_target(hex ALL DEPENDS ${HEX_FILE} ${BIN_FILE})
