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 格式动态库.

