| Use FetchContent to reuse CANN engineering common cmake repo Co-authored-by: shengxinchen<chenshengxin@huawei.com> # message auto-generated for no-merge-commit merge: !988 merge feat/use-cann-cmake into master Use FetchContent to reuse CANN engineering common cmake repo Created-by: shengxinchen Commit-by: shengxinchen Merged-by: cann-robot Description: ## 描述 本 PR 将 PTO-ISA 组件仓的 cmake/version 接口与 run 包打包流程整体切换到 CANN 工程公共仓 cann/cmake,移除组件仓内重复的版本管理函数、打包脚本与 内置 makeself 集成。整个改造由两个 commit 组成。 ## 主要变更 ### Commit 1:cmake/version 接入工程公共仓(e0530842) - 新增 cmake/fetch_cann_cmake.cmake,通过 FetchContent 拉取 cann-cmake - CMakeLists.txt 改调 init_cann_project / check_cann_pkg_build_deps / add_cann_version_info_targets - version.cmake 切到工程仓 API:set_cann_package / set_cann_run_dependencies - cmake/func.cmake 删除重复的 set_package / set_build_dependencies / set_run_dependencies / check_pkg_build_deps / add_version_info_targets / replace_cur_major_minor_ver - 删除 scripts/check_build_dependencies.py、scripts/generate_version_info.py (由工程仓 scripts/version/ 提供) ### Commit 2:打包流程切到 set_cann_cpack_config(077d61e0) - cmake/package.cmake 改用工程仓提供的 set_cann_cpack_config(pto-isa …), install/cleanup/version 等帮助脚本统一从 ${CANN_CMAKE_DIR} 引用 - cmake/fetch_cann_cmake.cmake 中 CANN_CMAKE_TAG 由 master-001 升到 master-017(包含 set_cann_cpack_config 所需修复) - scripts/package/pto_isa/pto_isa.xml 新增 <share_info_name>pto_isa</share_info_name>, 保证生成的 share/info 目录布局正确 - 删除组件仓内重复的打包资产: - cmake/makeself_built_in.cmake、cmake/third_party/makeself-fetch.cmake - scripts/package/common/(py/sh 全部) - scripts/package/latest_manager/scripts/(含 manager_func.sh 等) - scripts/package/package.py - 同步更新 cmake/README*.md、scripts/package/README*.md、SECURITY*.md ### Commit 3:公共编译选项切换到工程公共仓(200f23eb) - 顶层 CMakeLists.txt 在 init_cann_project() 之后新增调用 add_cann_target_options(),引入工程公共仓 cann-cmake 提供的 intf_pub INTERFACE target,封装 -fPIC / -Wall / -Wextra / -fstack-protector-strong、ASAN/TSAN/UBSAN/GCOV 开关、-Wl,-z,relro/now/noexecstack 等公共编译/链接选项 - 组件仓未涉及 device 侧 cmake(无 cmake/device 目录、无 set(PRODUCT_SIDE device)),按"如果涉及 device 编译再追加"原则本 commit 不在 device 侧追加调用 合计:49 files changed, 95 insertions(+), 13841 deletions(-) (commit 1:6 files / +53 / -348;commit 2:42 files / +41 / -13493;commit 3:1 file / +1 / -0) ## 测试 ### Commit 1 sh build.sh --pkg 修改前后 staging 产物字节级一致,仅 version.info 中 timestamp 行不同(符合预期)。 ### Commit 2 对 commit 1 staging 产物 (pre.run) 与 commit 2 staging 产物 (build_out/cann-pto-isa_9.1.0_linux-aarch64.run) 做了 run 包级别 diff 与 安装流程联调: **条件 1:修改前后仅工程脚本差异 — 通过** - aarch64-linux/ 产品载荷 455 个文件字节级一致 - version.info 仅 timestamp 行不同 - 其余差异全部收敛在 share/info/pto_isa/script/(即工程仓提供的 install helper),其中 common_interface.bash → common_interface.sh 为重命名,无外部引用 **条件 2:安装 / 卸载 / 升级流程 — 通过(升级有既有 bug 已确认非本 PR 引入)** | 用例 | 结果 | | --- | --- | | 新包 --full 全新安装 | 通过,落盘 490 文件 | | 旧包 --full 全新安装 | 通过,与新包仅差 common_interface.{bash↔sh} | | --uninstall(新/旧包均测) | 残留 0 文件 0 目录 | | 同版本覆盖安装 | 通过,自动 uninstall→install | | 跨版本卸载(旧装新卸 / 新装旧卸) | 残留均为 0 | | **--upgrade(旧 → 新)** | 失败:ERR_NO:0x0002;ERR_DES:Empty paramters is invalid for install. | | --upgrade 对照(新→新、旧→旧) | 同样失败 | --upgrade 失败可在未改动的 pre.run 上稳定复现,根因在工程仓 install.sh 中 --upgrade 分支未给 IN_INSTALL_TYPE 回填值(详见 pto_install.sh 71-74 行空参拦截),属上游既有问题,**不是本 PR 引入的回归**, 将另起单独修复。 ### Commit 3 对 commit 2 产物(baseline.run)与 commit 3 产物(changed.run)做 run 包级 diff 与安装流程联调: **条件 1:修改前后仅工程脚本差异 — 通过** - 同一构建机相邻时刻分别构建 baseline.run / changed.run,解压后 diff -r 结果仅 share/info/pto_isa/version.info 的 timestamp 行不同,工程脚本与 aarch64-linux/ 产品载荷字节级一致 - 由于 intf_pub 为 INTERFACE target 且当前无 target 链接它,包内容不变符合预期;后续业务 target 通过 target_link_libraries(<tgt> PRIVATE intf_pub) 即可继承公共选项 **条件 2:安装 / 卸载 / 升级流程 — 通过(升级失败与 commit 2 同根因,非本 commit 引入)** | 用例 | 结果 | | --- | --- | | --full 全新安装 | 通过,目录结构、version.info、ascend_install.info 落盘正常 | | --uninstall | 通过,share/info/pto_isa 清空,ascend_install.info 删除 | | --upgrade | 失败:ERR_NO:0x0002;ERR_DES:Empty paramters is invalid for install.,在 baseline.run(未含本 commit)上同样稳定复现,与 commit 2 测试段已定位的上游 install.sh 既有问题同根因 | See merge request: cann/pto-isa!988 | 27 天前 |