[LLVMdev] Building llvm from source with clang instead of gcc

Justin Holewinski justin.holewinski at gmail.com
Sun Jan 6 06:47:07 PST 2013


On Sat, Jan 5, 2013 at 11:08 PM, Edward Diener <
eldlistmailingz at tropicsoft.com> wrote:

> On 1/5/2013 8:01 PM, Justin Holewinski wrote:
>
>>
>> On Sat, Jan 5, 2013 at 5:59 PM, Edward Diener
>> <eldlistmailingz at tropicsoft.**com <eldlistmailingz at tropicsoft.com><mailto:
>> eldlistmailingz@**tropicsoft.com <eldlistmailingz at tropicsoft.com>>>
>>
>> wrote:
>>
>>     On 01/05/2013 01:11 PM, Dmitri Gribenko wrote:
>>
>>         On Sat, Jan 5, 2013 at 7:48 PM, Edward Diener
>>         <eldlistmailingz at tropicsoft.__**com
>>         <mailto:eldlistmailingz@**tropicsoft.com<eldlistmailingz at tropicsoft.com>>>
>>  wrote:
>>
>>
>>             I actually found out that llvm/configure will choose clang
>>             if it is
>>             found in the path. This contradicts what is written at
>>             http://llvm.org/docs/__**GettingStarted.html#__**requirements<http://llvm.org/docs/__GettingStarted.html#__requirements>
>>             <http://llvm.org/docs/**GettingStarted.html#**requirements<http://llvm.org/docs/GettingStarted.html#requirements>
>> >,
>>
>>             where it says it
>>             will use the first GCC it finds. Perhaps that explanation
>>             needs to be
>>             updated.
>>
>>
>>         Updated docs in r171630.
>>
>>             Finally I found that if llvm/configure uses clang instead of
>>             gcc, it
>>             invariably fails on my Linux distros because it is using the
>> gcc
>>             distributed included directories and an earlier version of
>>             clang will
>>             often fail with these gcc header files. Once I force
>>             llvm/configure to
>>             use gcc, building llvm/clang succeeds again.
>>
>>
>>         Right.  Maybe we need to skip old clang versions in this case.
>>
>>
>>     I think this should be done until clang can use its own header files
>>     and libraries, when it is installed as a binary, rather than the
>>     ones that gcc installs. In fact I am a bit amazed that clang does
>>     not already have its own header files and libraries for use when one
>>     tries llvm/configure and it sets up llvm's build system to use clang
>>     as its compiler. Is this the fault of clang or is it the fault of
>>     the llvm/configure system ?
>>
>>
>> There is no complete solution for LLVM-only headers/libraries yet on
>> Linux.  For C++, you can use libc++, but you still need some GCC
>> libraries (or alternatives).  And you will at least need glibc or
>> another compatible C runtime.
>>
>
> Should not what it is needed by clang to work correctly under Linux be
> posted somewhere on the clang Getting Started web page ? Even what you
> posted above requires guesswork on my part.
>

Clang will attempt to use your installed system libraries, usually
libstdc++ and glibc on a Linux distribution.  We could probably maintain a
libstdc++ compatibility table that says clang x.y is compatible with
libstdc++ up to z.w.  In the vast majority of cases, this just works if you
install a somewhat-newer version of clang.  The problems arise when you use
an older clang with a newer libstdc++ (e.g. newer gcc and/or linux
distribution).


>
> Am I supposed to install libc++ and glibc in a Linux distro for clang to
> work correctly ?
>

glibc will already be there.  libc++ is purely optional.  Clang will
happily use libstdc++ (which comes with your linux distribution), but newer
libstdc++ versions may use new GCC extensions that clang does not yet
support.  This is an unfortunate condition that arises from depending on
GNU libraries that assume GCC.  At this time, libc++ is not entirely
self-contained on Linux and still requires some GCC libraries for some
external functions.


> Which versions do I need ?
>

I'm guessing you are running into issues with the C++ standard library
headers.  In that case, it depends on which clang version you are using.
 For compatibility reasons, it is best to always use the latest released
clang (if not trunk).  If you try again with 3.2, I bet your problems go
away.


>
> How do I tell clang what to use or is this automatically figured out by
> clang ?
>

There are ways to override the location for the headers/libraries of
libstdc++, but I would not recommend this.  Upgrading to a newer clang
should be easier in the long run.


>
> Will llvm/configure use these libraries if I let it choose a clang binary
> in order to build the latest llvm/clang from source ?


Which libraries?  An older libstdc++?  You can use CXXFLAGS and LDFLAGS to
adjust the library search paths, just as you use CXX to set the compiler to
use.


Generally, it is recommended to bootstrap clang:

1. Build llvm/clang with system gcc
2. Build llvm/clang with new clang
3. Install new clang somewhere (which will automatically use system
libstdc++/glibc).

This should solve your problem.


>
>
>
>
> ______________________________**_________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>



-- 

Thanks,

Justin Holewinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130106/d60a4636/attachment.html>


More information about the llvm-dev mailing list