《megahit 源码迁移》项目大作业解析

举报
Tianyi_Li 发表于 2022/11/27 21:48:51 2022/11/27
【摘要】 利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行。Megahit是一个超快速和内存高效的NGS汇编程序。它是针对多基因组优化的,但也适用于一般的单基因组组装和单细胞组装。Megahit源码包存在大量汇编,迁移到鲲鹏平台前需要识别并验证通过“鲲鹏代码迁移工具”迁移后的代码是否正确,以及识别出是否还有“鲲鹏代码迁移工具”遗漏的相关文件。

megahit 源码迁移》项目大作业解析

一、作业题目

利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行。

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

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

语言:C++/C/Python

开源协议:GPL3.0

二、操作前提

1)认真观看迁移工具的实战视频。

2)在鲲鹏社区申请远程实验室,操作系统选择OpenEuler。

https://www.hikunpeng.com/zh/developer/devkit

3)这里选择远程服务器,具体配置和信息如下图所示。

申请之后,会收到一封邮件,里面会有详细的环境配置信息。

三、准备工作

1. 准备Megahit源码

a. 使用MobaXterm工具,以root用户登录服务器。

b. 进入“鲲鹏代码迁移工具”源码文件存放路径。

cd /opt/portadv/portadmin/sourcecode/

c. 下载Megahit源码。

git clone https://github.com/voutcn/megahit.git

d.将代码进行合并(注意,命令中init的前面是两个英文的短划线)

cd megahit/ && git submodule update --init

e.创建构建文件夹并进入。

mkdir build && cd build

f.生成Makefile文件。

cmake .. -DCMAKE_BUILD_TYPE=Release

g.修改megahit目录属组。

cd ../ && chown -R porting:porting *

操作步骤截图

1.我们先在终端执行如下命令获取gcc版本。

gcc --version

我们可以看到gcc版本是10.3.1

2. 登录鲲鹏代码迁移工具Web界面

具体登录信息可在邮件中查看,注意需要登录VPN。


a. 选择源码迁移,进行源码分析参数填充

点击开始分析,会进入如下界面,注意看右下角:

分析完成后,会在如下图位置看到报告:

b. 任务执行成功,查看源码报告

我们点击,进入报告:

点击“源码迁移建议“,查看具体建议:

c. 点击报告源码迁移建议查看需要迁移的文件

d. 根据系统提示的修改建议进行修改

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

根据建议提示Kunpeng platform不支持BMI2和POPCNT指令,手动修改代码,删除指令-mbmi2和-mpopcnt指令。根据系统提示进行修改,鼠标移至构建文件(megahit_core_popcnt.dir/flags.make)待修改点处,可以看到一处待修改点,修改建议,同上个文件。

记得修改完成每个文件后,单击保存。

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

这里根据Quick Fix提示,自动应用完成修改即可。自动修改效果如下图所示:

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

3. 迁移后重新编译。

a. KunpengTrans.h头文件添加到目录下到

/opt/poradv/portadmin/sourcecode/megahit/src/utils

执行如下拷贝命令

cp /opt/portadv/tools/inline_asm/config/KunpengTrans.h /opt/portadv/portadmin/sourcecode/megahit/src/utils/

b. 再次执行make命令。

cd /opt/portadv/portadmin/sourcecode/megahit/build/ && make


错信息如下图所示:


c. 修改/opt/portadv/portadmin/sourcecode/megahit/src/kmlib/kmrns.h文件。

执行vi命令进入文本,注释11行代码:

vi /opt/portadv/portadmin/sourcecode/megahit/src/kmlib/kmrns.h


这是因为<x86intrin.h>为平台的系统头文件,在Arm平台上没有此系统头文件。


d. 再次执行make命令,编译通过。

编译时间有点长,请耐心等待。编译成功的截图如下所示:

4. 运行和验证

a. 使用MobaXterm工具,以root用户登录服务器。

b. 进入可执行文件的安装目录。

cd /opt/portadv/portadmin/sourcecode/megahit/build/

c. 执行以下命令运行算例。

make simple_test

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

这表示我们迁移成功了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。