【系列一:DevKit代码迁移工具】 第二讲:手把手带你使用代码迁移工具实现源码迁移
【系列一:DevKit代码迁移工具】 第二讲:手把手带你使用代码迁移工具实现源码迁移
源码迁移介绍
背景介绍
在国产替代的大背景下,鲲鹏计算平台是一个非常有潜力的产业。
为了解决开发者在x86平台应用向鲲鹏平台移植的过程中遇到的一系列的痛点问题,华为推出了鲲鹏代码迁移工具 (Porting Advisor),帮助开发者加速将x86环境下的应用迁移至鲲鹏平台。
根据华为鲲鹏计算工具链项目组的工具化软件迁移经验,总结了鲲鹏代码迁移工具的实际使用经验,并开发使能出来给开发者,期望能帮助开发者了解如何使用该工具,提高开发者的软件迁移效率。
工具支持的功能特性
当用户能够提供源代码进行迁移分析时,可以使用源码迁移功能完成迁移工作。
源码迁移功能主要解决了用户的代码兼工排查困难、严重依赖迁移的个人经验需要反复依赖编译调错定位导致执行效率低等痛点。
按照源代码到二进制文件的翻译方式的不同,代码迁移工具将编程语言分为两类:一类是编译型,一类是解释型。
支持的源码类型如下:
迁移流程
首先,需要搭建环境,如果直接有鲲鹏环境就直接使用,但也支持x86平台,这方面要求很宽松,也可以直接申请鲲鹏社区提供的远程实验室,远程实验室提供了安装好工具的环境,开箱即用,还是很方便的。
实战项目一:开源软件smartdenovo-master迁移实战
前提条件
- 服务器和操作系统正常运行。
- PC端已经安装SSH远程登录工具。
- PortingAdvisor已在准备好的x86平台环境和银鹏平台环境中完成安装并正常运行。
- 待迁移的相关软件包、源代码已准备就绪。
迁移计划
- 利用Porting Advisor的源码迁移功能对获取到的smartdenovo源代码进行扫描,获取其S0库依赖关系、可迁移性.迁移工作量等分析结果。
- 根据Porting Advisor的源码迁移功能分析得到的smartdenovo依赖关系去准备对应的SO库
- 检查smartdemovo源代码的源代码分析报告,获取编译构建文件、.h/.等源代码文件的修改建议,并根据修改建议进行修改。
- 用修改后的源代码进行编译,生成望鹏版本的smartdenovo软件。
- 使用鲲鹏版本的smartdenovo软件进行部署和简单的验证。
具体环境要求如下,但我们直接用的远程实验室:
操作步骤
-
首先,从https://github.com/ruanjue/smartdenovo下载获取待使用的软件源码包smartdenovo-masterzip。
-
其次,进入Porting Advisor“源码迁移”菜单进行扫描分析。在随后出现的相关配置项和按钮中,单击“上传”,上传前面下载到的smartdenovo-master.zip,并点中输入框,选择源码包为smartdenovo-master”。其它几个选项根据我们实际的情况进行选择。
工具登录后,进入界面如图所示:
在经过分析之后,就可以查看报告了,如下图所示:
在报告中会有详细的建议,也可以查看源代码,获取需要修改的地方和建议。
- 按照建议,修改Makefile文件
在“源码迁移建议”页面,查看Makefile文件的修改建议,迁移建议所示根据以上建议,Makefile文件中需要给CFLAGS变量增加选项内容-march=armv8-a -fsigned-char
,同时,还需要删除CFLAGS变量中的选项-mpopcnt
和-msse3
。修改后的代码 (修改时进行了x86 64分支和aarch64分支的区分处理),修改后的makefile所示如图:
记得修改后,点击保存啊。在这个界面,还有一键Quick fix功能,自动帮助我们一键修改,还是很智能的,挺好用的,有点像kite了。
之后更新修改后的代码,执行编译,编译中可能有一些warning
,如下图所示,可以不用管。
最终编译成功的截图如下:
对了,这个软件可以直接make install
的,很方便。接下来,根据建议,还要修改ksw.c文件。
在完成对Makefile和ksw.c的修改后,可以将修改过的整份源代码下载到鲲鹏环境中,执行make clean && make
命令,完成编译动作,图中的smartdenovo-master是我们需要下载的源代码文件。
Make成功后,可以执行make install
命令执行安装,并检查安装结果,如下图所示:
实战项目二:开源软件dl_poly迁移实战
前提条件和之前项目大同小异,主要介绍不同点。我们先来看看操作步骤:
部分操作步骤的截图如下图所示:
那么,我们按照之前的源码迁移分析,可以同样得到分析报告,如下图所示:
下面查看源码迁移建议,根据建议进行修改。按照扫描建议在第59行和65行的FFLAGS
后添加march=armv8.2-a -mtune=tsv110 -ffree-line-iength-none -cpp -std=legacy
,记得修改完后,要保存一下。
全部迁移完成后,执行编译命令:
这里可能会有些warning
,可不用管,应该是编译环境有点老。
最终,编译成功截图如下图所示:
没有报错,就是成功啊。那么应该有如下文件,特别是DLPOLY.X
。
下面来验证一下。执行如下命令:
which DLPOLY.X
如果能得到如下图所示信息,则表示迁移编译成功了。
总结
在上述的软件迁移实战中,通过对软件迁移过程的完整模拟,覆盖了用户利用代码迁移工具对迁移过程进行前期分析、中期修改和后期编译、重构、验证的过程。在其它软件的迁移中,可以参考本实践的思路和操作过程进行操作。
按照课程要求,学习完本课程后,能够对跨平台软件迁移有一定的了解,同时掌握代码迁移工具的使用,能够熟练使用迁移工具执行迁移任务。
虽然,在老师的带领下,进行了实践,但是感觉这个实践还是比较简单的,实际在做自己的项目迁移时,应该没这么简单,可能会有很多其他的问题,到时候就见招拆招了。
- 点赞
- 收藏
- 关注作者
评论(0)