如何使用 llvm 库
How to use llvm libraries
我在一个由一些 C++ 团队组成的项目中工作。每个团队都提供库,我们的团队正在将这些库集成到前端应用程序中。
该应用程序是跨平台的,这意味着其他团队必须提供为不同 platforms/CPU architecture/configuration 编译的相同(静态)库。例如。我们有 Visual Studio 2015/2013、32 位/64 位、linux、Debug/Release 等
减少这些静态库的数量会很好 "manifests",所以我正在调查 Clang/LLVM。这个想法是将静态库编译成 LLVM 位码并使用 llvm-ar 工具创建一个 llvm 静态库。当我们必须为特定平台制作二进制文件时,我们将使用 llc(LLVM 平台编译器)创建本机代码静态库并使用平台链接器进行链接。
问题:
- 是否有更好的方法来实现我想要实现的目标?
- llc 似乎不支持静态库的编译,只支持单个翻译单元 (.bc -> .o)。当然,我可以提取每个单独的 bitcode 文件,assemble 将其提取到本机目标文件并使用平台库管理器工具 (lib/ar) 来制作静态库,但我想知道是否有更精简的解决方案。
- gold 链接器似乎提供了我需要的东西,但似乎仅限于 ELF 格式。我必须支持Windows/Linux,也许IOS
从特定于目标和特定于平台的语言 (C/C++) 生成的 LLVM IR 不会是目标中立的。考虑类型大小、对齐方式、ABI 要求等。更不用说像预处理器这样的纯源代码功能了。所以,不行,你想的办法根本行不通。
有关更多信息,请参阅 LLVM bitcode cross-platform。
我在一个由一些 C++ 团队组成的项目中工作。每个团队都提供库,我们的团队正在将这些库集成到前端应用程序中。
该应用程序是跨平台的,这意味着其他团队必须提供为不同 platforms/CPU architecture/configuration 编译的相同(静态)库。例如。我们有 Visual Studio 2015/2013、32 位/64 位、linux、Debug/Release 等
减少这些静态库的数量会很好 "manifests",所以我正在调查 Clang/LLVM。这个想法是将静态库编译成 LLVM 位码并使用 llvm-ar 工具创建一个 llvm 静态库。当我们必须为特定平台制作二进制文件时,我们将使用 llc(LLVM 平台编译器)创建本机代码静态库并使用平台链接器进行链接。
问题:
- 是否有更好的方法来实现我想要实现的目标?
- llc 似乎不支持静态库的编译,只支持单个翻译单元 (.bc -> .o)。当然,我可以提取每个单独的 bitcode 文件,assemble 将其提取到本机目标文件并使用平台库管理器工具 (lib/ar) 来制作静态库,但我想知道是否有更精简的解决方案。
- gold 链接器似乎提供了我需要的东西,但似乎仅限于 ELF 格式。我必须支持Windows/Linux,也许IOS
从特定于目标和特定于平台的语言 (C/C++) 生成的 LLVM IR 不会是目标中立的。考虑类型大小、对齐方式、ABI 要求等。更不用说像预处理器这样的纯源代码功能了。所以,不行,你想的办法根本行不通。
有关更多信息,请参阅 LLVM bitcode cross-platform。