Serge Guelton via llvm-dev
2019-May-03 17:17 UTC
[llvm-dev] Generalizing LLVM extensions that provide new passes
Hi llvm-dev, I'd like to advertise a modest on-going effort to make it easier for third-party project to build a full llvm toolchain with extra custom passes without 1) relying on loaded passes 2) modifying llvm codebase. 1) Is generally achieved using in-tree developpment, but then you need to add your extra passes in the existing layout, which mixes llvm codebase and third-party codebase thus breaks 2). There already exist a project that achieves 1) and 2): Polly. Unfortunately, it comes at the price of explicit reference to Polly with Conditional CMake Statements and #ifdef in C++ sources, which is rather specific. My proposal is to allow projects in tools/ to register themselves as llvm-extension using a cmake variable, which would automatically result in the registration of passes in clang/opt/bugpoint. This is just a generalization of the Polly approach, Polly providing a nice use-case to validate the approach. The expected workflow would be: 1. checkout the monorepo 2. checkout third party extensions under tools (or symlink) 3. configure the build with -DLLVM_EXTENSION_LIBS listing the extra projects 4. build The extension should provide an initialize##Ext##Passes and a Register##Ext##Passes function in the appropriate namespace as entry-point into pass managers, and that's all. https://reviews.llvm.org/D61446 tries to implement such behavior, I'd be happy to gather any thoughts on the subject.