
各位伙伴好:
背景:
为了提升openEuler软件包的编译效率,从而进一步提升门禁和开发者本地开发效率,我们在2503版本使用mold链接器来缩短C/C++库的链接时间。
Mold(A
Modern Linker)是一种对比其他链接器(GNU ld、GNU
gold、LLVM lld)链接效率更高的开源链接器,
其通过更高效的Identical Comdat Folding (ICF)算法、更好的并行编程,更高效的多线程库等技术来提升链接的效率,具体可参考:https://github.com/rui314/mold/blob/main/docs/design.md
具体方案:
由于mold链接器本身存在一定的功能欠缺(对kernel的不支持,对linker
script支持不完善)我们决定对一些编译时间较长且不受mold影响的包打开mold
链接:
1.
在2503版本上白名单内的软件包默认配置使用mold进行链接,白名单可参见:https://gitee.com/src-openeuler/openEuler-rpm-config/blob/openEuler-25.03/0002-Enable-mold-links-through-whitelist.patch#L49
2.
为了提供更加灵活的链接器配置方式,各软件包可在spec文件中覆写_ld_use变量来切换链接器,如:
1)
%define _ld_use %{nil} 取消因为软件包在白名单中所添加的mold选项
2)
%define _ld_use -fuse-ld=xxx
切换到不同的链接器,注意当定义多个-fuse-ld
选项时编译器会取最后一个配置项
3.
版本上会预装mold链接器来提供各软件包对mold的调用
收益:经统计通过使能mold的软件包编译效率总体可提升5+%
我们会持续在社区讨论mold使能可行性与风险,感谢大家。
openEuler Compiler SIG
印闯
participants (1)
-
yinchuang