I’ve talked about the LLVM Compiler Infrastructure in the past, but what I haven’t talked about yet is just how easy and quickly you can build it on your own Mac running Leopard! This is a great way to get into hacking on compiler lexical analyzers and parsers, code generators, optimizers, and so on.
What’s more, you can build both LLVM and the new C front-end clang
very easily and in five to ten minutes.
First, create a work area to check them out into, wherever you normally create your projects.
[~]% cd /Projects [/Projects]% mkdir LLVM [/Projects]% cd LLVM [/Projects/LLVM]%
Then check out LLVM itself and clang
from the LLVM Subversion repository.
[/Projects/LLVM]% svn checkout http://llvm.org/svn/llvm-project/llvm/trunk llvm [/Projects/LLVM]% cd llvm/tools [/Projects/LLVM/llvm/tools]% svn checkout http://llvm.org/svn/llvm-project/cfe/trunk clang [/Projects/LLVM/llvm/tools]% cd ../.. [/Projects/LLVM]%
Then edit the PARALLEL_DIRS
definition in llvm/tools/Makefile
to tell it about clang
. Just add clang
onto the end, like this:
PARALLEL_DIRS := llvm-config \ opt llvm-as llvm-dis \ llc llvm-ranlib llvm-ar llvm-nm \ llvm-ld llvm-prof llvm-link \ lli gccas gccld llvm-extract llvm-db \ bugpoint llvm-bcanalyzer llvm-stub llvmc2 \ clang
Now create a directory to build into, next to your llvm
directory, and change into it.
[/Projects/LLVM]% mkdir build [/Projects/LLVM]% cd build [/Projects/LLVM/build]%
This is where you’ll actually run configure
. This will ensure your source tree isn’t polluted with build products, and that everything stays self-contained while you hack.
[/Projects/LLVM/build]% ../llvm/configure --enable-targets=host-only # lots of logging [/Projects/LLVM/build]%
You’ll note that above I passed an argument to configure
. This ensures that LLVM is only built to target the architecture I’m running on, to speed up the build process; this is generally fine for simple front-end development.
Now, to build LLVM as well as clang
all I have to do is invoke make
. LLVM is set up to correctly do parallel builds, so I’ll pass the number of CPUs I have in my machine via make -j 4
.
[/Projects/LLVM/build]% make -j 4 # lots of logging [/Projects/LLVM/build]%
That’s it! LLVM is now (hopefully) successfully built. All of the pieces are in the build
directory under Debug/bin
and Debug/lib
and so on; see the LLVM web site for details about what the various components are.
December 29, 2012
I see you moved your blog. I just commented on the old one, but wasn’t sure you still got those notifications. Here’s my comment again (sorry for the dupe):
Hey, Chris, awesome build instructions. Can they be easily modified to build clang/LLVM with the clang installed by Xcode 4.5? Can it use -stdlib=libc++ instead of -stdlib=libstdc++ as well (otherwise default linking in Xcode to LLVM libs has issues).
Thanks!
December 29, 2012
I may have answered my own question:
CXX=clang++ CC=clang ../release_32/configure –prefix=/usr/local/llvm –enable-libcpp –enable-cxx11 –enable-optimized
I’ll find out tomorrow if it works.