鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

源码迁移

源码迁移功能检查分析用户C/C++/ASM/Fortran/Go/Java/Python/Scala语言等源码文件,定位出需迁移代码并给出迁移指导。

命令功能

在终端环境下分析用户C/C++/ASM/Fortran/Go/Java/Python/Scala语言软件的可迁移性。

注意事项

如果用户所处的环境Glibc版本低于2.28,则无法使用最新的汇编文件自动翻译功能,如有需要,请按照以下步骤进行操作:

若使用RPM安装方式,则PATH为“/usr/local/devkit”;若使用解压压缩包方式安装,则PATH为解压路径。

  • 可连接外网:在“PATH/porting/devkitplugins/all_asm/bin”下执行bash addAsmLibraries.sh即可。
  • 无法连接外网:需手动创建“tmp/rpm”目录,把RPM包放至“PATH/porting/devkitplugins/all_asm/tmp/rpm”目录下,然后在“PATH/porting/devkitplugins/all_asm/bin”下执行bash addAsmLibraries.sh即可。
    表1 RPM包获取

    服务器架构

    RPM包

    获取方式

    x86

    glibc-2.28-101.el8.x86_64.rpm

    获取链接

    libstdc++-8.3.1-5.el8.0.2.x86_64.rpm

    获取链接

    ARM

    glibc-2.28-101.el8.aarch64.rpm

    获取链接

    libstdc++-8.3.1-5.el8.0.2.aarch64.rpm

    获取链接

命令格式

1
devkit porting src-mig [-h | --help] {-i INPUT_PATH | --input INPUT_PATH} [-b {make,cmake,automake,go,bazel,blade} | --build-tool {make,cmake,automake,go,bazel,blade}] [-c 'command' | --cmd 'command'] [-s {c|c++|asm|fortran|go|java/python/scala}* | --source-type {c|c++|asm|fortran|go|java/python/scala}*] [-t target-os | --target-os target-os] [-p compiler-version | --compiler compiler-version] [-f fortran-compiler-version | --fortran-compiler fortran-compiler-version] [-o OUTPUT_PATH | --output OUTPUT_PATH] [--set-timeout TIMEOUT] [-l {0,1,2,3} | --log-level {0,1,2,3}] [-r {all,json,html,csv} | --report-type {all,json,html,csv}] [--ignore ignore_file] [--ignore-path IGNORE_PATH] [--macro MACRO] [--keep-going {True,False}] [-np number| --number-of-progress number] [--kp-compatibility]

参数说明

表2 参数说明

参数

参数选项

参数说明

-h/--help

-

可选参数,获取帮助信息。

-i/--input-path

-

必选参数,待扫描源码的文件夹或压缩包所在路径,若存在多个扫描路径需使用空格分隔。

例如:/home/test1 /home/test2。

须知:

若待扫描文件路径中包含以下架构相关的关键词(关键词位于_或/之后,并在/_或.之前,不区分大小写),则忽略该文件,例如:/home/Arm_branch/test1。

PPC、PPC64、s390、s390x、powerpc、alpha、MIPS、itanium、WIN64、WIN32、BOOST_COMP_MSVC、arm、aarch64、sparc、sparc64

-b/--build-tool

make/cmake/automake/go/bazel/blade

可选参数,构建工具,默认make。

  • “go”构建工具只在待扫描源码类型包含“go”且不包含“fortran”时可用。
  • 待扫描源码类型包含fortran或go时,不支持“bazel”“blade”选项。
    • bazel构建工具仅支持BUILD、BUILD.bazel构建文件中编译选项的识别和BUILD、BUILD.bazel、MODULE.bazel构建文件中CPU选项的识别。
    • blade构建工具仅支持*.conf、BLADE_ROOT、BLADE_ROOT.local、BUILD构建文件中编译选项的识别。
  • “源码类型”同时选择“c/c++”“go”时:
    • 若构建工具为“make”,则C/C++扫描源码和Makefile(构建扫描),Go扫描源码。
    • 若构建工具为“go”,则C/C++扫描源码和Makefile(全量扫描),Go扫描源码。

-c/--cmd

-

可选参数,源码的构建命令,需使用单/双引号引起来。若命令包含空格,需使用单引号。

  • 当构建工具为make或cmake时,若未指定-c选项或构建工具与-c选项不匹配,将扫描所有文件;若构建工具与-c匹配,构建成功时将扫描对应的内容,构建失败时将扫描所有文件。
  • 当构建工具为bazel或blade时,若指定-c选项,将扫描所有文件。
  • 命令行工具源码构建命令不支持设置变量和export环境变量。

    例如:"CFLAGS='-O0 -g';make"或"export CFLAGS='-O0 -g';make"。

-s/--source-type

c/c++/asm/fortran/go/java/python/scala

可选参数,待扫描源码类型,默认为'c,c++,asm'。

-t/--target-os

详见-h帮助信息。

可选参数,迁移的目标操作系统,如果用户不输入则默认为当前操作系统。

-p/--compiler

详见-h帮助信息。

可选参数,编译器版本,c/c++/asm和go语言使用相同的编译器版本。默认为目标操作系统附带的编译器版本。

-f/--fortran-compiler

flang2.1.0/flang2.3.0/flang2.4.0/flang2.5.0/flang2.5.0.1/flang3.0.0/flang3.1.0/flang3.2.0/flang4.0.0/flang4.1.0/gfortran7/gfortran8/gfortran9

可选参数,fortran代码的编译器版本,默认为flang2.5.0.1。

-o/--output

-

可选参数,扫描报告的存放路径,默认存放在当前执行路径下,报告名称为特性名称_时间戳。

--set-timeout

-

可选参数,任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。

