如何构建组件已经查找生成文件
更新时间:2025/10/15
在Gitcode上查看源码组件构建与发布
在构建组件时,我们需要切换到组件目录,执行bingo命令,否则bingo命令不生效,这里以组件iam组件来作为示例,演示组件的构建流程。
一、简述
进入到iam的源码目录,执行如下命令来查看支持的构建参数
shell
[07:16:31 root(1110):/home/workspace/codehome/iam]# bingo --help
Component commands
build 构建出包
analysis BMC product or package analysis, including build dependency analysis, interface dependency analysis, etc
deploy 将组件及其依赖部署至temp/rootfs目录
test 构建DT.
gen 代码自动生成,支持Lua和C语言,C组件需要在service.json中添加`"language": "c",`配置.
Misc commands
help 获取命令帮助
upgrade 升级bingo版本
输入"bingo <command> -h"获取子命令帮助
[07:16:33 root(1110):/home/workspace/codehome/iam]#在上面返回的结果中,我们只使用到部分,build,gen为主要使用的命令,下面主要介绍这两条命令
二、自动生成命令
gen命令用来自动生成代码,现在组件的代码都是使用此工具来自动生成,自动生成后才能进行构建,所以这里先讲gen命令,查看gen命令的help菜单
shell
[07:28:19 root(1110):/home/workspace/codehome/iam]# bingo gen --help
usage: bingo gen/当前只支持C和lua语言代码生成 [-h] [-v VERSION] [-w]
代码自动生成.
options:
-h, --help show this help message and exit
-v VERSION, --version VERSION
use specified version
-w, --with_template generate with template
[07:33:21 root(1110):/home/workspace/codehome/iam]#从返回结果,可以看到这个参数结构相对比较简单,建立好模板文件,使用如下命令即可生成代码
shell
# -bt debug: 构建类型
# --stage rc: 预发布包
# 如果在mds目录下配置了model.json,则带上-w参数来进行模板生成
bingo gen -bt debug --stage rc
# 日志截取,没有发生报错,则表示自动生成成功
python3 /home/workspace/codehome/iam/temp/lua_codegen/script/template.py -d /home/workspace/codehome/iam/proto -j /home/workspace/codehome/iam/temp/lua_codegen/temp/iam/ -n iam -i /home/workspace/codehome/iam/temp/lua_codegen/temp/iam/db_json.json -f /home/workspace/codehome/iam/temp/lua_codegen/script/lua_format.py -t orm_classes.lua.mako -o /home/workspace/codehome/iam/gen/iam/orm_classes.lua
make[3]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen/templates/apps'
make[2]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen/templates'
make[1]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen'三、构建命令
build命令用来构建组件的版本包,使用help命令来看下build命令的帮助文档
shell
[07:16:33 root(1110):/home/workspace/codehome/iam]# bingo build --help
usage: bingo [-h] [-b BOARD_NAME] [-bt BUILD_TYPE] [--stage STAGE] [-u] [-r REMOTE] [-s] [-nc] [-o OPTIONS] [--user USER] [--summary] [--minimum]
[--package_info PACKAGE_INFO]
component dt different version
options:
-h, --help show this help message and exit
-b BOARD_NAME, --board_name BOARD_NAME
支持的单板名,请参考manifest/build/product目录
-bt BUILD_TYPE, --build_type BUILD_TYPE
构建类型,可选:dt,debug,release 默认:debug
--stage STAGE 组件包发布阶段, 可选: dev(developer), pre, rc, stable 默认:dev
-u, --upload 上传组件包到conan仓
-r REMOTE, --remote REMOTE
conan仓别名,请检查conan remote list查看已配置的conan仓 默认: openubmc_dev
-s, --from_source Build from source, include dependency component
-nc, --no_cache 不使用~/.conan/data目录下的缓存包(构建前删除缓存)
-o OPTIONS, --options OPTIONS
Define options values (host machine), e.g.: -o Pkg:with_qt=true
--user USER 指定conan包的user字段,尝试从/etc/bingo.conf文件读取conan.user字段,否则由程序管理
--summary 打印conan构建详细日志,默认:打印简要信息
--minimum, -m 获取 dt 构建的最小版本
--package_info PACKAGE_INFO, -pi PACKAGE_INFO
package_info 文件路径, 此文件在 manifest 构建时会在 inner 目录生成
[07:20:03 root(1110):/home/workspace/codehome/iam]#根据上面的返回结果,需要使用的参数只有其中几个,以具体实例来讲解
shell
# -b Openubmc: 指定单板名,某些组件和单板名挂钩,需要指定单板名来打入某些文件,如果组件和单板无关,不带此参数
# -bt debug: 构建类型,调试包
# --stage rc: 预发布包
bingo build -b Openubmc -bt debug --stage rc
# 截取部分日志放在这里
Downloading conanmanifest.txt completed [17.89k]
Downloading conaninfo.txt completed [2.97k]
Downloading conan_package.tgz completed [543.98k]
Decompressing conan_package.tgz completed [0.00k]
iam/1.20.31@hw.ibmc.release/rc: Package installed cb9794cb17b2f104bdddb1803a0104b29d12d75c
iam/1.20.31@hw.ibmc.release/rc: Downloaded package revision 35401b8fc57f5024055b6203bbd5abfe
Build successfully
[07:28:19 root(1110):/home/workspace/codehome/iam]#在Build successfully上方,能看到编译完成的版本号,这个版本号就是生成的组件版本
四、构建生成文件
conan2:
组件下执行bingo build默认发布阶段为dev,此时通过cd ~/.conan2/p可进入到生成组件文件夹。
- 示例:
- 通过输入conan cache path vpd/1.80.18@openubmc/stable可以查看组件配方文件路径 /root/.conan2/p/vpd264d23efe75e8/e
- 通过输入conan cache path vpd/1.80.18@openubmc/stable:582e093ee6c9a154a84fdfd89574d24b71441f47可进入制品文件夹 /root/.conan2/p/b/vpd6d29851846626/p
bingo会根据组件的conanfile.py或者conanbase.py文件,会构建生成对应的conan文件,其中:
- e文件夹中是构建的配方文件,在文件的export()方法中定义。
- s文件夹中是构建的源代码文件,在文件的source()方法中定义。
- es文件夹是导出的source中的文件,在文件的exports_sources中配置相关信息。
- b文件夹是构建源代码生成的文件,是根据文件中build方法配置构建信息
- p文件夹中是打包构建后的代码,在文件的package方法中配置打包信息。
- 在metadata.json文件中,可以查看生成文件的recipe哈希值、包的唯一标志符以及包的修订哈希值,它用于跟踪包的变化。可通过此编号在conan仓中找到上传组件信息。
conan1(后续将不再维护):
组件下执行bingo build默认发布阶段为dev,此时通过cd ~/.conan/data/<组件名>/<版本号>/hw.ibmc.dev/dev可进入到生成组件文件夹。
bingo会根据组件的conanfile.py或者conanbase.py文件,会构建生成对应的conan文件,其中:
- source文件夹中是构建的源代码文件,在文件的source()方法中定义,如果没有定义,会默认复制文件同层文件和文件夹。
- export_source文件夹是导出的source中的文件,在文件的exports_sources中配置相关信息。
- build文件夹是构建源代码生成的文件,是根据文件中build方法配置构建信息
- package文件夹中是打包构建后的代码,在文件的package方法中配置打包信息。
- 在metadata.json文件中,可以查看生成文件的recipe哈希值、包的唯一标志符以及包的修订哈希值,它用于跟踪包的变化。可通过此编号在conan仓中找到上传组件信息。