Hi Dan, Thank you for you response. As you suspect, I am struggling with the building of LLVM/Clang. I thought building LLVM/Clang was required in order to build the tutorial and eventually modify for testing/learning. From what you are saying, it sounds like I am mistaken? In reference to what you mentioned about installing/building and —prefix and my misuse of my build directory: I am following instruction from the getting started page: http://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary Here are exactly the steps I follow to download/build LLVM/Clang: 1. #llvm cd /Users/josephmorgan svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm 2. #clang cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang 3. #compiler rt cd llvm/projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt 4. #Change Directory to build but not sure why I’m doing this (Make is building everything in here) cd /Users/josephmorgan/build 5. #configure (I am still not clear on what is purpose of prefix here) /Users/josephmorgan/llvm/configure --prefix=/Users/josephmorgan/build --enable-targets=x86,x86_64 6. #make/build make Attempts to build the following: clang++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy Yields the following errors: llvm-config: command not found toy.cpp:1:10: fatal error: 'llvm/Analysis/Verifier.h' file not found Thank you for any advice you can offer. Joseph On Jun 11, 2014, at 4:58 PM, Dan Liew <dan at su-root.co.uk> wrote:> Hi Joseph, > > It's not entirely clear from your e-mail which part you are struggling > with. You say you're having problems building the Kaleidoscope > tutorial but your steps look like you're struggling building > LLVM/Clang. > > On 11 June 2014 20:44, Joseph Morgan <its.jojo.77 at gmail.com> wrote: >> I’m new to llvm so I’m hoping someone can shed some light on this. I am >> trying to use the Kaleidoscope tutorial and cannot get past the 3rd part. >> All the llvm includes are not in their expected places. Eg… >> “llvm/IR/Verifier.h” is actually in “llvm/include/llvm/IR”. I am running mac >> osx 10.9. > > Are you trying to build this [1]? I.e. When you do > > ``` > $ clang++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy > ``` > > If so you should make sure that the llvm-config command being executed > here is the one you built (assuming that's what you want) rather than > you system's one. Take a look at what llvm-config actually outputs. > E.g. on my system I get > > ``` > $ llvm-config --cppflags --ldflags --libs core > -I/home/dan/dev/llvm/src/include -I/home/dan/dev/llvm/bin/include > -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS > -D__STDC_LIMIT_MACROS > -L/home/dan/dev/llvm/bin/lib > -lLLVMCore -lLLVMSupport > ``` > > What you've described below sounds like you're struggling to build > LLVM/Clang which is not what you said you were trying to do earlier > (build the Kaleidoscope tutorial). Please clarify. > > Assuming this is an attempt to build LLVM/Clang I can see a few mistakes here. > >> Here’s what I’ve tried: >> 1. checkout the svn of llvm, clang & compiler rt >> 2. created a “build” directory & cd build >> 3. …/llvm/configure --prefix=/HomeDir/build --enable-targets=x86,x86_64 > > I assume you mean ``..`` not ``...`` > > --prefix= is used to instruct the build system where to install > LLVM/Clang. I might be misreading this because you have not said where > you created the ``build`` directory but it looks like you've set > --prefix to where you are building LLVM. I highly recommend you do not > do that (it will make a mess if you ever run ``make install``). In > your case if you are trying to build the Kaleidoscope tutorial you > shouldn't even need to install LLVM/Clang. > >> 4. make -I/HomeDir/llvm/include <—- I thought this would fix my problem but > > I can see what you're trying to do but that's not how you pass flags > to the C++ compiler for LLVM's build system (or for any other make > file based build system for that matter). > > It would be > > $ make CXXFLAGS=" -I/HomeDir/llvm/include" > > Even this not quite right because it will overwrite CXXFLAGS and does > not append so it is likely this will break the build in some way. So I > don't recommend doing this. >It sounds like I was going in the wrong direction with CXXFLAGS in this case and it’s not needed.> > [1] http://llvm.org/docs/tutorial/LangImpl3.html#full-code-listing > > -- > Dan Liew > PhD Student - Imperial College London-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140611/0c72c972/attachment.html>
On 12 June 2014 00:01, Joseph <its.jojo.77 at gmail.com> wrote:> Hi Dan, > > Thank you for you response. As you suspect, I am struggling with the > building of LLVM/Clang. > > I thought building LLVM/Clang was required in order to build the tutorial > and eventually modify for testing/learning. From what you are saying, it > sounds like I am mistaken?Well on many Linux distributions LLVM and Clang are installable as packages (along with the header files) so for something like the Kaleidoscope tutorial it isn't necessary to build LLVM and Clang from source. However you are running OSX which I'm not familiar with so I don't know what the situation is there. I know clang is now the default compiler but I don't know if LLVM header files and libraries are shipped with OSX or can be installed as the OSX equivalent of a package. So I can only really guide you on building LLVM and Clang from source. Looking at the Kaleidoscope I didn't see anything that was actually clang specific, for example this... ``` clang++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy ```` is building native code so you can use whatever C++ compiler you like (you could even use gcc for example if you liked). So for the Kaleidoscope tutorial I don't think it's necessary for you to build clang (and consequently there's no reason to build compiler-rt either).> 4. #Change Directory to build but not sure why I’m doing this (Make is > building everything in here) > cd /Users/josephmorgan/buildYou are doing what is called an "out of source build". This is where all the generated binary files and some build system files go in a different directory to the source code directory. This is the opposite of an "in source build" where binary files and some build system files go in the same directory as the source code directory. The advantage of doing an "out of source build" is that - you can have multiple build configurations all building from the same source directory - Prevents you from accidently committing files generated by the build system - Deleting build files is really easy, you just delete the build directory ( /Users/josephmorgan/build ) I would stick with doing out of source builds, so this is fine.> 5. #configure (I am still not clear on what is purpose of prefix here) > /Users/josephmorgan/llvm/configure --prefix=/Users/josephmorgan/build > --enable-targets=x86,x86_64If you read [1] you'll see that ``--prefix=`` is optional and that it sets the install location. I think you are confused between "building" and "installing". Building (i.e. running ``make``) builds the binaries in the build directory (e.g. You'll probably find the built binaries in /Users/josephmorgan/build/Release+Asserts/bin/). This does not install the binaries. By running ``make install`` this will install LLVM Binaries to <prefix>/bin LLVM Libraries to <prefix>/lib LLVM header files to <prefix>/include where <prefix> is what was specified using ``--prefix=`` (or the default /usr/local if it was not specified). Telling configure to build and install LLVM in the same directory like you did does not make any sense so if you're still confused just don't specify the ``--prefix=`` flag. For the kaleidoscope tutorial it is actually not necessary to install LLVM, you can use it directly from your build directory (``/Users/josephmorgan/build``). Once you've successfully built LLVM you can then build the Kaleidoscope example by doing something like ``` clang++ -g -O3 toy.cpp `/Users/josephmorgan/build/Release+Assert/bin/llvm-config --cppflags --ldflags --libs core` -o toy ``` You should replace "Release+Asserts" with the build configuration you used (just look in the build directory, the folder might be called "Release" or "Debug" or "Debug+Asserts" instead). To make life easier you could add the path to the built LLVM binaries to your PATH $ PATH=/Users/josephmorgan/build/Release+Assert/bin:$PATH then you can just use llvm-config and the other tools directly without specifying the full path to the tools each time. [1] http://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary -- Dan Liew PhD Student - Imperial College London
Hi Dan, Thank you for your advice on the build/install. On Jun 11, 2014, at 7:06 PM, Dan Liew <dan at su-root.co.uk> wrote:> Well on many Linux distributions LLVM and Clang are installable as > packages (along with the header files) so for something like the > Kaleidoscope tutorial it isn't necessary to build LLVM and Clang from > source. However you are running OSX which I'm not familiar with so I > don't know what the situation is there. I know clang is now the > default compiler but I don't know if LLVM header files and libraries > are shipped with OSX or can be installed as the OSX equivalent of a > package.It doesn’t appear to be installed on mac osx by default (it’s not on either of my two machines).> You are doing what is called an "out of source build". This is where > all the generated binary files and some build system files go in a > different directory to the source code directory. This is the opposite > of an "in source build" where binary files and some build system files > go in the same directory as the source code directory. The advantage > of doing an "out of source build" is that > > - you can have multiple build configurations all building from the > same source directory > - Prevents you from accidently committing files generated by the build system > - Deleting build files is really easy, you just delete the build > directory ( /Users/josephmorgan/build ) > > I would stick with doing out of source builds, so this is fine.This makes sense to me now. :)>> 5. #configure (I am still not clear on what is purpose of prefix here) >> /Users/josephmorgan/llvm/configure --prefix=/Users/josephmorgan/build >> --enable-targets=x86,x86_64 > > If you read [1] you'll see that ``--prefix=`` is optional and that it > sets the install location. I think you are confused between "building" > and "installing". Building (i.e. running ``make``) builds the binaries > in the build directory (e.g. You'll probably find the built binaries > in /Users/josephmorgan/build/Release+Asserts/bin/). This does not > install the binaries. By running ``make install`` this will install > > LLVM Binaries to <prefix>/bin > LLVM Libraries to <prefix>/lib > LLVM header files to <prefix>/include > > where <prefix> is what was specified using ``--prefix=`` (or the > default /usr/local if it was not specified). Telling configure to > build and install LLVM in the same directory like you did does not > make any sense so if you're still confused just don't specify the > ``--prefix=`` flag.I am now leaving out the ``--prefix=`` flag when I make install it was able to find the includes as expected.> For the kaleidoscope tutorial it is actually not necessary to install > LLVM, you can use it directly from your build directory > (``/Users/josephmorgan/build``). > > Once you've successfully built LLVM you can then build the > Kaleidoscope example by doing something like > > ``` > clang++ -g -O3 toy.cpp > `/Users/josephmorgan/build/Release+Assert/bin/llvm-config --cppflags > --ldflags --libs core` -o toyI also tried this before doing a make install and it was able to find the includes as expected. Not having it originally installed in usr/local was really what caused my confusion. Installing in the build folder as you suggested in an earlier email was the culprit for me. Had I not specified "—prefix=“ flag all the includes would have been located automatically. I didn’t know that I needed to specify where the binary was for llvm-config. So I understand now. So now that the includes are being found building the tutorial results in 74 warnings and 20 errors. Heres a couple examples: In file included from /usr/local/include/llvm/IR/DerivedTypes.h:21: In file included from /usr/local/include/llvm/IR/Type.h:19: In file included from /usr/local/include/llvm/ADT/APFloat.h:20: In file included from /usr/local/include/llvm/ADT/APInt.h:19: In file included from /usr/local/include/llvm/ADT/ArrayRef.h:14: /usr/local/include/llvm/ADT/SmallVector.h:232:20: warning: rvalue references are a C++11 extension [-Wc++11-extensions] void push_back(T &&Elt) { ^ /usr/local/include/llvm/ADT/SmallVector.h:476:33: warning: rvalue references are a C++11 extension [-Wc++11-extensions] iterator insert(iterator I, T &&Elt) { In file included from toy.cpp:3: In file included from /usr/local/include/llvm/IR/IRBuilder.h:24: In file included from /usr/local/include/llvm/IR/Instructions.h:22: In file included from /usr/local/include/llvm/IR/Attributes.h:20: In file included from /usr/local/include/llvm/ADT/FoldingSet.h:21: /usr/local/include/llvm/Support/Allocator.h:134:70: error: expected expression BumpPtrAllocatorImpl<AllocatorT, SlabSize, SizeThreshold>> { ^ /usr/local/include/llvm/Support/Allocator.h:346:2: error: expected a type }; Do you know what would cause these errors? Thank you! Joseph