执行源码迁移

前提条件

操作步骤

  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 devkit:devkit /opt/DevKit/workspace/devadmin/porting/
      

      /opt:表示DevKit安装路径,请根据实际路径修改。

    3. 进入源码迁移目录并下载Megahit源码。
      1
      2
      cd /opt/DevKit/workspace/devadmin/porting/sourcecode/
      git clone https://github.com/voutcn/megahit.git
      
    4. 将代码进行合并。
      1
      cd megahit/ && git submodule update --init
      
    5. 创建构建文件夹并进入。
      1
      mkdir build && cd build
      
    6. 生成Makefile文件。
      1
      cmake .. -DCMAKE_BUILD_TYPE=Release
      
    7. 获取修改后的Megahit源码到本地,然后执行以下命令删除源码迁移目录下的Megahit源码。
      1
      rm -rf /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit
      

  2. 返回源码迁移任务创建页面,通过文件夹方式上传Megahit源码,编译器版本选择“BiSheng Compiler 2.5.0.1”,编译命令填写“make -C build”其它参数采用默认值即可,单击“开始分析”进行扫描分析。

    图1 创建任务

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

    图2 查看报告

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

    其中,phmap_config.h和xxh3.h源码文件中已存在宏定义,当源码结构中存在SSE2和SSSE3时才定义头文件,该宏定义嵌套了两层,所以无需修改。

    图3 查看需迁移文件

  5. 根据系统提示的修改建议进行修改,鼠标点击内嵌汇编代码(cpu_dispatch.h), 可以看到四处待修改点。

    图4 查看修改点
    1. 修改点一、三,应用自动修改功能。
      图5 应用自动修改1

      自动修改后:

      图6 自动修改效果1
    2. 修改点二、四,应用自动修改功能。
      图7 应用自动修改2

      自动修改后:

      图8 自动修改效果2
      图9 自动修改效果3

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

      图10 修改后效果1
      图11 修改后效果2
    1. 单击“保存”,本文件修改完成。

  6. 根据系统提示进行修改,鼠标移至构建文件(megahit/src/kmlib/kmrns.h)待修改点处,可以看到三处待修改点,一处需要修改,两处无需修改。

    图12 待修改点

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

    1. 修改建议,同上个文件一样应用自动修改,效果如下:
      图13 修改效果
    2. 单击“保存”,本文件修改完成。

  7. 根据系统提示进行修改,鼠标移至构建文件(megahit_core.dir/flags.make)待修改点处,可以看到两处待修改点。

    图14 待修改点
    1. 根据建议提示Kunpeng platform不支持BMI2和POPCNT指令,手动修改代码,删除指令-mbmi2和-mpopcnt指令。
      图15 手动修改

      修改后效果如下:

      图16 手动修改效果
    2. 单击“保存”,本文件修改完成。

  8. 根据系统提示进行修改,鼠标移至构建文件(megahit_core_popcnt.dir/flags.make)待修改点处,可以看到一处待修改点。

    图17 待修改点
    1. 修改建议,应用自动修改,效果如下:
      图18 修改效果
    2. 单击“保存”,本文件修改完成。

  9. 迁移后重新编译。

    1. 将KunpengTrans.h头文件添加到“/opt/DevKit/workspace/devadmin/porting/sourcecode/megahit/src/utils”目录下。

      执行如下拷贝命令:

      1
      cp /opt/DevKit/devkitplugins/inline_asm/config/KunpengTrans.h /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit/src/utils
      
    2. 再次执行make命令。
      1
      cd /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit/build && make