| feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 1 个月前 |