是否可以使用 filecheck 来匹配 CMAKE 项目中另一个文件的值?

Is it possible to use filecheck to match values from another file inside a CMAKE project?

我正在处理一个 LLVM pass,当 运行 超过 test.ll 文件(在 filecheck 中由 %s 表示)

这是我的 test.ll 文件中的命令

; RUN: opt-load %bindir/MY-PASS.so -json-filename output.json -run-my-pass %s -S -disable-output
; RUN: cat output.json | FileCheck %testdir/output-target.json

我的 ${PROJ_DIR}/Tests 文件夹有:

在 ${BUILD_DIR} 文件夹和 运行ning make check 上使用 CMAKE 配置我的项目后,我遇到了 make check 找不到输出的问题-target.json

make check 能够在 ${BUILD_DIR}/Tests/ 文件夹中生成 output.json,但无法找到扩展为 ${BUILD_DIR}/Tests/Output/test.ll.tmpestdir/output-target.json[的目标文件 %testdir/output-target.json

我应该使用不同于 %testdir 的东西吗?

您可以在 lit 中使用预定义的 substitutions,更具体地说,%ptest_source_root(参见相同的 URL 提供的配置)用于测试发现的变量。

所以,我通常最后做的是为 cmakeconfigure_file 命令提供一个 lit.cfg.in 模板,以便在构建目录,类似于:

# aggregate unit test targets under a pseudo-target
add_custom_target(check)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.in" "lit.cfg")

add_custom_target(lit_tests
COMMAND ${PYTHON_EXECUTABLE} -m lit.main "${CMAKE_CURRENT_BINARY_DIR}" -v)

add_dependencies(lit_tests ${TESTEE_LIB})
add_dependencies(check lit_tests)

这也允许我通过在构建目录中键入 make check 来 运行 lit 测试。

然后在我的 lit.cfg.in 中添加:

config.test_source_root = '@CMAKE_CURRENT_SOURCE_DIR@'
config.substitutions.append(('%outputdatadir', "%p/data/output"))

所以在我的例子中,%p 最终变成了 [absolute-path-to-project-test-root-dir]/data/output,我保留了测试用例的预期文本输出。

终于在一个特定的测试用例中 .ll 我可以使用的文件:

; RUN: diff -w %t %outputdatadir/output-target.json

或类似的东西。