使用DevKit工具迁移开源软件Megahit
发表于 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
运行完成后命令行将回显以下信息:



