C语言 用Meson实现LLVM位码文件的惯用链接、优化和编译

9bfwbjaz  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(208)

我希望能找到正确的方向,找到最惯用的方法来链接和编译使用Meson构建系统的不同编译器生成的LLVM位代码(.bc)文件。
简而言之(摘自ISPC FAQ):

$ ispc --emit-llvm -o foo_ispc.bc foo.ispc
$ clang -O2 -c -emit-llvm -o foo_cpp.bc foo.cpp

$ llvm-link foo_ispc.bc foo_cpp.bc -o - | opt -O3 -o foo_opt.bc
$ llc -filetype=obj foo_opt.bc -o foo.o

其目的是在使用英特尔ISPC编译器和vanilla clang编译的代码中促进内联和跨函数优化。
我已经找到了为ISPC定义generator的例子,知识上差距是如何使用LLVM的位代码链接器(llvm-link)、优化器(opt)和静态编译器(llc)最好地链接/优化/编译LLVM位代码(.bc)文件。
我可以看到library()executable()支持汇编程序(.S)和LLVM IR(.ll)文件,但在文档和源代码中找不到任何关于LLVM位代码的内容。
非常感谢!

ljsrvy3e

ljsrvy3e1#

如果你想让library()executable()处理.bc文件,那么你唯一的选择就是提交上游修改,FAQ中有一个类似的问题总结了这个原因:
https://mesonbuild.com/FAQ.html#i-have-proprietary-compiler-toolchain-x-that-does-not-work-with-meson-how-can-i-make-it-work
Meson需要了解每个编译器的一些细节,以便用它编译代码。这些细节包括每个选项使用哪些编译器标志,以及如何从其输出中检测编译器。这些信息不能通过配置文件输入。相反,它需要更改Meson的源代码,这些更改需要提交到Meson主存储库。理论上你可以运行你自己的派生版本,但是这并不能很好的利用你的时间。请提交代码,这样每个人都可以使用工具链。
你的问题是关于链接和不编译,但我认为答案是一样的。

相关问题