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

执行源码迁移

前提条件

  • 已安装鲲鹏DevKit。
  • 已安装Git并配置环境变量。

操作步骤

  1. 准备Megahit源码。
    1. 使用MobaXterm工具,以root用户登录服务器。
    2. 若存在源码迁移目录请忽略该步骤,否则请手动创建源码迁移目录(以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时使用的用户,请根据实际用户进行替换。
    3. GitHub获取Megahit源码,并上传至该目录解压。
      1
      2
      tar -zxvf megahit-1.2.9.tar.gz
      cd megahit-1.2.9
      
    4. 创建构建文件夹并进入。
      1
      mkdir build && cd build
      
    5. 生成Makefile文件。
      1
      cmake .. -DCMAKE_BUILD_TYPE=Release
      
    6. 获取修改后的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 查看修改点
    1. 修改点一、四,应用自动修改功能。
      • VS Code
        图7 应用自动修改1

        自动修改后:

        图8 自动修改效果1
      • WebUI
        图9 应用自动修改1

        自动修改后:

        图10 自动修改效果1
    2. 修改点三、五,单击“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
    1. 修改完成后保存。
      • VS Code端:相应文件修改完之后,可使用快捷键“Ctrl+S”保存。
      • WebUI端:相应文件修改完之后,可单击“保存”
  7. 根据系统提示进行修改,鼠标移至构建文件(kmrns.h)待修改点处,可以看到三处待修改点,其中一处需要修改,两处无需修改。
    • VS Code
      图21 待修改点
    • WebUI
      图22 待修改点

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

    1. 修改建议,同上个文件一样应用自动修改,效果如下。
      • VS Code
        图23 修改效果
      • WebUI
        图24 修改效果
    2. 修改完成后保存。
      • VS Code端:相应文件修改完之后,可使用快捷键“Ctrl+S”保存。
      • WebUI端:相应文件修改完之后,可单击“保存”
  8. 根据系统提示进行修改,鼠标移至构建文件(megahit_core.dir/flags.make)待修改点处,可以看到两处待修改点,其中一处无需修改。
    • VS Code
      图25 待修改点
    • WebUI
      图26 待修改点
    1. 根据建议提示Kunpeng platform不支持BMI2和POPCNT指令,手动修改代码,删除-mbmi2和-mpopcnt选项。
      • VS Code
        图27 手动修改

        修改后效果如下:

        图28 手动修改效果
      • WebUI
        图29 手动修改

        修改后效果如下:

        图30 手动修改效果
    2. 修改完成后保存。
      • VS Code端:相应文件修改完之后,可使用快捷键“Ctrl+S”保存。
      • WebUI端:相应文件修改完之后,可单击“保存”
  9. 根据系统提示进行修改,鼠标移至构建文件(megahit_core_popcnt.dir/flags.make)待修改点处,可以看到两处待修改点,其中一处无需修改。
    • VS Code
      图31 待修改点
    • WebUI
      图32 待修改点
    1. 修改建议,应用自动修改,效果如下:
      • VS Code
        图33 修改效果
      • WebUI
        图34 修改效果
    2. 修改完成后保存。
      • VS Code端:相应文件修改完之后,可使用快捷键“Ctrl+S”保存。
      • WebUI端:相应文件修改完之后,可单击“保存”
  10. 迁移后重新编译。
    1. 将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
      
    2. 再次执行make命令。
      1
      cd /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9/build && make