Page 49 - 《软件学报》2026年第6期
P. 49

2368                                                       软件学报  2026  年第  37  卷第  6  期



                  ir_file=$(find $rpm_dir -name '*.so.bc')
                  cmd_file=$(find $rpm_dir -name '*_cmd')
                  # 提取原始的转换命令
                  original_cmd=$(cat $cmd_file)
                  # 针对不同指令集扩展进行批量转换
                  for isa in rv64gc rv64gcv; do
                   elf_output=${ir_file%.so.bc}.$isa.so
                   clang -shared $ir_file -march=$isa -fuse-ld=lld -O3 -o $elf_output
                  done
                 done

                  A.5   使用云端转换版本
                    用户可以通过如下命令直接安装特定微架构优化版本的软件包.

                 # 用户端  dnf 安装示例
                 dnf config-manager --add-repo http://cloud.example.com/repos/rv64gc/
                 dnf install example-package
                  A.6   创建指令集模板

                    RuyiBuild  工具链自带的指令集解析脚本可自动提取目标设备上的                 ISA  扩展信息.
                 # 示例: 自动提取   RISC-V  设备指令集扩展信息
                 ISA_EXTENSIONS=$(grep ^isa /proc/cpuinfo | head -n1 | awk '{print $2}')
                 echo "Detected ISA extensions: $ISA_EXTENSIONS"

                    上述脚本执行后, 会得到类似的信息: Detected ISA extensions: rv64imafdcv_zicsr_zifencei.
                    随后, RuyiBuild  工具链利用上述得到的指令集扩展信息, 自动生成一个仅包含空函数的                        C  语言模板文件
                 (empty.c).

                 // empty.c: 空函数模板文件
                 int empty_function(void) { return 0; }
                    并利用目标设备的指令集扩展信息编译生成对应的                  LLVM IR  模板文件.

                 # 生成模板   IR  文件
                 clang -emit-llvm -march=$ISA_EXTENSIONS -c empty.c -o template.bc
                  A.7   调整目标  IR  文件

                    调整目标    IR  文件指令集属性匹配模板.
                 llvm-attribute-adjust --template=template.bc \
                  --input=target_software.bc \
                  --output=target_software_adjusted.bc

                  A.8   编译生成优化的动态库
                    生成最终精细化优化的         ELF  格式动态库.
   44   45   46   47   48   49   50   51   52   53   54