Page 37 - 《软件学报》2026年第6期
P. 37
2356 软件学报 2026 年第 37 卷第 6 期
系统中 LLVM IR 文件在终端设备与云端服务器上的实际部署效率与用户体验, RuyiBuild 工具链设计并实现了一
套客户端与云端协同的双模式 LLVM IR 文件动态转换与资源自适应调度机制. 在云端对 IR 进行转换相较于用户
完全从源码构建软件相比, 更能确保软件的一致性, 更能确保相应编译选项真正被使用, 也能降低用户的开发负
担. 该机制充分考虑了客户端设备与云端服务器两类目标场景在计算资源、使用场景与用户体验需求上的显著差
异, 分别设计了对应的动态转换策略与资源调度方案, 从而实现了从 LLVM IR 到目标平台精细优化的 ELF 文件
的高效转换与部署.
如图 3 所示, 在客户端系统中, 首先创建一个只有单函数的 C 文件 (empty.c); 然后根据硬件的指令集信息, 使
用 clang 将该 C 文件编译为 LLVM IR bitcode 格式的模板文件; 该 LLVM IR bitcode 模板文件包含了方便使用的、
以 LLVM IR bitcode 格式存储的当前 CPU 的指令集信息.
IR RPM empty.c
clang+/proc/cpuinfo
/usr/lib64/llvmir/
{ empty.bc
libx.so.1
libx.so.1_cmd}
libx.so.1
llvm-attribute-adjust
libx.so.1_cmd
新 libx.so.1
/var/lib/llvmir/temp/
APP
clang+lld
glib.c
系统负载监控 使用配置文件
环境变量
指定路径 :
ELF格式 /var/lib/llvmir/lib
libx.so.1
/var/lib/llvmir/lib/
加速运行
图 3 RuyiBuild 客户端 IR 转换
如图 3 所示, 用 llvm-attribute-adjust 工具, 基于模板文件提供的信息, 将图 2 中打包得到的 LLVM IR bitcode
文件进行修改, 将其中的原始指令集信息修改为模板文件中的最适合本机的指令集信息, 并生成一个新的 LLVM
IR bitcode 文件. 可以根据记录的 LLVM 版本和编译动态链接库使用的命令, 使用与编译该软件时相同版本的

