使用DevKit工具迁移开源软件SmartDenovo
发表于 2025/12/05
0
背景介绍
SmartDenovo是一个同时适用于PacBio和Nanopore测序数据的denovo组装软件,它是一款基于C语言开发的开源软件。相较于其他组装软件(如:Canu、Falcon),SmartDenovo组装可从raw reads开始,不需要经过error correction纠错过程。经初步组装后,SmartDenovo还提供了工具对初始组装的contig进行polish,生成consensus,也可以使用其他consensus polish工具来纠错。
本实践使用鲲鹏DevKit中的迁移工具进行源码迁移,帮助用户实现软件源码迁移至鲲鹏平台。覆盖了前期分析、中期修改和后期编译、重构、验证的过程,用户在其他软件的迁移中,可以参考本实践的思路和操作过程进行操作。
语言:C;开源协议:GPL-3.0 License
软件要求如下:
| 软件要求 | ||||
|---|---|---|---|---|
| 项目 | 版本 | |||
| 开源软件SmartDenovo | smartdenovo-master | https://github.com/ruanjue/smartdenovo | ||
硬件要求如下:
| 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 | |
执行源码迁移
扫描源代码
- 从GitHub下载获取待使用的软件源码包smartdenovo-master.zip。
- 打开鲲鹏DevKit插件并登录鲲鹏DevKit工具,在左侧选择“源码迁移”进行扫描分析。上传smartdenovo-master文件夹压缩包,其它几个选项根据实际情况进行选择,如所示。

- 单击“开始迁移”,进行分析并得到扫描分析报告,如图 迁移报告所示。

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

- 选择“需要迁移的源码文件”中不同的源码文件进行操作,即可切换至对应源码文件的迁移建议页面,如图所示。

- 根据迁移报告,确认有两个文件需要修改。在“源码迁移建议”页面,检查每个文件的修改建议,并根据建议进行源代码修改,主要执行两个动作:
- 根据“需要迁移的源码文件”中Makefile文件内显示红色波浪线提示的内容,修改Makefile文件。
- 根据“需要迁移的源码文件”中ksw.c文件内显示红色波浪线提示的内容,修改ksw.c文件。
- 在“源码迁移建议”页面,查看Makefile文件的修改建议,如图所示。

具体建议内容如下图所示。


- 根据以上建议,Makefile文件中需要给CFLAGS变量增加选项内容“-march=armv8.2-a -fsigned-char”,同时,还需要删除CFLAGS变量中的选项“-mpopcnt”和“-msse3”。获取并安装鲲鹏系统库(BoostKit-ksl_2.3.1.zip)后,在GLIBS变量中添加“-I /usr/local/ksl/include/ -L /usr/local/ksl/lib/ -lavx2ki”。 修改后的代码(修改时进行了x86_64分支和aarch64分支的区分处理),如图所示。

- 修改ksw.c文件,在“源码迁移建议”页面,查看ksw.c文件的修改建议,如图所示。


这种提示都是关于intrinsic函数使用方面的内容。根据提供的建议,单击“QuickFix”增加‘#include "avx2ki.h"’到ksw.c文件中,并针对x86和aarch64分别设置头文件包含的分支定义,以确保在代码同时适配x86和aarch64两种架构的情况下完成代码的修改,如下方回显内容所示(以编辑器版本GCC 4.8.5为例)。
1 #if defined(__aarch64__)
2 #include "avx2ki.h"
3 #endif
...
31 #if defined(__x86_64__)
32 #include <emmintrin.h>
33 #endif
运行验证
- 进入源码所在目录,执行以下命令,完成编译动作,如图所示。若编译失败请参考源码编译失败。
make clean && make
- 编译成功后,可以执行以下命令执行安装,并检查安装结果,如图所示。
make install

以上表明,SmartDenovo已编译安装到鲲鹏平台上。


