On Mar 10, 2006, at 2:57 PM, Martin Pärtel wrote:> I'm currently using the "make install"-ed version of LLVM in an > autoconf/automake project. Setting it up wasn't that bad really. > The .a > libraries can be statically linked with the -l flag and .o > libraries are > simply linked in as normal object files (without -l). All the > libraries got > installed to $(prefix)/lib and all headers went into $(prefix)/ > include/llvm, > just like with any other library. Also, -D__STDC_LIMIT_MACROS had > to be added > to the compiler options for some header to work correctly but that > was pretty > much it.Thanks for your advice! I did get everything working (eventually) by pasting the following code into the Makefile for HowToUseJIT: .PHONY: dump-config dump-config: @echo Compile: $(Compile.CXX) @echo Link: $(Link) @echo Libs: $(LLVMUsedLibs) ...and using the result. But this is still pretty fragile, and needs be done once for every supported platform. Gnome (and many other Unix projects with massively ugly dependencies) can be linked trivially using a "foo-config" script. If LLVM had something similar, it might save new LLVM developers several hours of digging through manuals and Makefiles. A llvm-config script would be absolutely trivial to generate from the current Makefiles, and--if people think it would be a Good Thing--I'm volunteering to do all the legwork. :-)> I asked a similar question here about a month ago and Chris answered: > "make install is lightly tested, but should work. Please report any > problems you find."Yup, the installed headers and libraries seem sufficient so far. Linking is slow, but that's to be expected for such a big C++ project.> Personally, I've found LLVM to be a pleasure to work with. Its > design is very > powerful, which simplifies many things a lot.Oh, you don't have to convince me of that! LLVM's design is so elegant (compared to some compiler backends I've seen) that it really ought to have theme music or something. :-) Cheers, Eric
Hi, sorry for the delay, I've been swamped lately :-/ On Fri, 10 Mar 2006, Eric Kidd wrote:> Thanks for your advice! I did get everything working (eventually) by pasting > the following code into the Makefile for HowToUseJIT: > > .PHONY: dump-config > dump-config: > @echo Compile: $(Compile.CXX) > @echo Link: $(Link) > @echo Libs: $(LLVMUsedLibs) > > ...and using the result. But this is still pretty fragile, and needs be done > once for every supported platform.Ok. This is a reasonable way to do it. FWIW, I have a similar problem in the new llvm-gcc, which links to LLVM optimizations and native targets. The makefile goop I have looks like this: ifneq ($(LLVMBASEPATH),) ifdef CHECKING_ENABLED BUILDMODE=Debug else BUILDMODE=Release endif LLVMLIBPATH = $(LLVMBASEPATH)/$(BUILDMODE)/lib # Pick the right LLVM backend based on the target triple. LLVMTARGETOBJCMD := case $(target) in \ alpha-*-*) echo LLVMAlpha.o;; \ ia64-*-*) echo LLVMIA64.o;; \ i[34567]86-*-*) echo LLVMX86.o;; \ powerpc*-*-*) echo LLVMPowerPC.o;; \ sparc-*-*) echo LLVMSparc.o;; \ sparcv9-*-*) echo LLVMSparc.o;; \ esac LLVMTARGETOBJ := $(shell $(LLVMTARGETOBJCMD)) ifeq ($(LLVMTARGETOBJ),) $(error Unsuported LLVM Target $(target)) endif LLVMLIBS = -L$(LLVMLIBPATH) $(LLVMLIBPATH)/$(LLVMTARGETOBJ) -lLLVMScalarOpts \ -lLLVMTransformUtils -lLLVMAnalysis \ $(LLVMLIBPATH)/LLVMSelectionDAG.o $(LLVMLIBPATH)/LLVMCodeGen.o \ -lLLVMTarget $(LLVMLIBPATH)/LLVMBCWriter.o \ $(LLVMLIBPATH)/LLVMbzip2.o \ $(LLVMLIBPATH)/LLVMCore.o -lLLVMSupport -lLLVMSystem uhm... *yuck*.> Gnome (and many other Unix projects with massively ugly dependencies) can be > linked trivially using a "foo-config" script. If LLVM had something similar, > it might save new LLVM developers several hours of digging through manuals > and Makefiles.This would be very very cool to have.> A llvm-config script would be absolutely trivial to generate from the current > Makefiles, and--if people think it would be a Good Thing--I'm volunteering to > do all the legwork. :-)Please! That would be a very welcome addition!>> I asked a similar question here about a month ago and Chris answered: >> "make install is lightly tested, but should work. Please report any >> problems you find." > > Yup, the installed headers and libraries seem sufficient so far. Linking is > slow, but that's to be expected for such a big C++ project.For what it's worth, linking is significantly faster for a release build than a debug build. Also, if you're on linux, updating to a new binutils can help things significantly.>> Personally, I've found LLVM to be a pleasure to work with. Its design >> is very powerful, which simplifies many things a lot. > > Oh, you don't have to convince me of that! LLVM's design is so elegant > (compared to some compiler backends I've seen) that it really ought to have > theme music or something. :-):) -Chris -- http://nondot.org/sabre/ http://llvm.org/
On Mar 14, 2006, at 2:22 PM, Chris Lattner wrote:>> Gnome (and many other Unix projects with massively ugly >> dependencies) can be linked trivially using a "foo-config" script. >> If LLVM had something similar, it might save new LLVM developers >> several hours of digging through manuals and Makefiles. > > This would be very very cool to have.OK! Would something like the following interface be a reasonable first approach? llvm-config (--cxxflags | --ldflags | --libs) (all | jit) --cxxflags: Flags to use when compiling C++ source code. --ldflags: Linker flags to use when linking against LLVM. --libs: Libraries needed to link the current configuration. all: Link all LLVM libraries for the current platform. jit: Link the libraries needed by the standard JIT/interpreter configuration. This fits nicely into the autoconf/autoconf view of the world, and would only take an evening to get working. If llvm-gcc 4.0 requires a specific subset of libraries, we could add a third hard-coded configuration. Later on, we could consider adding fine-grained control over which libraries get linked, perhaps based on output from GenLibDeps.pl. But that would require making GenLibDeps.pl more portable (it currently uses some non-portable nm flags). In any case, I'm mostly focused on making things easy for first-time LLVM users.> For what it's worth, linking is significantly faster for a release > build than a debug build. Also, if you're on linux, updating to a > new binutils can help things significantly.Thanks for the tips! I've been writing a (very primitive) llvm-grep program as a warmup exercise, and I was able to JIT good code within a day of getting started. Many thanks for releasing such a cool project! Cheers, Eric