[llvm-dev] Looking for an out-of-source "Hello, world" LLVM/Clang pass example

Scott Pakin via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 10 12:45:34 PDT 2019


I'm looking for a "Hello, world" pass example that ideally has all of
the following properties:

  1) Complete.  That is, it should have functional CMakeLists.txt,
     etc. files.

  2) Out-of-source.  That is, it should build against a binary LLVM
     installation.

  3) Modern.  That is, I don't want to use any deprecated APIs or
     CMake macros.

  4) Clang-compatible.  That is, I'd like the pass to be able to run
     directly from Clang instead of having to generate bitcode, run
     opt on it, and then feed it back to Clang for linking.

Does such an example exist and if so, where can I find it?

Here's what I've considered to date:

  * llvm/lib/Transforms/Hello, but this appears to be in-source only.

  * http://llvm.org/docs/WritingAnLLVMPass.html, but this example
    doesn't appear to be runnable directly from Clang.

  * https://llvm.org/docs/CMake.html, but its proposed CMake line of
    "add_llvm_library(LLVMPassname MODULE Pass.cpp)" blows up with

      CMake Error at /usr/local/lib/cmake/llvm/AddLLVM.cmake:659 (install):
        install TARGETS given no LIBRARY DESTINATION for module target
"Hello".
      Call Stack (most recent call first):
        Hello/CMakeLists.txt:3 (add_llvm_library)

    (Perhaps this is fixable with additional CMake macro calls, but
    that's what I list "Complete" as a desideratum.)

  *
https://llvm.org/devmtg/2015-10/slides/GueltonGuinet-BuildingTestingDebuggingASimpleOutOfTreePass.pdf,
    but this uses add_llvm_loadable_module in CMake, which I read in
    some thread is likely to go away, and the legacy pass manager,
    while is also likely to go away, to make the pass usable from
    Clang.

See my predicament?  What's a poor pass-writer to do?

Thanks in advance,
-- Scott


More information about the llvm-dev mailing list