【问题标题】:llvm's cmake integrationllvm 的 cmake 集成
【发布时间】:2012-12-17 22:50:03
【问题描述】:

我目前正在用 C/C++ 构建编译器/解释器。 当我注意到 LLVM 时,我认为它非常适合我的需要,因此我正在尝试将 LLVM 集成到我现有的构建系统中(我使用 CMake)。

我阅读了 this 关于 LLVM 在 CMake 中的集成。我复制并粘贴了示例 CMakeLists.txt,将 LLVM_ROOT 更改为 ~/.llvm/(这是我下载并构建 LLVM 和 clang 的地方),它说它不是有效的 LLVM 安装。我可以实现的最佳结果是通过将 LLVM_ROOT 更改为 ~/.llvm/llvm 的错误消息“找不到 LLVMConfig”。

我的 ~/.llvm/ 文件夹如下所示:

~/.llvm/llvm         # this folder contains source files
~/.llvm/build        # this folder contains object, executable and library files

我通过 SVN 下载了 LLVM 和 clang。我没有用 CMake 构建它。 是我自己还是 CMakeLists.txt 有问题?

【问题讨论】:

  • "t 非常适合我需要的东西" - 当然可以,但为此,您必须先编译它。而且基本上是不可能的。 (为了说明情况:我也是,我正在编写自己的编译器。我决定从头开始手写词法分析器、解析器、优化器和代码生成器,因为对我来说,做这一切比尝试修复更容易LLVM 损坏的构建系统。)
  • Lexer 和 parser 是手写的,但 JIT 编译似乎很好吃。这不是值得努力的事情吗?
  • 当然是(基本上是因为 LLVM 的主要作用是优化),可惜他们没有努力使用标准的构建工具(这被称为“我们是苹果,我们很古怪-综合征”)。
  • 从 LLVM 中获得的是具有低级优化的出色机器代码生成。但这也是您得到的全部 - 您必须自己生成正确的 LLVM IR。如果您想要机器代码,那很好,否则,可能有更简单的方法。 @H2CO3 CMake 和 configure+make 似乎是标准的。或者这与他们使用这些工具的方式有关?
  • @H2CO3 是的,但我该怎么办?构建另一个优化框架?而且我只是不想要一种在运行时很糟糕的语言,因为我太懒了。 ;) @delnan 是的,我想要优化的 JIT 编译。我真的很想有函数指针,我可以映射到游戏中的事件或类似的东西上。

标签: cmake llvm


【解决方案1】:

这个 CMake 文档页面已经烂了,但是为 LLVM 开发设置 CMake 与任何其他项目没有什么不同。如果你的 headers/libs 被安装到非标准前缀中,CMake 就无法猜测它。

您需要将CMAKE_PREFIX_PATH 设置为LLVM 安装前缀或将CMAKE_MODULE_PATH 设置为prefix/share/llvm/cmake 以使其工作。

是的,使用文档中的第二个代码 sn-p(在 Alternativaly, you can utilize CMake’s find_package functionality. 行下)。

【讨论】:

  • 谢谢,这就是我想要的。我的“修复”几乎有相同的效果,但它很安静。我唯一的问题是它没有找到库'jit'。我可以在没有 CMake 错误的情况下插入“全部”和“本机”。我需要重建库吗?我将文件夹从“~/.llvm/llvm”和“~/.llvm/build”更改为“~/.llvm”和“~/.llvm/build”。
  • CMake 缓存中LLVM_NATIVE_ARCH 的值是多少?
  • Err,我可以用 'message(FATAL_ERROR "${LLVM_NATIVE_ARCH}")' 检查它吗?
  • 您可以使用 CMake GUI 或 grep builddir/CMakeCache.txt 文件。
  • 我可以通过 'cat bin/CMakeCache.txt | 找到的唯一 LLVM 条目grep LLVM' 是这个 'LLVM_DIR:PATH=/home/bash0r/.llvm/cmake/modules'
猜你喜欢
  • 2015-07-06
  • 2016-06-25
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多