具有LLVM和CMake的LTO

规范

我正在尝试在CMake项目上应用LLVM的链接时间优化,这会创建一个共享库。我的问题与此基本相同:

使用CMake在GCC和Clang / LLVM之间切换

但是,答案似乎不再适用,因为llvm-ld新版本中没有。在命令行上,我运行以下命令来获取LTO(假设只有2个.cpp文件):

编译为字节码:

clang++ -c FirstClass.cpp -O3 -flto -o FirstClass.bc
clang++ -c SecondClass.cpp -O3 -flto -o SecondClass.bc

链接字节代码:

llvm-link FirstClass.bc SecondClass.bc -o unoptimized.bc

优化字节码:

opt -O3 unoptimized.bc -o optimized.bc

将字节码转换为共享对象:

clang++ -shared optimized.bc -o libTest.so

有人可以告诉我如何让CMake运行其他步骤吗?

钱德勒·卡鲁斯

使用Clang并启用LTO的正确方法是在编译时链接时使用命令行-flto标志clang

此外,您将需要在具有链接器的平台上工作,该链接器要么直接支持LTO(通常是Apple的平台),要么具有LLVM链接器插件(Linux使用Gold链接器,但是我想有些人已经获得了BFD链接器的支持)链接器插件)。如果使用链接器插件,则需要确保已安装并安装了LLVM。如果这样做的话,Clang将自动添加必要的链接器命令行选项,以在与链接时使用该插件-flto,即使对于共享对象也是如此。

此外,LLVM项目正在开发一个新的链接器(LLD),它将在其支持的所有平台上开箱即用地支持LTO,但仍处于起步阶段。目前,我知道有人在Windows和Linux上测试了其LTO支持,它似乎运行良好,但仍然缺少许多功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章