From a41b1ed83678695f3ff5e7c652e3b8dd5dbdf3f4 Mon Sep 17 00:00:00 2001 From: kirl <18827922006@163.com> Date: Mon, 27 Jul 2026 20:14:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E9=93=BE=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 30 ++++++++++++++++++++++++++++-- README.md | 9 +++++++++ gcc-arm-none-eabi.cmake | 15 ++++++++++++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d91e08b..e0d67bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,34 @@ 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") +# ── 路径检测:环境变量 → 自动扫描 ──────────────────────────────── +function(auto_find var_name pattern) + if(NOT ${var_name} OR NOT EXISTS "${${var_name}}") + foreach(drv C D E) + if(EXISTS "${drv}:/ti") + file(GLOB _found "${drv}:/ti/${pattern}") + if(_found) + list(GET _found 0 ${var_name}) + set(${var_name} "${${var_name}}" PARENT_SCOPE) + endif() + endif() + endforeach() + endif() +endfunction() + +set(SDK_DIR "$ENV{MSPM0_SDK_ROOT}" CACHE PATH "MSPM0 SDK root") +set(SYSCONFIG_CLI "$ENV{SYSCONFIG_CLI_PATH}" CACHE FILEPATH "SysConfig CLI path") + +auto_find(SDK_DIR "mspm0_sdk_*") +auto_find(SYSCONFIG_CLI "sysconfig_*/sysconfig_cli.bat") + +if(NOT SDK_DIR) + message(FATAL_ERROR "MSPM0 SDK not found. Set MSPM0_SDK_ROOT env var.") +endif() +if(NOT SYSCONFIG_CLI OR NOT EXISTS "${SYSCONFIG_CLI}") + message(FATAL_ERROR "SysConfig CLI not found. Set SYSCONFIG_CLI_PATH env var.") +endif() + set(DEVICE "MSPM0G350X") set(PACKAGE "LQFP-64(PM)") diff --git a/README.md b/README.md index db721fa..1fe1447 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,15 @@ python -m pyocd pack install MSPM0G3507 MSPM0 SDK 和 SysConfig 需从 [TI 官网](https://www.ti.com/tool/MSPM0-SDK) 下载安装。 +CMake 会按以下顺序自动检测路径:**环境变量 → C:\ti → D:\ti → E:\ti**。装在 TI 默认目录(如 `C:\ti\`)无需额外配置。自定义路径可设环境变量: + +```powershell +$env:MSPM0_SDK_ROOT = "D:/path/to/mspm0_sdk" +$env:SYSCONFIG_CLI_PATH = "D:/path/to/sysconfig_cli.bat" +``` + +ARM GCC 同理:优先 `ARM_GCC_ROOT` 环境变量,否则从 PATH 自动查找。 + ## 构建 ```powershell diff --git a/gcc-arm-none-eabi.cmake b/gcc-arm-none-eabi.cmake index 6653111..e7d89cf 100644 --- a/gcc-arm-none-eabi.cmake +++ b/gcc-arm-none-eabi.cmake @@ -5,7 +5,20 @@ set(CMAKE_SYSTEM_PROCESSOR arm) # Skip linker test for bare-metal (avoids _exit/_sbrk etc.) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -set(ARM_TOOLCHAIN_DIR "C:/Program Files/Arm/GNU Toolchain mingw-w64-x86_64-arm-none-eabi") +# 路径检测:环境变量 → PATH +set(ARM_TOOLCHAIN_DIR "$ENV{ARM_GCC_ROOT}" CACHE PATH "ARM GCC toolchain root") + +if(NOT ARM_TOOLCHAIN_DIR OR NOT EXISTS "${ARM_TOOLCHAIN_DIR}/bin/arm-none-eabi-gcc${CMAKE_EXECUTABLE_SUFFIX}") + find_program(_GCC arm-none-eabi-gcc) + if(_GCC) + get_filename_component(_BIN ${_GCC} DIRECTORY) + get_filename_component(ARM_TOOLCHAIN_DIR ${_BIN} DIRECTORY) + endif() +endif() + +if(NOT ARM_TOOLCHAIN_DIR) + message(FATAL_ERROR "ARM GCC not found. Install or set ARM_GCC_ROOT env var.") +endif() set(CMAKE_C_COMPILER "${ARM_TOOLCHAIN_DIR}/bin/arm-none-eabi-gcc.exe") set(CMAKE_CXX_COMPILER "${ARM_TOOLCHAIN_DIR}/bin/arm-none-eabi-g++.exe")