| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
适配ops-cv静态包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1174 merge adapt-static-build-pr7677 into master 适配ops-cv静态包构建 Created-by: jialimin1 Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 适配 ops-cv 静态包(static library package)构建流程,增强 target 存在性检查和多包合并能力。 ### 变更文件 | 文件 | 变更 | 说明 | |------|------|------| | build.sh | +7 -5 | 静态库构建前检查 target 是否存在;static_library_files 目录缺失时优雅跳过 | | cmake/static.cmake | +33 -31 | OPSTATIC_NAME target 创建跟随 OPHOST_NAME_static / OPAPI_NAME_static 存在性 | | scripts/ci/merge_static_packages.sh | +204 | 新增:解压多个 cann-ops-cv-static tar.gz 包并合并静态库 | ### 关键改动 1. **build.sh**:opapi_cv_static 和 cann_cv_static cmake target 在仅有 AICPU 算子时不存在,原代码无条件构建会报错。改为先 grep -wq 检查 target 存在再构建。 2. **build.sh**:package_static() 中 static_library_files 目录不存在时改为 return 0(非错误退出),适配无需打包静态库的场景。 3. **static.cmake**:原 add_custom_target(${OPSTATIC_NAME}) 无条件创建,导致空 target 构建失败。改为仅在关联的 host/api 静态库 target 存在时才创建。 4. **merge_static_packages.sh**:支持指定 SoC 版本,解压多个 tar.gz 包,合并 include 和 lib64 目录,处理同名 .o 文件冲突。 ## 关联的Issue [#676](https://gitcode.com/cann/ops-cv/issues/676) ## 测试 静态库相关编译安装打包测试 ## 文档更新 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1174 | 1 个月前 | |
fix(build): harden shell command invocation Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !884 merge master into master fix(build): harden shell command invocation Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 加固 build 脚本中的 shell 命令调用,防止特殊字符导致的注入和误解析问题。 ### 主要改动 1. **变量加引号** - 防止文件名含空格/特殊字符时产生 word splitting 和 globbing - cat $CHANGED_FILES → cat "$CHANGED_FILES" - rm -rf ${BUILD_PATH}/* → rm -rf "${BUILD_PATH}"/* 2. **移除不必要的 bash -c** - 直接执行命令,减少 shell 解析复杂度 - bash -c "find ${SRC_DIR} ..." → find "${SRC_DIR}" ... - bash -c "python3 script.py $arg" → python3 "script.py" "$arg" 3. **修复 install.sh 的 bug** - 修复 $0rn typo → $orn - 增加安全检查:判断目录存在后再删除 ### 影响范围 - build.sh - cmake/gen_ops_info.cmake - cmake/symbol.cmake - cmake/ut.cmake - scripts/custom/install.sh - tests/ut/op_kernel/scripts/gen_tiling_head_file.sh ### 安全收益 - 防止含空格/特殊字符的文件路径导致注入 - 减少对 shell 解析的依赖,提高可移植性 - 修复潜在的路径遍历漏洞 ## 关联的Issue 关联 Issue: https://gitcode.com/cann/ops-cv/issues/391 ## 测试 - [ ] 本地 build 测试通过 - [ ] CI 流水线通过 ## 类型标签 - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!884 | 3 个月前 | |
Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !1155 merge remove_pr983_upsample into master Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Revert upsample_nearest2d_grad和upsample_nearest_exact2d_grad修改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联的Issue https://gitcode.com/cann/ops-cv/issues/636 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1155 | 1 个月前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 2 个月前 | |
feat: 新增deb/rpm包custom_postinst.sh和custom_prerm.sh Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1196 merge master_debrmp_scripts into master feat: 新增deb/rpm包custom_postinst.sh和custom_prerm.sh Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 新增 deb/rpm 包的自定义安装后脚本和卸载前脚本,用于 ops-cv 包的生命周期管理。 ### custom_postinst.sh(安装后执行) - 安装 es_cv whl 到 site-packages - 清理 ops_cv 源码目录 - 创建 ops_cv impl 的 __init__.py 文件 - **跨架构 .so 拷贝**:当包架构(PKG_ARCH_NAME)与当前机器架构(uname -m)不一致时,复制 graph/host so 到实际架构目录 ### custom_prerm.sh(卸载前执行) - pip uninstall es_cv 包 - 删除 site-packages 中的 es_cv 文件 - 删除 ops_cv impl 的 __init__.py - 删除跨架构 .so 文件及空目录 - 清理 whl 源码残留和空目录 ### 变更文件 | 文件 | 行数 | 说明 | |------|------|------| | scripts/package/ops_cv/rpm_deb/custom_postinst.sh | 66 | 安装后脚本 | | scripts/package/ops_cv/rpm_deb/custom_prerm.sh | 55 | 卸载前脚本 | ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#665](https://gitcode.com/cann/ops-cv/issues/665) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1196 | 1 个月前 | |
cann-cmake 依赖版本从 master-033 升级至 master-044 Co-authored-by: Ding_Jing<dingjing19@huawei.com> # message auto-generated for no-merge-commit merge: !1156 merge master_033_modify_master_044 into master cann-cmake 依赖版本从 master-033 升级至 master-044 Created-by: Ding_Jing Commit-by: Ding_Jing Merged-by: cann-robot Description: ## 描述 将 cann-cmake 依赖版本从 master-033 升级至 master-044,同步更新 CMake 配置、下载脚本及相关文档中的版本引用和 SHA256 校验值。 具体改动: - cmake/fetch_cann_cmake.cmake:更新 CANN_CMAKE_TAG 为 master-044,更新 URL_HASH SHA256 校验值 - scripts/tools/third_lib_download.py:更新 cmake 下载 URL 为 cmake-master-044.tar.gz - SECURITY.md:更新依赖表中的 cann-cmake 版本引用 - docs/zh/install/compile.md:更新编译依赖说明中的 cann-cmake 版本 ## 关联的Issue #638 ## 测试 根据代码变更,测试场景如下: 1. **编译构建测试** - 执行 cmake 配置和编译,验证 cann-cmake master-044 依赖包能正确下载并完成编译构建 - 验证 URL_HASH SHA256 校验值与 master-044 包匹配,FetchContent 下载校验通过 2. **第三方依赖下载测试** - 运行 scripts/tools/third_lib_download.py,验证 cmake-master-044.tar.gz 能从 OBS 正确下载 3. **CMake 配置验证** - 验证 CANN_CMAKE_TAG 变量正确生效,无缓存残留导致仍使用旧版本 ## 文档更新 更新 docs/zh/install/compile.md 中 cann-cmake 依赖版本说明,从 master-033 更新为 master-044。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [x] 📝 文档更新 - [x] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1156 | 1 个月前 | |
add some new project features. Co-authored-by: liukejin<liukejin@huawei.com> # message auto-generated for no-merge-commit merge: !91 merge merge_project into master add some new project features. Created-by: liukejin Commit-by: liukejin Merged-by: cann-robot Description: ## 描述 add some new project features. 1. add gen timestamp script to append version_info a timestamp 2. support operators pkg cross-compilation 3. update install scripts 4. cmd support asan cov ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-cv!91 | 8 个月前 | |
fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1095 merge master_merge_proto into master fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 scripts/util/merge_proto.py 的 match_op_proto / match_op_proto_extend 函数内 hard-code 的 regex 有 bug:在带 **前置注释** 或 **头文件 guard** 的 proto 文件上,**贪婪匹配会误吞额外内容**,导致 opname 错位或 op_def 包含不该有的头部。 ### Bug 复现 旧 regex: python re.compile(r"REG_OP\((.+)\).*OP_END_FACTORY_REG\(\1\)", re.DOTALL) 对如下典型 proto 文件: c /* Copyright header ... */ #ifndef OP_AAA_PROTO_H_ #define OP_AAA_PROTO_H_ REG_OP(Add) ... OP_END_FACTORY_REG(Add) #endif 贪婪 (.+) 会**尽量多匹配**,跨过注释 + guard 一直吃到文件末尾的最后一个 ),导致: - opname 捕获到的是 Add) ... OP_END_FACTORY_REG(Add(**不是预期的 Add**) - backreference \1 强制 opname 在 OP_END_FACTORY_REG(...) 里**再出现一次**——大多数情况**整个 match 失败**,match_op_proto 返回 None ### 修复方案 把 hard-coded regex 提到模块级 OP_DEF_PATTERN 统一两处复用: python OP_DEF_PATTERN = re.compile( r"(?:[ \t]*/\*\*?(?:[^*]|\*(?!/))*?\*/[ \t]*\n\s*)?" r"(?P<guard>[ \t]*#\s*ifndef\s+\w+[^\n]*\n" r"[ \t]*#\s*define\s+\w+[^\n]*\n\s*)?" r"REG_OP\((?P<opname>.+?)\)" r".*?OP_END_FACTORY_REG\((?P=opname)\)" r"(?(guard)[^\n]*\n[ \t]*#\s*endif[^\n]*)", re.DOTALL, ) #### 4 个关键改动 | 改动 | 修复什么 | |---|---| | OP_DEF_PATTERN 模块级常量 | 性能(编译 1 次 vs 2 次)+ 行为一致(两处不会漂移)| | (?P<opname>.+?) 非贪婪 | 关键修复:贪婪 (.+) 在多 op / 带注释文件上会误吞内容 | | (?P<opdef>...) 包裹 REG_OP 块 + op_def = match.group("opdef") | 关键修复:只取 REG_OP 内部,**op_def 不再带前置注释 / guard**(避免下游 merge_op_proto 拼接时 N 份 license 重复)| | (?(guard)...#endif...) 条件回溯 | 捕获完整的 #ifndef / #define / REG_OP / #endif 三件套;如果有 guard 就必有 endif,缺一即不匹配(坏源不放过)| | match.group("opname") 替代 match.group(1) | 命名组比数字下标可读,扩展时不依赖顺序 | | 文件末尾补换行 | POSIX 规范 | ### 关键设计点:为什么 op_def 用 opdef group 而不用 group(0) match.group(0) 包含**整段匹配**(comment + guard + REG_OP + #endif)。match.group("opdef") 只包含 REG_OP(...)...OP_END_FACTORY_REG(...) 内部。 **为什么不带 comment / guard 进 op_def**: - 下游 merge_op_proto 拼接到合并文件时会**重复 N 份 license 注释和头文件保护**(N = proto 文件数) - op_def 只需要 **op 自身定义**,注释/guard 是源文件层的语义,跨文件合并时不应该重复 ## 关联的Issue Fixes #605 ## 测试 需补充的测试场景(当前 PR 缺 test,可作为 follow-up): | 场景 | 期望 | |---|---| | 标准 proto(无 comment/guard)| 旧行为完全等价:opname=Add, op_def=Add REG_OP 块 | | 带 copyright 注释 + guard 的标准 proto | 新行为可正确解析(**旧 regex 失败**)| | 1 个 proto 文件含 2 个 op,**共享同一组 guard** | finditer 正确返回 2 个 match,opname 各自正确 | | 用 #pragma once 而非 #ifndef 的 proto | guard group 不匹配(fall back 到只匹配 REG_OP 块),**降级而非崩溃**| | 缺 #endif(坏源)的 proto | 条件回溯失败 → match.group("opdef") 不匹配,函数返回 None(不静默吞错)| | 文件全为 // 行注释 + 无 /* */ | comment group 不匹配(content 是 [^*] 仍 ok),只匹配 REG_OP | ## 文档更新 无(build 工具细节,不需要用户文档) ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧪 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1095 | 2 个月前 | |
【fix】: 修复precommit的oat检查抢资源问题 Co-authored-by: zhangfands<18768316492@163.com> # message auto-generated for no-merge-commit merge: !1052 merge zf1 into master 【fix】: 修复precommit的oat检查抢资源问题 Created-by: zhangfands Commit-by: zhangfands Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复precommit的oat检查抢资源问题 本次针对二个问题进修修复,文件抢资源、pip抢资源 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/566 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ops-cv/pull/1047 进行了测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1052 | 2 个月前 |