summaryrefslogtreecommitdiff
path: root/tools/docs
diff options
context:
space:
mode:
authorbernard <[email protected]>2025-08-03 03:57:54 +0800
committerR b b666 <[email protected]>2025-08-07 09:32:45 +0800
commitfbdab95299f0de68079978f73fac33c1de8a81ab (patch)
treef077b70dfb9adb00f6c911bf3e78d1ecd46f05ca /tools/docs
parent5c568f0280179253d52c41cd23bf7f1ff9925746 (diff)
[Feature][Tools] Add support for package.json, refactor BuildPackage function to handle new format.
Diffstat (limited to 'tools/docs')
-rw-r--r--tools/docs/package-json-support.md128
1 files changed, 128 insertions, 0 deletions
diff --git a/tools/docs/package-json-support.md b/tools/docs/package-json-support.md
new file mode 100644
index 0000000000..c27aed3648
--- /dev/null
+++ b/tools/docs/package-json-support.md
@@ -0,0 +1,128 @@
+# RT-Thread package.json 构建支持
+
+## 概述
+
+RT-Thread支持使用package.json来定义组件的构建配置,作为传统SConscript的简化替代方案。
+
+## 现有支持
+
+### package.json格式
+```json
+{
+ "name": "hello",
+ "description": "Hello World component for RT-Thread",
+ "type": "rt-thread-component",
+ "dependencies": ["RT_USING_HELLO"],
+ "defines": [],
+ "sources": [{
+ "name": "src",
+ "dependencies": [],
+ "includes": ["."],
+ "files": ["hello.c"]
+ }]
+}
+```
+
+### 字段说明
+- **name**: 组件名称(必需)
+- **type**: 必须为"rt-thread-component"(必需)
+- **description**: 组件描述
+- **dependencies**: 全局依赖,数组形式的宏定义
+- **defines**: 全局宏定义
+- **sources**: 源文件组数组,每组可包含:
+ - **name**: 源组名称
+ - **dependencies**: 源组特定依赖
+ - **includes**: 头文件搜索路径
+ - **files**: 源文件列表(支持通配符)
+
+## 使用方式
+
+### 1. 在SConscript中使用
+
+方式一:使用PackageSConscript(推荐)
+```python
+from building import *
+
+objs = PackageSConscript('package.json')
+Return('objs')
+```
+
+方式二:直接调用BuildPackage
+```python
+Import('env')
+from package import BuildPackage
+
+objs = BuildPackage('package.json')
+Return('objs')
+```
+
+### 2. 目录结构示例
+```
+mycomponent/
+├── SConscript
+├── package.json
+├── mycomponent.c
+├── mycomponent.h
+└── src/
+ └── helper.c
+```
+
+### 3. 完整示例
+
+package.json:
+```json
+{
+ "name": "mycomponent",
+ "description": "My RT-Thread component",
+ "type": "rt-thread-component",
+ "dependencies": ["RT_USING_MYCOMPONENT"],
+ "defines": ["MY_VERSION=1"],
+ "sources": [
+ {
+ "name": "main",
+ "dependencies": [],
+ "includes": ["."],
+ "files": ["mycomponent.c"]
+ },
+ {
+ "name": "helper",
+ "dependencies": ["RT_USING_MYCOMPONENT_HELPER"],
+ "includes": ["src"],
+ "files": ["src/*.c"]
+ }
+ ]
+}
+```
+
+## 工作原理
+
+1. **依赖检查**:首先检查全局dependencies,如果不满足则跳过整个组件
+2. **源组处理**:遍历sources数组,每个源组独立检查dependencies
+3. **路径处理**:includes相对路径基于package.json所在目录
+4. **文件匹配**:使用SCons的Glob函数处理文件通配符
+5. **构建调用**:最终调用DefineGroup创建构建组
+
+## 与DefineGroup的对比
+
+| 特性 | package.json | DefineGroup |
+|------|--------------|-------------|
+| 配置方式 | JSON文件 | Python代码 |
+| 依赖管理 | 结构化 | 函数参数 |
+| 源文件组织 | 分组管理 | 单一列表 |
+| 条件编译 | 源组级别 | 整体级别 |
+| 灵活性 | 中等 | 高 |
+| 易用性 | 高 | 中等 |
+
+## 最佳实践
+
+1. **简单组件优先使用package.json**:配置清晰,易于维护
+2. **复杂逻辑使用SConscript**:需要动态逻辑时使用传统方式
+3. **混合使用**:可以在同一项目中混用两种方式
+
+## 注意事项
+
+1. package.json必须是有效的JSON格式
+2. type字段必须为"rt-thread-component"
+3. 文件路径相对于package.json所在目录
+4. 依赖不满足时会静默跳过,不会报错
+5. 与RT-Thread构建系统完全集成,不支持独立构建 \ No newline at end of file