-l/--log-level

0/1/2/3

可选参数,设置日志级别,默认为1。
  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

-r/--report-type

all/json/html/csv

可选参数,扫描报告的格式,默认为all。
  • all:生成JSON、HTML、CSV三种格式报告。
  • json:生成JSON格式报告。
  • html:生成HTML格式报告。
  • csv:生成CSV格式报告。

--ignore

{install_path}/porting/ignore_rules.json

可选参数,可通过配置屏蔽扫描规则文件,屏蔽不影响扫描结果的信息。默认读取工具路径下的ignore_rules.json文件,具体格式请参见屏蔽扫描规则文件说明(--ignore)

--ignore-path

-

可选参数,指定需要屏蔽扫描的源码文件或源码文件夹所在路径,若存在多个路径需使用空格分隔。

例如:/home/test /home/a.cpp

--macro

-

可选参数,自定义x86平台宏。输入自定义宏时,多个宏之间请用“;”进行分隔。

--keep-going

True/False

可选参数,发现arm/arm64/aarch64关键字是否继续扫描。

  • True
  • False

-np/--number-of-progress

-

可选参数,配置源码扫描并发进程数,默认为1。

若配置的进程数超过当前主机的CPU核心数,系统会自动调整为当前主机的CPU核心数。

--kp-compatibility

-

可选参数,指定该选项将只进行鲲鹏平台跨代际的兼容性检查,目标平台为鲲鹏920新型号处理器,建议在完成x86到鲲鹏的迁移之后再使用该选项。

使用示例

此处以分析TestData工程代码并输出CSV格式、JSON格式、HTML格式的分析报告为例,请根据实际情况将“/home/TestData/”替换成实际需要扫描的代码路径。

1
devkit porting src-mig -i /home/TestData/wtdbg2-2.5 -c "make"

返回信息如下,并输出报告。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Using the local system as target os: openeuler20.03sp1
Current progress: #################################  [100%] [Phase 3/3] Scan completed. Generating reports.
Scanned time: 2025/08/11 10:57:16

Configuration:
    Scan code path: /home/TestData/wtdbg2-2.5/
    Compiler: GCC 4.8.5
    Interpreted(Python, Java, Scala): False
    Go: False
    Target OS: openeuler20.03sp1, kernel: 4.19.90
    Software make command: make
    Source Need Migrated: Need Migrated

File scan statistics:
    Total files: 35
    Scanned 34 C/C++ files, 1 Makefile/CMakeLists.txt/Automake related files, total 3 files need to be migrated.
    Scanned 0 pure assembly files, 0 pure assembly files to be migrated.
    Scanned 0 Go files, 0 Go files to be migrated.
    Scanned 0 python files, 0 python files to be migrated.
    Scanned 0 java files, 0 java files to be migrated.
    Scanned 0 scala files, 0 scala files to be migrated.
    Scanned 0 bazel files, 0 bazel files to be migrated.
    Scanned 0 blade files, 0 blade files to be migrated.

Dependency file statistics:
    Adaptable for Compatibility: 1, To be Modified: 0, Total Dependencies: 1

Source file statistics:
    Files to be modified: 3
    Lines to be modified: 17
    Total 10 rules and 6 suggestions.
    Estimated transplant workload: 0.1 person/months.(C/C++/Fortran/Go, 500Line/PM; ASM, 250Line/PM)

For the detailed information, please check:
/home/DevKit_Software/Code_Porting_20250811025716_CLwu9d_zh.json
/home/DevKit_Software/Code_Porting_20250811025716_CLwu9d_zh.csv
/home/DevKit_Software/Code_Porting_20250811025716_CLwu9d.html

不同的目标操作系统支持的SO库不一样,所以分析报告会有差异。

屏蔽扫描规则文件说明(--ignore)

可通过ignore_rules.json文件配置屏蔽扫描规则,配置完成后重新扫描文件,扫描报告中将不会展示该扫描项。配置示例如下:

1
2
3
4
5
6
7
8
9
{
        "src_list": [
                "-march",
                "-mpopcnt",
        ],
        "lib_list": [
                "libz.so.1"
        ]
}
  • lib_list:需要屏蔽的依赖文件列表。
  • src_list:需要屏蔽的源码文件关键字列表。

输出报告说明

表3 迁移报告结果参数说明(以CSV为例)

参数

说明

报告生成时间

显示报告的生成时间。

配置

显示任务名称、报告生成时间、源码文件存放路径、目标操作系统、目标系统内核版本、编译器版本、构建工具、编译命令、是否包含解释性语言和Go语言以及自定义x86宏。

扫描文件统计

显示已扫描的文件数以及需要迁移的文件数。

依赖文件统计

源码包所依赖的与架构相关文件数。

源码文件统计

显示需要修改的文件数、代码行数、规则项和建议项总数,以及预估源码迁移人力。

与架构相关的依赖文件

显示与架构相关的依赖文件详细信息:

  • 文件名:依赖文件名称。
  • 文件类型:依赖文件类型。
  • 分析结果:依赖文件分析结果。
  • 处理建议:待修改文件处理建议。
  • URL:用户可以根据报告提供的下载链接,下载鲲鹏平台可用的文件。

源文件扫描详情

显示源文件分析报告的详细信息:

  • 文件名:扫描文件全路径。
  • 文件类型:扫描文件的类型。
  • 行号(起始行,结束行):函数在文件中的行号。
  • 行数:函数在文件中的总行数。
  • 类别:关键字所属类型。
  • 关键字:关键字名称。
  • 建议:迁移建议或者提示建议。
  • 描述:关键字用法描述。
  • 修改级别:修改级别。
  • 修改原因:显示文件的原因分析。