---
title: 执行源码迁移
description: "- 已安装鲲鹏DevKit。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/demo/megahitpt_21_0003.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/demo/megahitpt_21_0003.html
indexId: 611ecca65424aa41bb38eaa0d077f138aad32eb880e7a0cf61cea5d993d57d1866
---
# 执行源码迁移

#### 前提条件

- 已安装鲲鹏DevKit。

- 已安装Git并配置环境变量。


#### 操作步骤

1. 准备Megahit源码。

  a. 使用MobaXterm工具，以root用户登录服务器。
  b. 若存在源码迁移目录请忽略该步骤，否则请手动创建源码迁移目录（以devadmin上传源码迁移文件为例）。
    1 2 3 mkdir -p /opt/DevKit/workspace/devadmin/porting/sourcecode/ chmod -R 700 /opt/DevKit/workspace/devadmin/porting/ chown -R username:username /opt/DevKit/workspace/devadmin/porting/

    /opt：表示DevKit安装路径，请根据实际路径修改。 username：表示安装DevKit时使用的用户，请根据实际用户进行替换。

  c. 从    GitHub(https://github.com/voutcn/megahit/releases/tag/v1.2.9)
获取Megahit源码，并上传至源码迁移目录解压。
    1 2 tar -zxvf megahit-1.2.9.tar.gz cd megahit-1.2.9

  d. 创建构建文件夹并进入。
    1 mkdir build && cd build

  e. 生成Makefile文件。
    1 cmake .. -DCMAKE_BUILD_TYPE=Release

  f. 获取修改后的Megahit源码到本地，然后执行以下命令删除源码迁移目录下的Megahit源码。
    1 rm -rf /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9

2. 登录鲲鹏DevKit，在左侧列表中选择“迁移 > 源码迁移”，单击进入源码迁移页签。
3. 通过文件夹方式上传Megahit源码，编译器版本选择“BiSheng Compiler 2.5.0.1”，编译命令填写“make -C build”，其他参数采用默认值即可，单击“开始迁移”进行扫描分析。

  - VS Code
    图1 创建任务

  - WebUI
    图2 创建任务

4. 分析完成后自动跳转至报告页面，单击“查看建议源码”进入“源码迁移建议”页签，查看具体的修改建议。
  图3 查看报告

5. 查看报告中“需要迁移的源码文件”，单击对应代码文件右侧的“查看建议源码”，查看需要迁移的文件。
  图4 查看需迁移文件

  因为该项目由CMake进行编译，CMake中间件用于展示Makefile扫描功能，因此出现了一定的误扫情况，本次最佳实践中无需对这些建议进行修改。以WebUI为例，具体建议如下：

  其中，phmap.h、phmap_bits.h、phmap_config.h和xxh3.h源码文件中已存在宏定义，当源码结构中存在SSE2和SSSE3时才定义头文件，这些宏定义嵌套了两层，所以无需修改。 除后续步骤中需要修改的flags.make文件外，其他.make文件无需修改。

6. 根据系统提示的修改建议进行修改，鼠标单击内嵌汇编代码（cpu_dispatch.h），可以看到五处待修改点，其中四处需要修改，一处无需修改。

  - VS Code
    图5 查看修改点

  - WebUI
    图6 查看修改点


  a. 修改点一、四，单击“Quick Fix > 在本文件中批量修改该类建议”应用自动修改功能。

    - VS Code
      图7 应用自动修改1

      自动修改后：

      图8 自动修改效果1

    - WebUI
      图9 应用自动修改1

      自动修改后：

      图10 自动修改效果1

  b. 修改点三、五，单击“Quick Fix > 在本文件中批量修改该类建议”，应用自动修改功能。

    - VS Code
      图11 应用自动修改2

      自动修改后：

      图12 自动修改效果2

      图13 自动修改效果3

      可以看到自动修改已经给出了具体建议。两处修改点所给的建议准确，效果如下：

      图14 修改后效果1

      图15 修改后效果2

    - WebUI
      图16 应用自动修改2

      自动修改后：

      图17 自动修改效果2

      图18 自动修改效果3

      可以看到自动修改已经给出了具体建议。两处修改点所给的建议准确，效果如下：

      图19 修改后效果1

      图20 修改后效果2


  c. 修改完成后保存。

    - VS Code端：相应文件修改完之后，可使用快捷键“Ctrl+S”保存。
    - WebUI端：相应文件修改完之后，可单击“保存”。
7. 根据系统提示进行修改，鼠标移至构建文件（kmrns.h）待修改点处，可以看到三处待修改点，其中一处需要修改，两处无需修改。

  - VS Code
    图21 待修改点

  - WebUI
    图22 待修改点

Megahit已经对Arm做了部分适配，因此只需使用自动修改功能，不需要使用avx2ki.h头文件。


  a. 修改建议，单击“Quick Fix > 在本文件中批量修改该类建议”应用自动修改，效果如下。

    - VS Code
      图23 修改效果

    - WebUI
      图24 修改效果

  b. 修改完成后保存。

    - VS Code端：相应文件修改完之后，可使用快捷键“Ctrl+S”保存。
    - WebUI端：相应文件修改完之后，可单击“保存”。
8. 根据系统提示进行修改，鼠标移至构建文件（megahit_core.dir/flags.make）待修改点处，可以看到两处待修改点，其中一处需要修改，一处无需修改。

  - VS Code
    图25 待修改点

  - WebUI
    图26 待修改点


  a. 根据建议提示鲲鹏平台不支持BMI2和POPCNT指令，手动修改代码，删除-mbmi2和-mpopcnt选项。

    - VS Code
      图27 手动修改

      修改后效果如下：

      图28 手动修改效果

    - WebUI
      图29 手动修改

      修改后效果如下：

      图30 手动修改效果

  b. 修改完成后保存。

    - VS Code端：相应文件修改完之后，可使用快捷键“Ctrl+S”保存。
    - WebUI端：相应文件修改完之后，可单击“保存”。
9. 根据系统提示进行修改，鼠标移至构建文件（megahit_core_popcnt.dir/flags.make）待修改点处，可以看到两处待修改点，其中一处需要修改，一处无需修改。

  - VS Code
    图31 待修改点

  - WebUI
    图32 待修改点


  a. 修改建议，单击“Quick Fix > 在本文件中批量修改该类建议”应用自动修改，效果如下：

    - VS Code
      图33 修改效果

    - WebUI
      图34 修改效果

  b. 修改完成后保存。

    - VS Code端：相应文件修改完之后，可使用快捷键“Ctrl+S”保存。
    - WebUI端：相应文件修改完之后，可单击“保存”。
10. 迁移后重新编译。

  a. 将KunpengTrans.h头文件添加到“/opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9/src/utils”目录下。
    执行如下拷贝命令：

    1 cp /opt/DevKit/devkitplugins/inline_asm/config/KunpengTrans.h /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9/src/utils

  b. 再次执行make命令。
    1 cd /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9/build && make
