Modern C++ framework library for BMC application development
| Files | Last commit | Last update |
|---|---|---|
| 2 months ago | ||
| 1 month ago | ||
| 5 months ago | ||
| 3 days ago | ||
| 2 months ago | ||
| 24 days ago | ||
| 1 day ago | ||
| 1 day ago | ||
| 24 days ago | ||
| 14 days ago | ||
| 24 days ago | ||
| 24 days ago | ||
| 15 days ago | ||
| 24 days ago | ||
| 4 months ago | ||
| 3 months ago | ||
| 2 months ago | ||
| 1 month ago | ||
| 4 months ago | ||
| 2 months ago | ||
| 1 day ago | ||
| 3 months ago | ||
| 4 months ago | ||
| 13 days ago | ||
| 4 days ago | ||
| 4 months ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 3 months ago |
libmcpp
验证说明:本文档是 libmcpp 组件构建与测试的唯一指导文档,验证流程请严格按本文档执行。
docs/目录主要包含特性说明文档,其中docs/6.meson构建说明.md为历史构建参考,当前构建请以本 README 为准。本组件支持 Ubuntu 24.04 LTS(x86-64) 和 openEuler 24.03 LTS(aarch64/Kunpeng) 构建,推荐使用 Ubuntu 24.04 LTS;CentOS、Debian 等其他系统均不支持,不要尝试使用其他镜像替代。
libmcpp(MC++)是 openUBMC 的现代 C++17 基础框架,提供反射系统、异常处理、日志系统、应用框架、变体类型、信号槽和 Future/Promise 等核心功能组件,帮助开发者构建健壮、高效的 C++ 应用。
目录
仓库地址
https://gitcode.com/openUBMC/libmcpp
系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Ubuntu 24.04 LTS(x86-64,推荐) openEuler 24.03 LTS(aarch64/Kunpeng,验证基线 LTS-SP4) |
| 芯片架构 | x86-64(amd64)、aarch64(arm64) |
| Python | >= 3.10(init.py 运行依赖) |
bingo、Conan 等构建工具由 init.py 自动安装,无需手动准备。
容器构建镜像
推荐使用 Docker 容器进行构建,可使用以下镜像快速启动开发环境。
x86-64(Ubuntu,推荐)
docker pull swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_26.06
aarch64(openEuler,ARM 构建)
docker pull --platform linux/arm64 swr.cn-north-4.myhuaweicloud.com/openubmc/openeuler:20261024_1
环境依赖
构建 libmcpp 前需完成 openUBMC 开发环境初始化(安装 bingo、Conan、Node.js、配置 Conan 远程仓库等)。完整初始化步骤和常见问题排查请参阅 openUBMC 构建指导书,该文档包含容器环境搭建、init.py 执行、Conan 登录验证等全部操作说明。
禁止手动安装 bingo 和 Conan:手动安装(如
pip install conan)会导致 Conan 远程仓库认证失败,bingo build无法拉取依赖包。所有构建工具必须通过 manifest 仓库的 init.py 流程一键安装。
构建
获取组件代码
前提:已完成 环境依赖 中的 init.py 初始化流程,
bingo和conan命令可用。
cd /home/workspace
git clone https://gitcode.com/openUBMC/libmcpp.git
组件级构建
进入 libmcpp 组件目录后,使用 bingo 执行构建:
cd /home/workspace/libmcpp
# 默认 dev 阶段构建
bingo build --stage=dev
# 构建并发布到 stable 阶段
bingo build --stage=stable
# Release 类型构建
bingo build --stage=dev -bt release
构建参数说明
bingo build [-h] [-bt BUILD_TYPE] [--stage STAGE] [-u] [-r REMOTE] [--conan2] [-nc] [-o OPTIONS] [--user USER] [-wb] [--ccache]
| 参数 | 说明 | 默认值 |
|---|---|---|
-bt / --build_type |
构建类型,可选 debug、release |
debug |
--stage |
包发布阶段,可选 dev、pre、rc、stable |
dev |
-u / --upload |
上传组件包到 Conan 仓库 | — |
-r / --remote |
Conan 仓库别名 | — |
--conan2 |
强制使用 Conan2 构建组件 | — |
-nc / --no_cache |
强制更新 Conan 缓存依赖 | — |
-o / --options |
定义组件选项值 | — |
--user |
指定 Conan 包的 user 字段 | openubmc |
-wb / --without_build |
不强制源码构建组件自身 | — |
--ccache |
使用 ccache 加速 C/C++ 编译 | — |
libmcpp 支持的组件选项(-o 参数):
| 选项 | 说明 | 默认值 |
|---|---|---|
asan |
启用 AddressSanitizer | False |
gcov |
启用代码覆盖率 | False |
test |
启用测试构建 | False |
test_utilities |
启用测试工具库 | False |
examples |
启用示例构建 | False |
enable_luajit |
启用 LuaJIT | True |
use_shm |
使用新 SHM 架构 | False |
use_old_shm |
使用旧 dbus/shm 兼容架构 | True |
chip |
指定芯片型号 | — |
架构选项互斥:
use_shm和use_old_shm禁止同时为True。默认走旧架构(use_old_shm=True),试新架构需-o use_shm=True -o use_old_shm=False。
测试
使用 bingo test 运行各类测试,需加 -jit 参数,否则测试会失败:
# 运行单元测试
bingo test -ut -jit
# 运行集成测试
bingo test -it -jit
# 运行单元测试并指定过滤
bingo test -ut -jit -f <filter>
# 运行单元测试并启用 ASAN
bingo test -ut -jit -as
# 运行 clang-tidy 静态检查
bingo test -ct -jit
常用测试参数:
| 参数 | 说明 |
|---|---|
-ut |
启用单元测试 |
-it |
启用集成测试 |
-mt |
启用 mock 测试 |
-ft |
启用 fuzz 测试 |
-f |
测试过滤 |
-jit |
需加此参数,否则测试会失败 |
-as |
启用 AddressSanitizer |
-ct |
启用 clang-tidy 静态检查(详见 CONTRIBUTING.md) |
项目结构
libmcpp/
├ include/ # 公共头文件(mc/*.h)
├ libraries/ # 7 个子项目源码
│ ├ mcbase/ # 基础库(246 头文件,21 子模块)
│ ├ mcengine/ # 对象引擎(56 头文件)
│ ├ mcapp/ # 应用框架(40 头文件)
│ ├ mcexpr/ # 表达式引擎(17 头文件)
│ ├ mcdbus/ # D-Bus 封装(16 头文件)
│ ├ mcdatabase/ # 数据库层(11 头文件)
│ └ log_appenders/ # 日志扩展(3 头文件)
├ mds/ # MDS 模型定义
├ test/ # 测试相关
├ tests/ # 测试数据与用例
├ examples/ # 示例代码
├ scripts/ # 构建/测试/CI 脚本
├ docs/ # 特性说明文档(6.meson构建说明.md 为历史构建参考)
│ ├ api/ # API 文档
│ ├ design/ # 设计文档
│ └ lua_api/ # Lua API 文档
├ stub/ # Stub 文件
├ patches/ # 补丁文件
├ conanfile.py # Conan 构建定义
├ meson.build # Meson 构建定义
├ meson_options.txt # Meson 构建选项
├ LICENSE # Mulan PSL v2 许可证
├ CHANGELOG # 变更日志
└ README.md # 本文件
功能模块
| 模块 | 特性 |
|---|---|
| reflect | 类/枚举反射、对象序列化、嵌套类型支持、STL 容器支持 |
| log | 异步日志、多后端(Appender)、日志格式定制、上下文追踪 |
| exception | 异常链、错误码映射、堆栈符号解析 |
| application | 事件循环、插件系统、配置管理 |
| variant | 动态类型系统、JSON 互操作 |
| filesystem | 路径操作、文件 IO、目录遍历 |
| future | 异步任务、链式操作、异常传播 |
文档导航
- 架构设计 - 核心组件交互关系
- 异常设计 - 错误处理最佳实践
- 日志配置 - 日志格式与 Appender 配置
- 反射使用 - 反射系统详细用法
- API 文档 - 各模块 API 参考
- 示例代码 - 包含插件系统、异步任务等示例
许可证
本项目基于 Mulan PSL v2 许可证开源。详情请参阅:https://license.coscl.org.cn/MulanPSL2