鲲鹏社区首页
中文
注册
开发者
使用DevKit工具迁移开源软件Megahit

使用DevKit工具迁移开源软件Megahit

DevKit软件迁移

发表于 2025/12/05

0

背景介绍

Megahit是一个超快速和内存高效的NGS汇编程序。它是针对多基因组优化的,但也适用于一般的单基因组组装和单细胞组装。Megahit源码包存在大量汇编,迁移到鲲鹏平台前需要识别并验证通过鲲鹏DevKit迁移工具迁移后的代码是否正确,以及识别出是否还有鲲鹏DevKit迁移工具遗漏的相关文件。

本实践使用鲲鹏DevKit迁移工具分析嵌入式汇编软件项目,给出合理建议,帮助用户迁移嵌入式汇编软件项目。

关于Megahit的详细介绍,请访问Megahit的GitHub页面。

语言:C++/C/Python;开源协议:GPL3.0;

软件要求如下:

软件要求
项目 版本 获取地址
开源软件Megahit Megahit 1.2.9 https://github.com/voutcn/megahit/releases/tag/v1.2.9

硬件要求如下:

x86平台环境
项目 说明
服务器 x86虚拟机(KVM)环境
CPU Intel Xeon Processor (Skylake, IBRS) 2.1GHz
OS CentOS 7.6/openEuler 20.03-LTS-SP1/openEuler 22.03
GCC版本 • CentOS 7.6:GCC 4.8.5
• openEuler 20.03-LTS-SP1:GCC 7.3.0
• openEuler 22.03:GCC 10.3.1
安装的工具 鲲鹏DevKit
鲲鹏平台环境
项目 说明
服务器 鲲鹏服务器
CPU 鲲鹏920处理器
OS CentOS 7.6/openEuler 20.03-LTS-SP1/openEuler 22.03
GCC版本 • CentOS 7.6:GCC 4.8.5
• openEuler 20.03-LTS-SP1:GCC 7.3.0
• openEuler 22.03:GCC 10.3.1
安装的工具 鲲鹏DevKit

执行源码迁移

1、准备Megahit源码。

  • 使用MobaXterm工具,以root用户登录服务器。
  • 若存在源码迁移目录请忽略该步骤,否则请手动创建源码迁移目录(以devadmin上传源码迁移文件为例)。
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安装路径,请根据实际路径修改。

  • 从GitHub获取Megahit源码,并上传至该目录解压。
tar -zxvf megahit-1.2.9.tar.gz
cd megahit-1.2.9
  • 创建构建文件夹并进入。
mkdir build && cd build
  • 生成Makefile文件。
cmake .. -DCMAKE_BUILD_TYPE=Release
  • 获取修改后的Megahit源码到本地,然后执行以下命令删除源码迁移目录下的Megahit源码。
rm -rf /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit-1.2.9

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

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

4、查看报告中“需要迁移的源码文件”,单击对应代码文件右侧的“查看建议源码”,查看需要迁移的文件。图 迁移报告提供的依赖库信息看,该源码包不依赖于基本环境(OS环境基本的安装依赖,如Glibc等)外的其它依赖文件。

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

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

修改点一、四,应用自动修改功能。

自动修改后:

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

自动修改后:

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

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

修改建议,同上个文件一样应用自动修改,效果如下:

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

根据建议提示Kunpeng platform不支持BMI2和POPCNT指令,手动修改代码,删除指令-mbmi2和-mpopcnt指令

修改后效果如下:

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

修改建议,应用自动修改,效果如下:

9、迁移后重新编译。将KunpengTrans.h头文件添加到“/opt/DevKit/workspace/devadmin/porting/sourcecode/megahit/src/utils”目录下。

执行如下拷贝命令:

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

再次运行make命令。

运行验证

  • 使用MobaXterm工具,以root用户登录服务器。
  • 进入可执行文件的安装目录。
cd /opt/DevKit/workspace/devadmin/porting/sourcecode/megahit/build
  • 执行以下命令运行算例。
make simple_test

运行完成后命令行将回显以下信息:

本页内容