Pull Request已成功合入, 合并人@CANN-robot
(感谢 yelongjian 的贡献)变更摘要
本 PR 主要修复两方面问题:一是补齐 example/ 样例的文档与入口指引,二是解决清理 output 目录后单元测试构建因三方库缓存失效而链接失败且无法自愈的问题。样例脚本 run_example.sh 由依赖固定路径、无错误处理改为支持 ASCEND_HOME_PATH 覆盖安装路径,并增加环境、构建、产物存在性检查与退出码透传;Makefile 同步支持该环境变量。测试脚本 tests/run_test.sh 增加三方库缺失检测与过期构建目录清理逻辑,强制全量重建。文档侧新增样例说明并提供入口链接,同时补充构建目录与 lib_cache 状态交互说明。
主要改动
- 样例运行脚本增强:
example/run_example.sh改用SCRIPT_DIR定位自身目录,安装路径由ASCEND_HOME_PATH覆盖默认/usr/local/Ascend/cann,并在set_env.sh缺失、make失败、.bin未生成、运行返回非零时输出明确错误并以对应退出码退出。 - 样例构建路径可配置:
example/tc_ge_irrun_open_api_0014/Makefile中ASCEND_PATH改为优先取ASCEND_HOME_PATH,未设置时回退默认 CANN 路径,与运行脚本保持一致。 - UT 构建自愈逻辑:
tests/run_test.sh在build_metadef中检测lib_cache下的libascend_protobuf.so缺失且ASCEND_INSTALL_PATH/lib64亦不存在、而构建目录仍存在时,先删除过期构建目录以强制全量重建三方库,避免 ExternalProject stamp 误判导致链接失败。 - 构建失败提示优化:
tests/run_test.sh中Metadef llt build failed.提示改为引导查看上方 make 输出以定位根因。 - 样例文档与入口指引: 新增
example/README.md、example/README_en.md说明样例定义(tc_ge_irrun_open_api_0014)、前提条件、运行方法与结果判定,并在docs/{zh,en}/quick_install.md场景2 与README{,_en}.md快速开始中补充样例入口链接。


代码审查
审查结论
按文件逐项确认
- example/run_example.sh:已逐行审查(SCRIPT_DIR 解析、ASCEND_HOME_PATH 覆盖、set_env.sh 校验与 source、cd/make/bin 存在性检查、退出码透传)。发现 2 项:set_env.sh 定位假设过强(P2)、
source返回码未校验(P3)。另已核实被删除的旧mkdir tc_ge_irrun_open_api_0014_npu_output_无实际用途 —— 样例实际写入的是./tc_ge_irrun_open_api_0014/tc_ge_irrun_open_api_0014_npu_output_<i>.bin(源码第 365-367 行),与旧 mkdir 创建的目录并非同一路径,因此删除该逻辑不构成回归。 - example/tc_ge_irrun_open_api_0014/Makefile:no issues。
ASCEND_PATH := $(if $(ASCEND_HOME_PATH),$(ASCEND_HOME_PATH),/usr/local/Ascend/cann)用$(if)正确处理了「未设置/空值」两种情形,与 run_example.sh 的默认值一致;去掉尾部斜杠后$(ASCEND_PATH)/...的拼接仍然正确,$(shell uname -m)、include/lib 路径未受影响。 - tests/run_test.sh:已审查
build_metadef(新增自愈分支 +main失败提示),确认BUILD_PATH恒由硬编码build/build_gcov拼接、不会为空,rm -rf目标始终限定在${BASEPATH}内,无「变量为空删除根目录」风险;local、[[ ]]用法与文件既有风格一致。发现 1 项:自愈判据硬编码三方库路径(P3)。第三方库真实安装布局(cmake/ 目录)超出本次工具可访问范围,无法交叉核实,相关结论已相应降低置信度。
统计
- P0:0,P1:0,P2:1,P3:2
总体风险判断
本次改动方向正确:把不可诊断的失败改为明确报错 + 透传退出码,并新增了清理 output 后的构建自愈路径,整体风险低。主要遗留风险集中在「路径/环境假设」上:run_example.sh 对 set_env.sh 位置的强假设可能让已正确配置 CANN 的用户直接失败;run_test.sh 的自愈判据若与实际三方库布局不一致,会在「每次全量重建」和「自愈不触发」之间二选一。建议至少把 run_example.sh 的 set_env.sh 检查降级为警告,并把 run_test.sh 的探测改为与具体文件名无关的判据。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/metadef | ✅ yangyongqiang0606, kobemini (2/2) | ✅ yangyongqiang0606 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
yelongjian, thanks for your pull request. All authors of the commits have signed the CLA. 👍


/compile


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


🟡 Medium Priority
建议:找不到 set_env.sh 时改为警告并继续(环境可能已 source),仅在关键头文件/库目录也缺失时 exit 1;或额外探测 bin/set_env.sh、父目录 set_env.sh 等常见位置。


/lgtm


/lgtm


/approve


Pull Request
描述
修复文档与脚本两处问题:
问题1:样例无文档化承接
quick_install.md「场景2:需要运行样例」指引新手寻找样例,但全仓文档零提及样例定义与入口,example/ 目录无 README。本次:
example/README.md/README_en.md:说明样例定义(tc_ge_irrun_open_api_0014:使用 GE IR Open API 构建 Relu 计算图并在 NPU 上执行)、前提条件(CANN Toolkit、NPU 驱动固件、Python 依赖)、运行方法、结果判定与排查步骤docs/{zh,en}/quick_install.md场景2 与README{,_en}.md快速开始补充样例入口链接run_example.sh移除 find|sed 调试打印,增加 set_env.sh/make/.bin 存在性检查与明确报错、透传退出码(原失败为 exit 255 且无有效错误信息),支持ASCEND_HOME_PATH覆盖安装路径(Makefile 同步)问题2:清理 output 后 UT 构建链接失败且不自愈
先
bash build.sh编译、再清理output目录、再bash tests/run_test.sh -u时,build_gcov中残留的 ExternalProject install stamp 误判三方库已安装而跳过重装,output/third_party/lib_cache中libascend_protobuf.so永久缺失,mmpa 链接失败,脚本仅报 "Metadef llt build failed."。本次:tests/run_test.sh增加自愈逻辑:检测到 lib_cache 中三方库缺失(且 ASCEND 安装目录亦无)而构建目录存在时,自动清理过期构建目录强制全量重建;失败提示改为引导查看 make 输出docs/{zh,en}/build.md4.4 补充build_gcov与output/third_party/lib_cache状态交互说明及手动自救方法(rm -rf build_gcov)变更类型
关联的Issue
无
如何测试
bash -n example/run_example.sh tests/run_test.sh语法通过;本地 pre-commit 全部 Passedbash example/run_example.sh:输出明确报错并以 exit 1 退出(原为不可诊断失败)libascend_protobuf.so存在于 lib_cache 或 ASCEND 安装目录→不触发(不误伤增量构建)bash tests/run_test.sh -u,应自动清理 build_gcov 并全量重建通过核对清单
其他信息
无