开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

使用示例(通过Skill接入第三方Agent)

工作流程

环境检测 → 依赖分析 → 用户确认 → 源码迁移扫描 → 编译验证循环 → 迁移总结报告

详情请参见SKILL.md。

工作目录

<workspace>-arm-migration/
├── reports/      # 扫描报告、依赖分析报告、修改清单、时间线日志
├── downloads/    # 依赖源码包、ARM 预编译库下载
├── build/        # 第三方库临时编译安装目录
├── logs/         # 每轮编译日志
└── devkit/       # DevKit CLI包解压安装目录

操作步骤

以使用Trae将应用Megahit从x86架构迁移至ARM架构为例。

  1. 已在Trae中配置好Skill。

    C/C++迁移的Skill可在开源仓获取,配置方式可参考为第三方Agent配置Skill。

  2. 在对话框中输入迁移意图。
    > 帮我将x86架构的源码项目迁移至鲲鹏架构,项目路径为/home/cpp_projects/megahit-1.2.9.zip

    部分返回信息:

    * Thinking...
      用户要求迁移一个 C/C++ 项目到鲲鹏平台,路径是 /home/cpp_projects/megahit-1.2.9.zip。这正好匹配 cpp-kunpeng-migration
      skill 的描述。我应该调用这个 skill。
    ...
    ...
    ...
      需要先确认项目结构。让我先并行做几件事:
    
      1. 检查 zip 文件
      2. 列出 cpp_projects 目录
      3. 检查架构
    ...
    ...
    ... 
    * Thinking...
    
      1. 阶段 1:环境检测与准备(子 agent 模式)
    
      我有 Agent 工具,可以用子 agent 模式。但是首先我需要读取 environment-prepare/SKILL.md 来了解具体步骤。
    
      让我先读取阶段 1 的 SKILL.md。
    ...
    ...
    ...
  3. 查看迁移流程。
    * Thinking...
    
      │ 阶段 1(环境检测与准备,子 agent) → 阶段 2(依赖分析,子 agent) → 阶段 3...
    
      是顺序箭头,但实际上阶段 2 依赖阶段 1 的环境信息,所以应该串行。
    
      让我先启动阶段 1 子 agent。
    ...
    ...
    ...
      现在启动阶段 2 子 agent。
    
    ⏺ Agent(阶段2-依赖分析与兼容性探测)
      ⎿ Done (66 tool uses, ↓ 48 kB) (ctrl+o to expand)
    
    * Thinking...
    
        合并去重形成统一待确认清单
        通过 AskUserQuestion 向用户提问
        等待用户回复
    
      让我先记录时间戳并读取两份待确认项文件。
    
    ⏺ 阶段 2 完成。记录时间戳,进入阶段 3。
    ...
    ...
    ...
  4. 确认信息。

    迁移过程中有一些安装方式和处理信息需要人为确认,可在下方对话框选择。

    ...
    ...
    ...
    * Thinking...
    
      合并两份待确认项后只有一条统一确认项。我用 AskUserQuestion 工具向用户提问。
    
      注意:阶段 3 的"3.4 登记清单 + 确认切换 + 校验"步骤:因为待切换清单为空,无需切换。
    
      让我向用户提问。
    
    ⏺ 阶段 1、2 完成且无实质性待确认项。现在进入阶段 3,向用户提问确认是否进入源码迁移阶段。
    
    ⏺ AskUserQuestion(迁移确认)
      ⎿ · 环境检测与依赖分析均已完成:鲲鹏环境(openEuler 22.03 SP4 / aarch64 / gcc 10.3.1)具备编译条件,7
        项依赖全部就绪,无待切换项。是否确认开始 Kunpeng 迁移(进入阶段 4 源码迁移扫描与适配)? → 确认,开始迁移
    
    * Thinking...
    
      用户确认开始迁移。我需要创建阶段 4 的任务,并进入阶段 4(源码迁移扫描与适配)。先读取 source-migration-scan/SKILL.md。
    
    ⏺ 用户已确认。创建阶段 4 任务并开始执行。
    
    ...
    ...
    ...
  5. 确认是否使用DevKit工具。

    当未安装DevKit工具时选择自动下载安装,若已安装可直接输入安装路径。

    ...
    ...
    ...
    * Thinking...
    
      DevKit 未安装。按 SKILL 要求,必须向用户提问让其决策如何处理。
    
    ⏺ DevKit 未在系统中检测到,按 SKILL 要求询问用户如何处理。
    
    ⏺ AskUserQuestion(DevKit 处理)
      ⎿ · 未在系统中检测到 DevKit,如何继续阶段 4 扫描? → 自动下载安装
    
    ⏺ 用户选择自动下载。读取 devkit-download.md 执行下载安装。
    
    ⏺ Read(file_path: "/root/.trae/skills/cpp-kunpeng-migration/source-migration-scan/references/devkit-download.md")
      ⎿ # DevKit CLI 包下载与安装
        > **做什么**:从华为云镜像站动态匹配并下载最新 DevKit CLI 包,解压验证后输出 `DEVKIT` 路径变量。
        ## 输入 / 输出契约
    ...
    ...
    ...
    ⏺ DevKit 安装成功。执行 4.1.2 扫描参数确认与 4.1.3 扫描。
    ...
    ...
    ...
    
  6. 自动编译验证。

    DevKit工具扫描并输出迁移报告后,将对应用进行自动编译与验证。

     Thinking...
    
      但是 DevKit 扫描报告说第 396 行 _mm256_loadu_si256 是 Rule 级别 INTRINSICS 问题。这是因为静态扫描看到了 _mm256_loadu_si256
      的使用。但实际上这段代码在 aarch64 上不会被编译(因为 XXH_VECTOR == XXH_NEON 而不是 XXH_AVX2)。
    
      但是!如果用户在 x86 上定义了 XXH_VECTOR=XXH_AVX2,或者使用了 avx2ki.h 兼容层,那么这段代码可能会被编译。由于
      AVX_STRATEGY=ksl,avx2ki.h 提供了 _mm256_loadu_si256 等函数的兼容层。
    
      让我检查 xxh3.h 是否有 include intrin 头文件的地方。
    ...
    ...
    ...
    ⏺ 所有 include 都已正确用架构宏隔离,鲲鹏默认走 NEON 路径,不会编译 AVX2/SSE2 intrinsics。源码适配完成,记录修改清单并进入阶段
      5 编译验证。
    ...
    ...
    ...
    ⏺ 编译成功!退出码 0,0 个 error。所有三个目标都已链接(megahit_core, megahit_core_popcnt, megahit_core_no_hw_accel)。
    
      验证产物存在并记录成功。
    ...
    ...
    ...
    ⏺ 功能测试完全通过!MEGAHIT 在鲲鹏上正确运行,完成全组装流程,输出 2 条 contigs。阶段 5 编译验证完成。进入阶段 6
      生成总结报告。
  7. 查看报告。

    迁移完成后将输出主要迁移成果,关键输出产物,修改统计、必须执行项和建议关注信息等。

    ...
    ...
    ...
    ⏺ 所有阶段完成。
    
        ================ 鲲鹏迁移完成 ================
        状态:编译成功   总耗时:约 25 分 40 秒(6 个阶段)
    
        【各阶段时长】
        - 1 环境检测与准备:3分14秒
        - 2 依赖分析与兼容性探测:6分34秒
        - 3 用户确认与切换:5分40秒
        - 4 源码迁移扫描与适配:4分37秒
        - 5 编译验证循环:3分21秒
        - 6 生成迁移总结报告:1分10秒
    
        【产物】
        - 总结报告:/home/cpp_projects-arm-migration/megahit-1.2.9-arm-migration/reports/migration_summary_report.md
        - 迁移 patch:/home/cpp_projects-arm-migration/megahit-1.2.9-arm-migration/reports/migration.patch(137 行,6
      个源码文件改动,排除二进制)
        - 鲲鹏可执行:/home/cpp_projects-arm-migration/megahit-1.2.9-arm-migration/build/cmake-aarch64/megahit_core(aarch64
      ELF,已链接 libavx2neon.so.2.5.3)
    
        【修改统计】
        - 修改文件 6 个:源码 5 / 构建配置 1(CMakeLists.txt)
        - 编译尝试 2 次,修复错误 1 处(-Werror=conversion 阻塞编译)
    
        【必须执行】
        - [ ] x86 双架构兼容性验证:在 x86 环境执行 `cd /home/cfh/cpp_projects/megahit-1.2.9 && cmake -B build -
      DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc)`,确认迁移修改未破坏原有 x86 编译(所有改动均用
      __x86_64__/__aarch64__ 宏隔离)
        - [ ] 部署到其他鲲鹏机器前,确保目标机器已安装 boostkit-ksl-2.5.3 RPM,或设置 LD_LIBRARY_PATH=/usr/local/ksl/lib
    
        【建议关注】
        - kmlib/kmrns.h 的 _pdep_u32/_pdep_u64 在 aarch64 上由 avx2ki 兼容层提供,与 x86 BMI2
      硬件指令性能可能有差异,热点路径建议后续评测
        - src/utils/cpu_dispatch.h 的 HasPopcnt()/HasBmi2() 在 aarch64 上直接返回 false,megahit checkcpu/checkpopcnt/checkbmi2
      命令在鲲鹏上始终返回 0(预期行为)
        - DevKit 报告的 14 项 PRECOMPILED_MACRO 建议项未修改(已有 __GNUC__ 分支覆盖 aarch64,无需补 #elif)
        - DevKit 报告的 13 项 -Werror=conversion 建议项未启用(原项目代码大量隐式转换会阻塞编译,建议后续治理代码质量后单独启用)
        ================================================
    
      迁移完成。MEGAHIT v1.2.9 已成功适配到鲲鹏(aarch64)平台,编译通过且 megahit --test
      功能测试正常。所有改动都用架构宏隔离,保留了 x86 编译能力。
    ...
    ...
    ...

    迁移总结报告migration_summary_report.md将记录迁移各阶段详情,如时长、过程摘要、修改文件清单和产出清单等。

输出产物

迁移完成后,工作目录的reports/下会生成以下关键产物。

文件

阶段

说明

environment_check_report.md

A

环境基础信息 + 编译依赖状态汇总表

dependency_analysis_<项目名>.md

B

依赖分析报告(依赖清单、兼容性评估、分类结果)

user_decisions.txt

C

用户决策记录

devkit-*/

D

DevKit扫描报告(源码x86专属问题及修改建议)

build_<N>.log

E

每轮编译日志

timeline.log

A-F

各阶段开始/结束时间戳,用于时长统计

migration_summary_report.md

F

迁移总结报告(最终交付物)