Frank Winter
2015-Jun-23 19:32 UTC
[LLVMdev] Build problems with custom pass living in its own directory (under Transforms)
I am having trouble integrating my custom pass into the build system such that it gets build along with the rest of the components and it's usable from code that links to LLVM. My pass lives here: ls -l lib/Transforms/qdp_jit/ LLVMBuild.txt Makefile qdp_jit.exports qdp_jit_roll.cpp Makefile: ---- LEVEL = ../../.. LIBRARYNAME = qdp_jit LOADABLE_MODULE = 1 USEDLIBS # If we don't need RTTI or EH, there's no reason to export anything # from the hello plugin. ifneq ($(REQUIRES_RTTI), 1) ifneq ($(REQUIRES_EH), 1) EXPORTED_SYMBOL_FILE = $(PROJ_SRC_DIR)/qdp_jit.exports endif endif include $(LEVEL)/Makefile.common qdp_jit.exports is an empty file LLVMBuild.txt ---- [component_0] type = Library name = qdp_jit parent = Transforms library_name = qdp_jit required_libraries = Analysis Core Support Target TransformUtils cat lib/Transforms/LLVMBuild.txt [common] subdirectories = IPO InstCombine Instrumentation Scalar Utils Vectorize ObjCARC qdp_jit ... cat lib/Transforms/Makefile PARALLEL_DIRS = Utils Instrumentation Scalar InstCombine IPO Vectorize Hello ObjCARC qdp_jit For simplicity I added the pass declaration to the already existent Transforms/Scalars.h // FunctionPass *create_qdp_jit_roll_pass(); cat LinkAllPasses.h ... (void) llvm::createSeparateConstOffsetFromGEPPass(); (void) llvm::createRewriteSymbolsPass(); (void) llvm::create_qdp_jit_roll_pass();/// <--- ... When building LLVM I keep getting: llvm[2]: Linking Debug+Asserts executable opt /home/fwinter/toolchain/build/llvm-3.6/tools/opt/Debug+Asserts/opt.o: In function `ForcePassLinking': /home/fwinter/svn/llvm-3.6/include/llvm/LinkAllPasses.h:169: undefined reference to `llvm::create_qdp_jit_roll_pass()' I then tried adding the library to opt's makefile (and LLVMBuild.txt) a la LINK_COMPONENTS := bitreader bitwriter asmparser irreader instrumentation scalaropts objcarcopts ipo vectorize all-targets codegen qdp_jit Same thing. I remember this has happened to me in the past, my workaround was to put the pass into a pre-existing directory (say Transforms/Scalar). But this time I like it to reside in its own space. Any ideas? Frank