已合并
refactor: 拆分build.sh为模块化脚本 #1204
liu-wei创建于 7月30日
refactor: 拆分build.sh为模块化脚本 #1204
已合并
liu-wei创建于 7月30日
liu-wei
liu-wei成员
7月30日

描述

将 build.sh(~1900行)按职责拆分为 8 个模块化脚本,提升可维护性和复用性。

模块结构

文件 行数 职责
build.sh 12 入口:source 所有模块
scripts/build_conf.sh 163 全局变量、路径、工具函数
scripts/build_options.sh 973 选项解析、参数校验、帮助信息
scripts/build_cmake.sh 147 CMake 参数组装、项目初始化
scripts/build_lib.sh 284 库构建、二进制构建、包构建
scripts/build_ut.sh 33 单元测试构建
scripts/build_example.sh 267 示例构建与运行
scripts/build_genop.sh 72 算子代码生成
scripts/build_clean.sh 41 构建清理

功能等价性

  • 35 个函数全部迁移,逻辑未改动
  • 命令行接口不变:所有 --xxx 参数行为一致
  • 构建流程不变:cmake 参数、编译选项、包类型处理完全一致

关联的Issue

#670

测试

所有拆分脚本后的函数测试,覆盖29个用例场景,全都PASS,仓库基本编译出包功能验证okay。

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liu-wei 的贡献)
liu-weiliu-wei成员
7月30日 创建了 pull request,commit 075a78f5
atomgit-bot
atomgit-bot
7月30日 评论:

变更摘要

此 PR 将原先单体式的 build.sh(约 1884 行)拆分为多个功能模块化的脚本文件,放置于 scripts/ 目录下。重构后 build.sh 仅保留入口逻辑,各职责分别由独立脚本承载:构建清理、CMake 参数组装、全局配置与工具函数、命令行选项解析与校验、示例构建、算子代码生成、库与二进制包构建、单元测试构建等。整体变更不引入新功能,仅对原有构建逻辑进行模块化重组。

主要改动

  • build.sh 精简为入口脚本:原先约 1884 行的单体构建脚本被清空,所有业务逻辑迁移至 scripts/ 下的各子模块脚本中。
  • 新增 scripts/build_conf.sh 全局配置模块:提取了全局变量(如 RELEASE_TARGETSSUPPORT_COMPUTE_UNIT_SHORT)、路径定义(BUILD_PATHINCLUDE_PATHLIB_PATH 等)、以及工具函数(in_arraynormalize_compute_unitcheck_option_validityprint_error 等)。
  • 新增 scripts/build_options.sh 命令行解析模块:提取了 usage 帮助信息(按子命令分类展示)、checkopts 选项解析、check_param 参数校验、check_help_combinations 组合校验,以及 set_create_libsset_ut_modeparse_changed_files 等辅助函数。
  • 新增 scripts/build_cmake.sh CMake 参数组装模块:提取了 custom_cmake_argsassemble_cmake_argscmake_init 函数,负责将各类构建开关(ASAN、Valgrind、覆盖率、静态库等)转换为 CMake 参数并执行项目初始化。
  • 新增 scripts/build_lib.sh / build_clean.sh / build_ut.sh / build_example.sh / build_genop.sh 构建执行模块:分别封装了库构建(build_libbuild_binarybuild_packagebuild_static_lib)、清理(clean_buildclean_build_outclean_build_binary)、单元测试构建(build_ut)、示例构建运行(build_example 及 eager/graph 模式)、以及算子脚手架代码生成(gen_opgen_aicpu_op)等逻辑。
likedislike
atomgit-bot
atomgit-bot
7月30日 评论:

代码审查

所有 9 个文件均已审查。总结如下。


审查总结

按优先级统计

优先级 数量
P1 1
P2 3
P3 4

各文件审查结果

文件 结果
build.sh 无新增问题(管道 + set -eo pipefail 在 bash 中的退出码传播经分析是正确的)
scripts/build_clean.sh 无问题
scripts/build_cmake.sh 1 个 P3(不必要的命令替换)
scripts/build_conf.sh 2 个 P2(COLOR_RED 未定义、ASCEND_HOME_PATH 可能为空)、1 个 P3(cann_3rd_lib_path 缺少 =
scripts/build_example.sh 无独立新增问题(ASCEND_HOME_PATH 问题已在 build_conf.sh 中报告)
scripts/build_genop.sh 1 个 P2(退出码被 echo 覆盖 + Python 缺失无错误退出)
scripts/build_lib.sh 无新增问题
scripts/build_options.sh 1 个 P3(死代码 THREAD_NUM 赋值)
scripts/build_ut.sh 1 个 P1(反引号命令替换导致 find 输出被当作命令执行)、1 个 P3(=~ 应为 ==

整体风险评估

本次重构将约 1884 行的单体 build.sh 拆分为 8 个模块化脚本,结构清晰。但引入了 1 个 P1 级别缺陷build_ut.sh 中反引号包裹 find 可能造成意外命令执行)和 3 个 P2 级别缺陷(颜色变量丢失、路径变量可能为空、genop 退出码被吞没),这些需要在上线前修复。另有 4 个 P3 级别的代码质量改进建议。整体风险:中等偏高,建议修复 P1 和 P2 问题后合入。

类型 数量
🔴 阻塞 1
🟡 建议 4

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
7月30日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月30日 评论:

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


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ops-cv 王林木, 徐鲁威 (2/2) 王林木 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

liu-wei, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了89条消息 查看更多
loov成员
26 天前 评论:

/lgtm

likedislike
llimwang成员
26 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
26 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
26 天前 关闭了关联的issue
CANN-robotCANN-robot成员
26 天前 合入了pull request