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

源码迁移

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

命令功能

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

注意事项

如果用户所处的环境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} [-c 'command' | --cmd 'command'] [-s {c|c++|asm|fortran|go|interpreted}* | --source-type {c|c++|asm|fortran|go|interpreted}*] [-t target-os | --target-os target-os] [-p compiler-version | --compiler compiler-version] [-f fortran-compiler-version | --fortran-compiler fortran-compiler-version] [-b {make,cmake,automake,go,bazel} | --build-tool {make,cmake,automake,go,bazel}] [-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}]

参数说明

表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

-c/--cmd

-

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

说明:
  • 当待扫描源码类型包含c/c++/asm/fortran/go时,且构建工具不为bazel,则必须指定构建命令。
  • 命令行工具源码构建命令不支持设置变量和export环境变量。

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

-s/--source-type

c/c++/asm/fortran/go/interpreted

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

interpreted为解释型语言,目前支持的解释型语言包括Python、Java和Scala。

-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。

-b/--build-tool

make/cmake/automake/go/bazel

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

说明:
  • “go”选项只在待扫描源码类型为“go”“go,interpreted”时可用。
  • 待扫描源码类型包含fortran或go时,不支持“bazel”选项。

    bazel构建工具仅支持BUILD、BUILD.bazel构建文件中编译选项的识别和BUILD、BUILD.bazel、MODULE.bazel构建文件中CPU选项的识别。

-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

使用示例

此处以分析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
Using the local system as target os: openeuler20.03sp1
Current progress: ################################# [100%]
Scanned time: 2025/03/31 11:23:07

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.

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 16 rules and 0 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/src-mig_20250331032307_TYjAhO_zh.json
/home/DevKit_Software/src-mig_20250331032307_TYjAhO_zh.csv
/home/DevKit_Software/src-mig_20250331032307_TYjAhO.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:用户可以根据报告提供的下载链接,下载鲲鹏平台可用的文件。

源文件扫描详情

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

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