| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
build: upgrade json third-party from v3.11.3 to v3.12.0 Co-authored-by: zoujiangjiang<zoujiangjiang@h-partners.com> # message auto-generated for no-merge-commit merge: !1308 merge upgrade-json-3.11.3-to-3.12.0 into master build: upgrade json third-party from v3.11.3 to v3.12.0 Created-by: zoujiangjiang Commit-by: zoujiangjiang Merged-by: cann-robot Description: ## 关联 Issue Closes #482 ## 变更内容 将 cmake/third_party/json.cmake 中 nlohmann/json 第三方依赖的下载版本从 v3.11.3 升级到 v3.12.0。 ## 变更范围 仅修改下载 URL 中的版本号,单行改动: - v3.11.3/include.zip -> v3.12.0/include.zip json 为 header-only 依赖,URL 模板与旧版一致,无接口签名/构建逻辑变更。 ## 校验 - 已确认 v3.12.0/include.zip 下载地址有效(ZIP 文件,PK 魔数校验通过)。 See merge request: cann/pto-isa!1308 | 1 个月前 | |
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 | 2 个月前 | |
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 | 2 个月前 | |
Add A5 VfSim tileop costmodel tests Co-authored-by: Chonghao-Wang<1067020754@qq.com> # message auto-generated for no-merge-commit merge: !1372 merge feature/a5-vfsim-native-no-loop-fix into master Add A5 VfSim tileop costmodel tests Created-by: Chonghao-Wang Commit-by: Chonghao-Wang Merged-by: cann-robot Description: ## 描述 在 A5 代际中以 CCE mock 的方式接入 VfSim costmodel,支持对 pto-isa 中 tileop 指令进行时间预测。后端 VfSim 模型以 VfInfo 为统一接口,后续可继续扩展支持任意 VF 算子的时间预测。 ## 实现逻辑 - micro-op 捕获通过 CCE intrinsic mock stub 实现,在源码级拦截 vector intrinsic 调用并记录 VF micro-op。 - for-loop 结构捕获通过 LLVM pass 插桩实现,用于恢复 __VEC_SCOPE__ 内部的循环结构。 - VfInfo 是当前 PTO 和 VfSim costmodel 之间的接口数据结构,包含 VF loop、micro-op、operand、memory location 等信息。 - PTO 侧通过 PredictVfCycles 调用 VfSim costmodel,返回 tileop 的预测 cycle。 - 支持单 VF 和多 VF 两种输入形式: - 单 VF:直接调用 VfSim 预测并返回标量 cycle。 - 多 VF:逐个 VfInfo 调用 VfSim 预测,并将各段 VF cycle 累加后返回。 - 对于 VfSim 暂不支持的指令,走 fallback 路径,以 repeat times * 单指令 cycle 数 的形式返回预测结果。 - 对 plt_b32 等非 micro-op 指令进行了过滤,避免进入 VfSim 预测链路。 - 同步 VfSim 远程分支中关于 VfInfo core API unification、dtype/memory info、loop unroll native runner 等相关更新,并 完成 PTO 侧适配。 ## A5 costmodel入口与调用方式 A5 代际 costmodel 与 A2/A3 代际 costmodel 入口保持一致,使用 PTO 统一入口: cpp #include <pto/pto-inst.hpp> 使用方式保持 tileop 调用形式不变,例如: TADD(dstTile, src0Tile, src1Tile); 编译 A5 costmodel 测试或预测链路时需要开启对应宏: -D__COSTMODEL -D__NPU_ARCH__=3101 其中: - __COSTMODEL 用于启用 PTO costmodel 路径。 - __NPU_ARCH__=3101 用于选择 A5 代际实现。 ## 测试 新增并验证了 A5 VfSim costmodel 的 ST 测试用例,测试目录为: tests/costmodel/st_a5/testcase 测试用例结构仿照既有 ST 测试: tests/costmodel/st/testcase 验证内容包括: - PTO tileop 调用能进入 A5 CCE mock costmodel 链路。 - CCE mock 能正确捕获 VF micro-op。 - LLVM pass 能正确捕获 __VEC_SCOPE__ 内 loop 结构。 - PTO 侧能正确构造 VfInfo。 - VfInfo 中的 micro-op 顺序、repeat 次数、src/dst operand 关系、memory location 符合预期。 - VfSim costmodel 能被 PredictVfCycles 正常调用并返回正 cycle。 - 对 TADD 按不同 shape/repeat 次数进行了覆盖,包括 repeat 为 1、8、16、32、64、96 的场景。 See merge request: cann/pto-isa!1372 | 26 天前 | |
feat: support rpm/deb packaging, fix package name, deps, path.cfg Co-authored-by: zoujiangjiang<zoujiangjiang@h-partners.com> # message auto-generated for no-merge-commit merge: !1357 merge codex/rpm-deb-packaging into master feat: support rpm/deb packaging, fix package name, deps, path.cfg Created-by: zoujiangjiang Commit-by: zoujiangjiang Merged-by: cann-robot Description: ## 描述 参考 ge PR #3508 和 metadef PR #382,为 pto-isa 增加多类型打包能力(rpm/deb/all),修复 path.cfg 不正交问题,并修复包名重复和依赖格式问题。所有改动压缩为单个 commit。 ## 变更类型 - [x] ✨ 新功能 (--pkg-type=rpm/deb/all) - [x] 🐛 Bug 修复 (path.cfg 不正交 / 包名重复 / 依赖格式错误 / postinst 硬编码架构路径) ## 改动清单 1. **升级 cann-cmake tag master-017 → master-042**:新版 set_cann_cpack_config 支持 PACKAGE_TYPE 参数,可切换 CPACK_GENERATOR 为 RPM/DEB/External;未传时回退 External run 包,向后兼容。同时引入 pre_package.cmake / gen_postinst_prerm.py / post_package.cmake 全套 RPM/DEB 支撑。 2. **build.sh 新增 --pkg-type=<run|rpm|deb|all> 选项**:check_pkg_type() 校验非法值(非 run/rpm/deb/all 报错退出 1)。all 模式经 cann-cmake 一次性产出 run+rpm+deb 三包。build_package() 透传 -D PACKAGE_TYPE 给 cmake。 3. **cmake/package.cmake 适配**: - set_cann_cpack_config 传 PACKAGE_TYPE - 移除 NO_COMPONENT_INSTALL 并给所有 install() 加 COMPONENT pto_isa(修复 cann-cmake 在 RPM 模式下组件路径不匹配导致 filelist 生成失败) - 参考 metadef PR #382 删除 path.cfg 的 install 与 EngineeringFiles block 引用,解决多包重复打包 path.cfg 的正交问题 - **修复包名重复 cann-pto-isa-pto-isa**:CPACK_RPM/DEB_COMPONENT_INSTALL=ON 时 CPack 会把组件名追加到包名后,原组件名 pto-isa(连字符)无法构造合法的大写 CMake 变量名(CPackDeb 只认大写形式),导致 deb 包名仍重复。将组件名改为 pto_isa(下划线),并显式设置 CPACK_RPM_PTO_ISA_PACKAGE_NAME / CPACK_DEBIAN_PTO_ISA_PACKAGE_NAME / *_FILE_NAME,使 rpm/deb 包名均为 cann-pto-isa,文件名统一 cann-pto-isa_9.1.0_linux-aarch64.* 4. **version.cmake 修复依赖格式**:set_cann_run_dependencies 的版本条件加 >= 运算符。原写法 "CUR_MAJOR_MINOR_VER"(纯版本号无运算符)经 cann-cmake convert_dependencies_to_package_formats 生成 "pkg 9.1"(无运算符),被 RPM 拆成 "pkg" + "9.1" 两条独立 Requires(9.1 作为不存在的包名导致默认安装报依赖失败)。改为 ">= CUR_MAJOR_MINOR_VER" 后生成 "pkg >= 9.1" / "pkg (>= 9.1)",格式正确,无幽灵 9.1 依赖。 5. **CMakeLists.txt**:新增 PACKAGE_TYPE 默认值 run(CACHE)。 6. **scripts/package/pto_isa/rpm_deb/custom_postinst.sh**:对齐 makeself run 包 root 安装的 IS_FOR_ALL=y 权限模式,使安装后的头文件对所有用户可读(BUILTIN_PERM=555、CUSTOM_PERM=755、ONLYREAD_PERM=444)。架构子目录(aarch64-linux / x86_64-linux)用 uname -m 动态获取 + *-linux 通配兜底,不再硬编码——postinst 跨架构可移植,且所有 chmod/find 加 || true 容错,架构目录不匹配时 postinst 不会在 set -e 下退出非 0(黄区报错根因修复)。不生成 cann_uninstall.sh 和 ascend_install.info:rpm/deb 用包管理器卸载,包数据库和符号链接已由 cann-cmake 生成的 postinst 主体处理。 注意:该脚本被 cann-cmake 内联进 RPM %post 段,RPM spec 宏会扫描百分号,故整个文件不得出现任何字面百分号。 ## 如何测试(root 真实安装验证) 构建: - ./build.sh --pkg → cann-pto-isa_9.1.0_linux-aarch64.run - ./build.sh --pkg --pkg-type=rpm → cann-pto-isa_9.1.0_linux-aarch64.rpm - ./build.sh --pkg --pkg-type=deb → cann-pto-isa_9.1.0_linux-aarch64.deb - ./build.sh --pkg --pkg-type=all → 一次出 run+rpm+deb 三包 - ./build.sh --pkg --pkg-type=foo → exit 1 包名/依赖: - rpm Name = cann-pto-isa(无重复) - deb Package = cann-pto-isa(无重复) - rpm Requires = runtime >= 9.1, opbase >= 9.1, ...(格式正确,无幽灵 9.1) - deb Depends = runtime (>= 9.1), opbase (>= 9.1), ...(格式正确) root 真实安装对比(1212 aarch64 机器,因缺 cann-9.1.0 子包 rpm/dpkg 用 --nodeps / --force-depends 跳依赖): - run 599 条,rpm/deb 597 条(少的 2 条是故意排除的 cann_uninstall.sh 和 ascend_install.info) - 权限:rpm/deb 597 条与 run 包 root 安装完全一致(0 差异) - rpm vs deb:597 条完全一致(0 差异) - postinst 在架构目录改名(模拟不匹配)下仍 exit 0,不会导致 dpkg 报 post-installation script returned error exit status 1 ## 已知问题(非本 PR 范围,属 cann-cmake master-042 上游) 1. cann-cmake 生成的 postinst 在 sh 下有 [: Illegal number: 警告(用 == 比较字符串)。上游问题。 2. 权限对齐目录列表需手动维护:custom_postinst.sh 里 755 目录列表(common/cpu/npu/a2a3/a5)是手列的,include/pto/ 下新增子目录需同步更新。属折中方案的脆弱性。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测(含 root 真实安装/卸载测试 + 三包权限逐条对比) - [x] 我已更新了相关的文档(AGENTS.md) - [x] 我在标题中使用了合适的类型标签(feat:) - [x] 我已经详细阅读了贡献指南 See merge request: cann/pto-isa!1357 | 27 天前 | |
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 | 2 个月前 | |
feat(package): add pkg_inc for internal non-exposed headers Co-authored-by: zoujiangjiang<zoujiangjiang@h-partners.com> # message auto-generated for no-merge-commit merge: !1452 merge feature/pkg_inc into master feat(package): add pkg_inc for internal non-exposed headers Created-by: zoujiangjiang Commit-by: zoujiangjiang Merged-by: cann-robot Description: Per the CANN packaging convention, external headers live in include/ while non-exposed (internal) headers belong under pkg_inc/. Changes: - cmake/package.cmake: install pkg_inc/ alongside include/ into <arch>-linux/pkg_inc (COMPONENT pto-isa). - pkg_inc/pto/{comm,common,costmodel,cpu,npu}: skeleton mirroring the include/pto/ layout for future internal headers. Headers already placed under include/ are left unchanged. Installation: the CANN installer already creates the top-level pkg_inc -> <arch>-linux/pkg_inc symlink, so new internal headers become reachable at <install_path>/pkg_inc/pto/... after install, alongside the existing external headers under <install_path>/include/pto/.... See merge request: cann/pto-isa!1452 | 7 天前 |
cmake/
本目录放仓库用到的 CMake 辅助模块,主要覆盖打包流程与第三方依赖集成。
目录内容
- 与打包相关的 CMake 逻辑(
package目标) - 通过 FetchContent 复用 CANN 工程公共 cmake 仓
cmake/third_party/下的第三方依赖下载/集成脚本
关键文件
cmake/package.cmake:由顶层CMakeLists.txt引入的打包入口函数,调用工程仓提供的set_cann_cpack_config完成 cpack 配置cmake/fetch_cann_cmake.cmake:拉取https://gitcode.com/cann/cmake,并暴露公共函数(init_cann_project、set_cann_cpack_config、内置makeself及 install 脚本等)cmake/func.cmake:项目内本地辅助函数(protobuf、签名、打包)cmake/third_party/:第三方依赖辅助脚本
入口
- 顶层
CMakeLists.txt会引入cmake/package.cmake并调用相关打包辅助函数 build.sh --pkg会触发仓库的打包流程