Anaxa Builder
现代化的 Rust 原生配置管理系统,旨在替代传统的 Kconfig,使用 TOML 作为 Schema 定义语言。
特性
- 📝 TOML Schema: 使用现代化的 TOML 格式定义配置,替代古老的 Kconfig 语法
- 🖥️ 交互式 TUI: 终端用户界面,提供直观的配置体验
- 🔍 依赖管理: 自动解析
depends_on依赖关系,构建依赖图并进行循环检测 - 🎯 类型安全: 支持
bool、int、string、hex、choice等多种配置类型 - 🔧 代码生成: 自动生成 C 头文件、Rust 常量和 Cargo CFG keys
- 🌳 递归扫描: 自动发现并聚合
src/目录下所有子目录的配置文件 - ⚡ 优先级控制: 环境变量 >
.config文件 > Schema 默认值
安装
# 克隆仓库
# 使用 cargo 安装
快速开始
1. 定义配置 Schema
在项目目录下创建 Kconfig.toml 文件:
# 示例: src/net/Kconfig.toml
= "Networking Support"
[[]]
= "ENABLE_NET"
= "bool"
= true
= "Enable networking subsystem"
= ["net"] # 对应 Cargo features
[[]]
= "SCHEDULER"
= "choice"
= "RR"
= "Process Scheduler Algorithm"
= ["RR", "FIFO", "CFS"]
[[]]
= "MAX_SOCKETS"
= "int"
= 16
= "ENABLE_NET"
= "Maximum number of open sockets"
2. 验证配置
# 检查 Schema 有效性并检测循环依赖
# 查看解析后的配置结构
3. 交互式配置
# 启动 TUI 配置界面
在 TUI 中:
- 使用方向键导航
- 按
[Y]启用/禁用 bool 选项 - 按
[N]禁用选项 - 按
[M]选择/取消选择 choice 选项 - 按
?查看帮助信息 - 按
/搜索配置项 - 按
[S]保存配置到.config - 按
[Q]退出
4. 生成代码
# 生成代码到 generated/ 目录
这将生成:
generated/autoconf.h- C 头文件generated/config.rs- Rust 常量generated/depends.dot- 依赖关系图(可选)
配置类型
| 类型 | 说明 | 示例 |
|---|---|---|
bool |
布尔值 | true / false |
int |
整数 | 42 |
string |
字符串 | "hello" |
hex |
十六进制 | 0x1A2B |
choice |
单选组 | 从预定义选项中选择 |
Schema 字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
String | 是 | 配置项名称 |
type |
ConfigType | 是 | 配置类型 (见上) |
default |
Any | 是 | 默认值 |
desc |
String | 否 | 简短描述 |
help |
String | 否 | 详细帮助信息 |
depends_on |
String | 否 | 依赖表达式 |
feature |
Vec | 否 | 对应的 Cargo features |
options |
Vec | 否 | choice 类型的可选值 |
依赖表达式
支持使用 evalexpr 语法的逻辑表达式:
= "ENABLE_NET && !IPV6_DISABLE"
= "USE_TLS || USE_SSL"
目录结构
anaxa-builder/
├── src/
│ ├── codegen/ # 代码生成器(C、Rust、DOT)
│ ├── schema.rs # 配置项数据模型
│ ├── parser.rs # TOML 解析器
│ ├── graph.rs # 依赖图构建
│ ├── logic.rs # 表达式求值逻辑
│ └── config_io.rs # .config 文件读写
├── generated/ # 生成的代码文件
│ ├── autoconf.h
│ ├── config.rs
│ └── depends.dot
├── Cargo.toml
└── README.md
技术栈
- CLI:
clap - 序列化:
serde+toml - 表达式解析:
evalexpr - 图算法:
petgraph - 文件扫描:
walkdir
命令参考
# 验证 Schema 和依赖
# 查看配置结构
# 启动交互式配置
# 生成代码
值优先级
配置值的优先级从高到低:
- 环境变量:
ENABLE_NET=true - .config 文件: 用户保存的配置
- Schema 默认值: Kconfig.toml 中定义的默认值
开发路线图
- TOML Schema 定义与解析
- 依赖图构建与循环检测
- 交互式 TUI(基础功能)
- 代码生成(C、Rust、DOT)
- 搜索功能增强
- TUI 帮助系统完善
- build.rs 深度集成
- Cargo Features 动态支持
贡献
欢迎提交 Issue 和 Pull Request!
许可证
MIT License