基于2603的openUBMC进行构建
整包构建没有问题
但是进行ut测试时:bmcgo test -ut -r 本地conan仓,报如下错误:
查了一下资料说是boost组件里有个配置和语法是conan 1的,但是构建环境用的是conan2的。
但是这样的话整包也用到了这个boost,为什么整包构建可以过。
答案内容由AI生成,仅供参考:
根据您提供的上下文信息,UT测试构建失败而整包构建成功的原因可以归结为 构建流程中对组件处理方式的不同,以及 Conan 2 与 Conan 1 之间的语法兼容性问题。以下结合上下文中的关键信息进行详细分析。
整包构建(例如构建 .hpm 包)时,系统更倾向于复用已生成的二进制包,而不一定需要从源码重新构建每个组件。上下文明确提到:
“完整构建 hpm 只是构建出了一个跟 hpm 匹配的 package 集,如果将构建生成 packages 推送到 conan 仓,重复构建 hpm 时可以直接复用二进制。”
— Document Chunks id=2(组件构建与发布相关论坛回复)
这意味着,在整包构建过程中,如果缓存中已经存在与当前环境匹配的 boost 二进制包(可能是之前使用 Conan 1 构建或从远程下载的),构建系统会直接使用这些包,不会触发 boost 组件自身的 conanfile.py 中的构建步骤。即使该配方使用了 Conan 1 特有的语法,只要不需要执行它,就不会报错。
此外,整包构建通常通过 bingo build 或类似集成命令完成,这些命令可能自动处理了 Conan 版本切换或使用了预先配置好的环境(例如通过整包缓存 bmc_sdk 等方式),绕过了组件层面的重新构建。
UT 测试(bmcgo test -ut -r 本地conan仓)的目的通常是验证组件本身的正确性,这往往需要从源码构建特定的测试版本,或从指定的本地 conan 仓库获取组件。上下文指出:
测试命令 Bingo_Test 与 Conan 2 存在兼容性问题,需要额外参数:
“Conan2 changes require using the -jit flag in Bingo_Test for successful execution.”
— Relationships(Bingo_Test 与 Conan2)
bmcgo 工具与 bingo 功能重叠,且有依赖管理职责:
“Bmcgo is a command-line tool… handling dependency management, parallel build execution… working in conjunction with Conan.”
— Entities(Bmcgo)
因此,bmcgo test 很可能也面临类似的 Conan 2 适配要求。如果本地 conan 仓库中没有 boost 的预编译二进制包,Conan 会尝试从源码构建 boost。此时,boost 组件的 conanfile.py 脚本会被执行——而该脚本中可能使用了只适用于 Conan 1 的语法或方法(例如 imports、build_policy、特定的 source() 写法等),在 Conan 2 环境下会抛出 ConanException,导致构建失败。
上下文也记录了 boost 组件在构建时曾出现类似错误:
“boost/1.82.0.B001@hw.ibmc.release/rc: Error in source() method… non-zero exit status 128.”
— Document Chunks id=2
这说明 boost 的 source() 方法本身就可能因环境问题失败,而 Conan 版本变更会加剧这类问题。
此外,您所查到的资料“boost 组件里有个配置和语法是 conan 1 的”和上下文中有关 Conan 2 与 Conan 1 差异的描述一致:
“Conan2 是第二版… 与 Conan1 不同的 repository 和 versioning scheme… 不支持某些闭源组件。”
— Entities(Conan2)
| 维度 | 整包构建 | UT 测试 |
|---|---|---|
| 构建方式 | 通常复用缓存的二进制包,不执行组件配方 | 可能因本地仓库缺少二进制包而触发源码构建 |
| 对 Conan 版本要求 | 可使用已有二进制包(可能来自 Conan 1) | 需要执行配方,若配方为 Conan 1 语法则在 Conan 2 下报错 |
| 命令/工具 | bingo build 或集成构建流程(可能已适配) |
bmcgo test -ut 或 Bingo_Test,可能需要额外标志(如 -jit)才能兼容 Conan 2 |
| 缓存与交付 | 整包、bmc_sdk 等形式提供完整二进制集 |
通常依赖本地 conan 仓库或缓存,组件覆盖不一定完整 |
因此,整包构建能够跳过对 boost 配方的执行从而成功,而 UT 测试试图从源码重新构建 boost 时暴露了配方与 Conan 2 的语法不兼容问题。建议检查本地 conan 仓库是否包含 boost 的二进制包,或为 UT 测试提供与整包构建相同的二进制缓存环境,同时考虑将 boost 配方升级至 Conan 2 兼容版本。
从构建过程来看,你应该是没有使用最新的bmcgo配套bingo,test里面我看了一下,你那边带上了一个-o skynet:enable_luajit=True,这种包我们不会提供。
方案1:老版本bmcgo配套 bmcgo test -jit(带-jit在测试场景消除enable_luajit option)
方案2:升级bmcgo配套最新的bingo
我用的就是方案1 先conan remove boost,再 bmcgo test -jit 还是会有这个报错
方案2我试一下
最重要的地方在于 -o *:test=True 和 -o *:enable_luajit=True不能共存