Repository navigation
fix[tools][eclipse]: handle hidden directories in source exclusion - #11787
Conversation
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
b7675bd to
c14f9ec
Compare
c14f9ec to
6076a04
Compare
|
@wdfk-prog ci有错误了,麻烦检查下 |
一、CI 失败的直接原因已经确认我读取了 PR #11787 对应的 GitHub Actions Job 原始日志。 本次 CI 失败的直接原因是 Runner 无法找到 Tools / Project generate Tools 失败 Run 38119970063 · Job 114416188183 · 2026-10-11 关键日志: 另外,在前一个 这属于两个不同层面的问题:
因此,当前 CI 尚未运行到能够验证 PR 中 二、根因分析:实际上有两处 CI 环境问题核对 Install Tools 下载 RT-Thread Env 2.0.2,首次激活时创建 Python venv,安装 SCons 4.11.1 Build Tools 执行 Project generate Tools 新 Shell 未激活 Python venv, 问题 A:Python 虚拟环境没有跨步骤保持当前工作流只有 但是每个 GitHub Actions 因此 SCons 虽然已经安装,但后续步骤无法通过命令名找到它。 问题 B:Env 激活脚本覆盖了交叉编译器路径这也是一个需要一起处理的地方。 工作流原先通过 但我查看了 RT-Thread Env 的 第二条会覆盖工作流先前配置好的 ARM GCC 路径。
这与日志中的工具链路径错误吻合。 而 结论:仅在生成步骤添加 三、建议修复方式建议只修改工作流文件: 不需要为这次 CI 环境故障修改 1. 修复三个步骤的环境初始化在 其中 这项修改同时解决:
2. 防止构建错误被误判为成功在 因为当前 3. 长期修复 Env 脚本RT-Thread Env 上游的 改为: 这样调用方已经设置 四、对 PR #11787 的影响PR 当前只修改了
建议优先修复工作流,再重新触发 执行状态: 已完成远端日志、PR Diff、工作流及相关源码的只读检查,根因已定位;未修改 PR、未执行远端重跑,多轮 Review 未执行。 参考源码:[CI 工作流](https://github.com/RT-Thread/rt-thread/blob/6076a04b8d2a588862869afa98036a75258285f9/.github/workflows/action_tools.yml) · [工具链路径检测逻辑]( Lines 246 to 278 in 6076a04 |
关联:#11863 |
为什么提交这份PR (why to submit this PR)
当前
tools/targets/eclipse.py在执行scons --target=eclipse生成 Eclipse/CDT 工程时,ExcludePaths()会无条件跳过所有以.开头的隐藏目录:这会导致隐藏目录无法进入后续的 source exclusion 计算。
对于只包含配置文件的
.git、.vscode、.settings等目录,这通常不会产生明显问题;但如果隐藏目录中存在可编译源文件,例如:而这些
*.c文件并没有被对应SConscript加入目标固件构建,则原生 SCons 构建不会编译它们。但是通过:
生成 Eclipse/CDT Managed Build 工程后,由于
.github被ExcludePaths()直接跳过,没有加入.cproject的excluding列表,CDT 仍可能把其中的*.c文件识别为工程源码,并在 IDE Build 时进行目标平台编译。实际使用中可以导致类似以下情况:
中的 Host Test stub 与真实 RT-Thread API 同时参与 ARM firmware 编译,从而出现:
等错误。
该问题并不局限于
.github。类似:
等任何包含源代码的隐藏目录,只要没有参与实际目标构建,都可能遇到同样的问题。
因此这里需要修复的是 Eclipse source exclusion 对隐藏目录的一般处理逻辑,而不是对
.github做特殊处理。你的解决方案是什么 (what is your solution)
本 PR 修改
tools/targets/eclipse.py中隐藏目录的 source exclusion 处理逻辑。主要修改如下:
ExcludePaths()不再无条件跳过所有以.开头的目录。隐藏目录现在与普通目录使用相同的 exclusion 判断逻辑:
这样可以避免隐藏目录绕过 Eclipse source exclusion 计算。
CollectAllFilesinPath()不再跳过所有隐藏目录。原来的逻辑:
会导致以下结构无法被检测:
本 PR 改为允许递归检查普通隐藏目录,从而能够正确检测其中是否存在:
等 Eclipse 可编译源文件。
为避免递归扫描:
等可能包含大量文件的版本控制元数据目录,增加:
CollectAllFilesinPath()不递归这些目录。同时,如果这些目录已经被判定为 exclusion candidate,则直接加入 Eclipse exclusion,而不继续扫描其内部文件。
因此本次修改不会为了判断
.git是否包含源文件而递归遍历.git/objects等目录。最终行为为:
本 PR 不修改原生 SCons firmware build 的源码选择逻辑,仅修复
scons --target=eclipse生成的 Eclipse/CDT source exclusion 与实际工程源码选择不一致的问题。请提供验证的bsp和config (provide the config and bsp)
BSP:
bsp/stm32/stm32f407-atk-explorer.config:本修改属于 Eclipse project generator 修复,不依赖额外 Kconfig 配置。
action: