cmake_minimum_required(VERSION 3.22)

# ============================================================
#  STM32F103C8 标准外设库 (StdPeriph V3.5.0) 工程
#  工具链文件: cmake/gcc-arm-none-eabi.cmake (在 CLion 的 CMake 设置里指定)
#  链接脚本:   STM32F103XX_FLASH.ld (64K Flash / 20K RAM)
# ============================================================
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Debug")
endif()

set(CMAKE_PROJECT_NAME stm32f103_spl_clion)
project(${CMAKE_PROJECT_NAME})

enable_language(C ASM)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)

# 标准库外设驱动：全部收集，靠工具链里的 -ffunction-sections + --gc-sections
# 自动裁掉未引用的源文件，无需手动挑
file(GLOB SPL_SRC "StdPeriph_Driver/src/*.c")

add_executable(${CMAKE_PROJECT_NAME}
    CMSIS/startup_stm32f10x_md.s     # GCC 版启动文件 (TrueSTUDIO)
    CMSIS/core_cm3.c
    CMSIS/system_stm32f10x.c
    ${SPL_SRC}
    User/main.c
)

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
    CMSIS                # stm32f10x.h, core_cm3.h, system_stm32f10x.h
    StdPeriph_Driver/inc # stm32f10x_gpio.h 等外设头
    User                 # stm32f10x_conf.h
)

target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
    STM32F10X_MD           # STM32F103C8 属于 Medium density
    USE_STDPERIPH_DRIVER   # 启用标准库外设驱动 -> stm32f10x.h 会 include stm32f10x_conf.h
)

# CPU flag(-mcpu=cortex-m3)、链接脚本、nano.specs、gc-sections 都已在工具链文件里设好
target_link_libraries(${CMAKE_PROJECT_NAME} m)

# 打印 Flash / RAM 占用
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${CMAKE_PROJECT_NAME}>
    COMMENT "Memory usage"
)
