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

屈晟 等: 面向  RISC-V  指令集多样性的兼容性感知多层级构建方法                                           2367


                  附录  A

                  A.1   封装  install 和  ln
                    以文件安装工具      install 为例, 构建系统调用如下命令安装软件文件.
                 install -D -m 755 libexample.so.1.0.0 $DESTDIR/usr/lib64/libexample.so.1.0.0
                    RuyiBuild  包装脚本首先调用上述原始命令, 以传统方式安装              ELF  文件. 随后, 自动检测到该操作, 额外调用
                 一次镜像命令, 在     LLVM IR  对应的存储目录中安装对应的         LLVM IR  文件.

                 install -D -m 755 $LLVMIR_BASEDIR/$(pwd)/libexample.so.1.0.0 \
                  $LLVMIR_BASEDIR/$DESTDIR/usr/lib64/libexample.so.1.0.0

                    同时, 该包装机制还会自动处理与动态库相关的辅助文件, 如前述章节中提到的记录动态库链接命令的_cmd
                 文件、符号版本脚本_verscript 文件等, 也一并进行镜像安装.
                 install -D -m 644 $LLVMIR_BASEDIR/$(pwd)/libexample.so.1.0.0_cmd \
                  $LLVMIR_BASEDIR/$DESTDIR/usr/lib64/libexample.so.1.0.0_cmd
                 install -D -m 644 $LLVMIR_BASEDIR/$(pwd)/libexample.so.1.0.0_verscript \
                  $LLVMIR_BASEDIR/$DESTDIR/usr/lib64/libexample.so.1.0.0_verscript
                    软链接工具     ln  的包装扩展机制与上述思路类似. 当构建系统调用软链接创建命令:
                 ln -sf libexample.so.1.0.0 $DESTDIR/usr/lib64/libexample.so.1
                    RuyiBuild  工具链包装脚本额外自动执行镜像软链接操作:
                 ln -sf libexample.so.1.0.0 $LLVMIR_BASEDIR/$DESTDIR/usr/lib64/libexample.so.1
                  A.2   扫描文件

                    扫描命令如下.
                 find $LLVMIR_BASEDIR/BUILDROOT -type f \
                  \( -name "*.so*" -o -name "*.a" -o -name "*_cmd" -o -name "*_verscript" \)

                  A.3   生成 RPM 包
                    自动生成的     RPM SPEC  文件片段如下.
                 %files llvmir
                 /usr/lib64/llvmir/libexample.so.1.0.0
                 /usr/lib64/llvmir/libexample.so.1
                 /usr/lib64/llvmir/libexample.so.1.0.0_cmd
                 /usr/lib64/llvmir/libexample.so.1.0.0_verscript
                 %post llvmir
                 # 在安装完成后, 触发后台服务执行转换任务
                 /usr/bin/RuyiBuild-trigger-conversion /usr/lib64/llvmir/libexample.so.1.0.0

                  A.4   批量转换
                    针对不同的指令集扩展组合或微架构选项, RuyiBuild             自动执行类似如下的批量转换命令.
                 # 批量转换示例    (针对不同指令集和微架构)
                 for rpm_dir in /cloud/llvmir_rpm_extract/*; do
   43   44   45   46   47   48   49   50   51   52   53