Rust examples and tools: fix SConscript list handling; add macros and…#10910
Rust examples and tools: fix SConscript list handling; add macros and…#10910Rbb666 merged 5 commits intoRT-Thread:masterfrom
Conversation
… example crates; update .gitignore to ignore Cargo.lock and target; include rtthread.h updates
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
📌 Code Review Assignment🏷️ Tag: componentsReviewers: Maihuanyi Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2025-11-25 20:46 CST)
📝 Review Instructions
|
感谢你为rtthread的贡献,请签这个贡献者许可协议; |
There was a problem hiding this comment.
Pull Request Overview
This pull request adds comprehensive Rust programming language support to the RT-Thread RTOS, enabling developers to write RT-Thread components and applications in Rust. The implementation includes core FFI bindings, procedural macros, build system integration, examples, and bilingual documentation.
Key changes:
- Complete Rust core library with RT-Thread API bindings and safe wrappers
- Procedural macros for component/application/command exports
- Automated multi-architecture target detection (ARM, AArch64, RISC-V)
- Build system integration with SCons and Cargo
- Comprehensive examples demonstrating threads, mutexes, queues, file I/O, and dynamic loading
- Bilingual documentation (English/Chinese) following RT-Thread guidelines
Reviewed Changes
Copilot reviewed 88 out of 89 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| components/rust/core/src/bindings/libc.rs | FFI bindings for C standard library functions with minor spelling issue |
| components/rust/examples/modules/example_lib/Cargo.toml | Example library configuration with incorrect Rust edition "2024" |
| components/rust/examples/application/fs/src/lib.rs | File system example with spelling error in comment |
| components/rust/core/* | Core Rust library implementing RT-Thread API wrappers |
| components/rust/rt_macros/* | Procedural macros for RT-Thread integration |
| components/rust/tools/* | Build support scripts for target detection and compilation |
| components/rust/examples/* | Comprehensive examples for applications, components, and modules |
| components/rust/docs/* | Bilingual documentation for tools, applications, components, and modules |
| pub const RTLD_NOW: c_int = 0x00001; // Immediate function call binding | ||
| pub const RTLD_GLOBAL: c_int = 0x10000; // Make symbols globally available | ||
| pub const RTLD_LOCAL: c_int = 0x00000; // Default local | ||
| // fcntl.h interent constants |
There was a problem hiding this comment.
Spelling Error / 拼写错误
English: The word "interent" should be "internet" or possibly "inherit".
中文:单词"interent"应该是"internet"或者"inherit"。
Suggested correction: Change fcntl.h interent constants to fcntl.h inherit constants or fcntl.h integer constants depending on the intended meaning.
| // fcntl.h interent constants | |
| // fcntl.h integer constants |
| * | ||
| * Change Logs: | ||
| * Date Author notes | ||
| * 2025-10-20 foxglove Rust file opration test. |
There was a problem hiding this comment.
Spelling Error / 拼写错误
English: The word "opration" should be "operation".
中文:单词"opration"应该是"operation"。
Suggested correction: Change Rust file opration test to Rust file operation test.
include/rtthread.h
Outdated
| #ifdef RT_USING_FINSH | ||
| #include <finsh.h> | ||
| #endif /* RT_USING_FINSH */ | ||
| #ifdef RT_USING_MODULE |
There was a problem hiding this comment.
这里不应该修改的,而是在使用的文件中来包含这个头文件。
There was a problem hiding this comment.
在根据RT-Thread社区开启动态模块加载的指南 [动态模块](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/dlmodule) 配置好项目后,编译项目时会遇到这样的问题:
.../rt-thread/src/defunct.c: In function 'rt_defunct_execute':
.../rt-thread/src/defunct.c:91:13: error: implicit declaration of function 'dlmodule_destroy' [-Wimplicit-function-declaration]
91 | dlmodule_destroy(module);
| ^~~~~~~~~~~~~~~~所以更改为:在 defunct.c 文件导入 dlmodule.h
components/rust/SConscript
Outdated
| import os | ||
| from building import * | ||
|
|
||
| cwd = GetCurrentDir() |
There was a problem hiding this comment.
建议在顶层中加入对 RT_USING_RUST 的依赖判断,当不启用时就不向下扩展了。而打开 RT_USING_RUST 时才需要在Python层面import toml包。
|
|
||
| extern crate alloc; | ||
|
|
||
| // 演示新的模块化宏接口 |
| @@ -0,0 +1,43 @@ | |||
| /* | |||
| * Copyright (c) 2006-2024, RT-Thread Development Team | |||
src/defunct.c
Outdated
| void (*cleanup)(struct rt_thread *tid); | ||
|
|
||
| #ifdef RT_USING_MODULE | ||
| #include <dlmodule.h> |
There was a problem hiding this comment.
这块不需要再次包含了,上面的<rtthread.h>里面有这个头文件了
|
此外我想问下,这个RUST组件支持后,是否会包括一些RUST测试用例的? |
后续可以参考或者使用utest框架来写一些测试用例对RUST测试。达到在shell执行测试,然后完整输出rust组件所有测试结果的效果。 |
src/defunct.c
Outdated
| void (*cleanup)(struct rt_thread *tid); | ||
|
|
||
| #ifdef RT_USING_MODULE | ||
| #include <dlmodule.h> |
There was a problem hiding this comment.
这里不正确的,不能在代码中间去 include 另外一个头文件,会报错的。这里应该不需要修改的,修改需要撤销。
|
@Rbb666 也帮忙review下,想法可能偏先合并(合并需要做rebase,把所有提交合并成一个),后续有更多的人来共同推进、完善。 |
好的,我这两天会测试下,先把这套跑通,再拉社区一起测试推进 |
… example crates; update .gitignore to ignore Cargo.lock and target; include rtthread.h updates
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
你的解决方案是什么 (what is your solution)
在 rt-thread/components/rust 引入 Rust 核心组件、宏库与示例,并与 Kconfig、Cargo、SCons 深度集成。
请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up