A way to write new pass by keeping source and build directories separate


I was trying to write a sample optimization pass in LLVM, by following instructions in LLVM doc for Writing a New Pass. But then ran into make issues. The issue is with having separate source and build directories. The LLVM doc for ‘Getting Started’ suggests keeping the two separate, but the ‘Writing a new pass’ doc assumes they are merged. Hence the make issue.

I did a bit of googling and could not find a desired solution. The solutions proposed were to combine the source and build directories.

I am happy to say that I could find a solution with keeping source and build directories separate, as desired. I thought I could share it with newbies like me.

  1. Download LLVM source into /llvm-src and build it into /llvm-build directories.

  2. Write a new pass and Makefile as mentioned in LLVM doc ‘Writing a new pass’. Assume it is created in /llvm-src/lib/Transforms/NewPass directory.

  3. Modify the Makefile in /llvm-src/lib/Transforms directory by adding NewPass under PARALLEL_DIRS.

  4. make in /llvm-build directory.

  5. Thats it. If things go fine, newpass.so will be created in /llvm-build/Debug+Asserts/lib directory.

  6. The new pass can be loaded by modifying the command mentioned in the LLVM doc (for Writing a new pass) as

opt -load /llvm-build/Debug+Asserts/lib/newpass.so -newpass < hello.bc > /dev/null

Hope this helps.

A long ago I’ve added support for developing passes outside source dir for CMake build system. There should be documentation on this.

thank you for the info.


Thanks Rekha, I stumbled upon exactly the same problem, your post saved my time.