cmake_minimum_required(VERSION 3.20) # 跳过编译器链接测试(裸机 ARM 无系统调用 _exit/_sbrk 等) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) project(blink C) # 输出固件带 .elf 后缀,pyOCD 自动识别格式 set(CMAKE_EXECUTABLE_SUFFIX ".elf") set(SDK_DIR "C:/ti/mspm0_sdk_2_11_00_07") set(SYSCONFIG_CLI "C:/ti/sysconfig_1.28.0/sysconfig_cli.bat") set(DEVICE "MSPM0G350X") set(PACKAGE "LQFP-64(PM)") # ── SysConfig code generation ────────────────────────────────────── set(SYSCFG_OUTPUT_DIR "${CMAKE_BINARY_DIR}/syscfg") add_custom_command( OUTPUT "${SYSCFG_OUTPUT_DIR}/ti_msp_dl_config.c" "${SYSCFG_OUTPUT_DIR}/ti_msp_dl_config.h" "${SYSCFG_OUTPUT_DIR}/device_linker.lds" "${SYSCFG_OUTPUT_DIR}/device.opt" "${SYSCFG_OUTPUT_DIR}/device.lds.genlibs" COMMAND cmd /c "${SYSCONFIG_CLI}" --compiler gcc --product "${SDK_DIR}/.metadata/product.json" --device "${DEVICE}" --package "${PACKAGE}" --output "${SYSCFG_OUTPUT_DIR}" "${CMAKE_SOURCE_DIR}/blink.syscfg" DEPENDS "${CMAKE_SOURCE_DIR}/blink.syscfg" COMMENT "Running SysConfig..." ) # ── Source files ──────────────────────────────────────────────────── set(GEN_DIR ${SYSCFG_OUTPUT_DIR}) add_executable(${PROJECT_NAME} src/main.c "${GEN_DIR}/ti_msp_dl_config.c" "${SDK_DIR}/source/ti/devices/msp/m0p/startup_system_files/gcc/startup_mspm0g350x_gcc.c" ) # SysConfig outputs are dependencies add_dependencies(${PROJECT_NAME} syscfg_gen) add_custom_target(syscfg_gen DEPENDS "${GEN_DIR}/ti_msp_dl_config.c") # ── Include directories ───────────────────────────────────────────── target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include" "${CMAKE_SOURCE_DIR}/src" "${GEN_DIR}" "${SDK_DIR}/source" "${SDK_DIR}/source/third_party/CMSIS/Core/Include" ) # ── Compile definitions & flags ───────────────────────────────────── target_compile_definitions(${PROJECT_NAME} PRIVATE __MSPM0G3507__ __USE_SYSCONFIG__ ) target_compile_options(${PROJECT_NAME} PRIVATE -mcpu=cortex-m0plus -march=armv6-m -mthumb -mfloat-abi=soft -std=c99 -O2 -ffunction-sections -fdata-sections -g -Wall -gstrict-dwarf ) # ── Linker flags ──────────────────────────────────────────────────── # Override SysConfig's linker script with G3507 (128KB Flash / 32KB SRAM) set(LINKER_SCRIPT "${SDK_DIR}/source/ti/devices/msp/m0p/linker_files/gcc/mspm0g3507.lds") target_link_options(${PROJECT_NAME} PRIVATE -mcpu=cortex-m0plus -march=armv6-m -mthumb -mfloat-abi=soft -nostartfiles -static -Wl,--gc-sections -Wl,-Map,${PROJECT_NAME}.map -T${LINKER_SCRIPT} -T${GEN_DIR}/device.lds.genlibs -L${SDK_DIR}/source --specs=nano.specs --specs=nosys.specs -lgcc -lc -lm )