[LLVMdev] libLTO on linux

Nick Lewycky nicholas at mxc.ca
Sat Nov 29 21:17:59 PST 2008


I'm looking into the possibility of building the libLTO plugin on Linux, 
and got tangled up in the build system.

Currently, tools/Makefile only includes 'lto' when the OS equals Darwin, 
while tools/lto/Makefile has an if-statement that builds libLTO as a 
static library on non-Darwin systems.

If I try to build libLTO as a dynamic library on Linux, it works fine, 
but I get an enormous warning from libtool:
*** Warning: Linking the shared library 
/home/nicholas/llvm-commit/Debug/lib/libLTO.la against the non-libtool
*** objects  /home/nicholas/llvm-commit/Debug/lib/LLVMCppBackend.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMMSIL.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMCBackend.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMXCore.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMPIC16.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMCellSPUCodeGen.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMCellSPUAsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMMips.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMARMAsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMARMCodeGen.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMIA64.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMAlphaCodeGen.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMAlphaAsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMPowerPCAsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMPowerPCCodeGen.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMSparcCodeGen.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMSparcAsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMX86AsmPrinter.o 
/home/nicholas/llvm-commit/Debug/lib/LLVMX86CodeGen.o is not portable!

If we're going to build a .so file, we need those .o's to be built with 
-fPIC. As far as I can see, configuring LLVM with --enable-pic actually 
does that already, so perhaps we can make it the default.

But that warning isn't about PIC, it's about the fact that the .o's 
weren't compiled with libtool. It's looking for the matching .lo files.

It's not clear to me what we ought to do here. Put 'lto' inside an if 
ENABLE_PIC and suppress the warning? Build everything in LLVM with 
libtool --mode=compile? Is there a simple way to limit that to just the 
.o files we end up installing?

Nick



More information about the llvm-dev mailing list