如何在使用 cmake 构建的 LLVM 中启用 --debug-only?

How to enable --debug-only in LLVM build with cmake?

我正在使用 cmake 和 Ninja 构建生成器构建 LLVM,如下所示:

cmake path/to/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=1 -DLLVM_ENABLE_CXX1Y=1 -DLLVM_ENABLE_RTTI=1 -DLLVM_TARGETS_TO_BUILD="X86" -G Ninja

现在我正在尝试使用 opt 的 -debug-only=mytype 选项打印一些关于我自己的通行证的调试信息:在我的通行证代码中使用以下内容:

define DEBUG_TYPE "mytype"
DEBUG(errs() << "My debug message\n");

运行 选择如下不会生成任何输出消息:

opt < a.bc > /dev/null -mypass -debug-only=mytype

根据LLVM documentation

For performance reasons, -debug-only is not available in optimized build (--enable-optimized) of LLVM.

我怀疑这是我问题的根源,但我找不到如何在使用 cmake 构建 llvm 时打开 on/off 这个选项。

它是通过启用断言来控制的。 cmake -DLLVM_ENABLE_ASSERTIONS=ON 足以打开它。如果您没有看到调试输出,那么您的代码没有被执行。

我在这里添加对我的问题的补充回答。正如@Joky所说,编译llvm时必须指定cmake -DLLVM_ENABLE_ASSERTIONS=ON。此外,因为我的通行证是在 llvm 源代码树之外构建的,所以在构建通行证时也必须启用断言。