Best low (no?) prerequisite user-directory install method for Clang/libc++?

Hello,

What is the best method for installing Clang (and the corresponding libc++) to a user’s home directory on a *nix-like OS, with the minimal assumptions about the state of the rest of the operating system and what’s already installed?

I ask because we want to incorporate C++11 features into our codebase, but our users often don’t have administrative control over the systems they use. These systems may be computational clusters which were built several years ago and haven’t had major updates since, so the default compilers on these systems are often old (e.g. gcc 4.4 or even 4.1). Getting the administrators to install an updated compiler may or may not be feasible. So as a backup, I’m looking into the possibility of having our users (who may have very limited *nix experience) install an updated compiler in their home directory. (Again, on a machine where they don’t have administrator access.)

Is there an easy way to install Clang in a user directory when the system version of the compiler tool-chain may be very out of date? I noticed the pre-built binaries on http://llvm.org/releases/download.html, but there’s not much instruction on how to use these, and I’m a little unclear how “self-contained” these are and if they include the libc++ library. (Updating the compiler to support C++11 is only minimally helpful if the standard library used has no C++11 support.)

If possible, I’d like to avoid complex installation procedures, like a recent experience I had installing Clang 3.7 on Ubuntu 12.04, where in order to compile Clang from source, it turned out I needed to download and compile a recent gcc from source first.

At this point we’re just looking for C++11 compiler and standard library support, so the ability to install even a slightly older version of clang/libc++ (anything since 3.3, as I read things) should help.

Thanks,

-Rocco

P.S. I apologize if this is the wrong mailing list for this - http://clang.llvm.org/get_involved.html indicated this is the list for general Clang-related questions.

Assuming you use cmake, you can/should use the -DCMAKE_INSTALL_PREFIX=someplace-you-want-to-install. I use this for my debug builds of clang + llvm, and it works just as you’d expect (I happened to pick a /usr/local/llvm-debug directory, so I still need sudo make install to install it, but it will work similarly using “…/blah”, from the build directory). I’m reasonably sure you need to build your own version of clang to install in “non-standard location”.

Of course, if you have an older version of gcc than 4.7 (or clang 3.5-ish), you’ll need to do something about that FIRST. You can specify what compiler to build llvm and clang with using the CC=... and CXX=... enviornment variables before running cmake. Unfortunately, I don’t think you can avoid installing a more moden gcc or clang version before compiling the current clang sources, and perhaps also install new C++ library components - whether that means building your own or simply installing it from some arbitrary “ready to use” place depends largely on your choice of OS distribution and what that distribution has available in form of “later versions”. Since version 3.5(ish), Clang requires a compiler that is C++11 capable (we had exactly this problem where I work some time back).

It may be a decent idea to install on a single user’s account, and just let everyone else use ~jsmith/llvm/bin in their path, rather than distributing the compiler into lots of people’s home directories.

Sorry, I don’t have a “simple recipe”.

It does look like the prebuilt binary (at least for Fedora 22) has a libc++ as part of the binary.

It does look like the prebuilt binary (at least for Fedora 22) has a
libc++ as part of the binary.

--
Mats

In prebuilt binary for Fedora , root accessible directories used , but you
can extract it into a user directory , and by using environment variables ,
you may use its binaries to compile your LLVM sources .

I think , you can do the same thing in other BSD/Linux operating systems
also ( if it does not reject to expand tar ball due to in accessible
directory use ) .
I could expand it in Fedora into a user directory .

Another step may be to use an independent computer to download and compile
LLVM sources , and copy obtained binaries to a CD/DVD/USB stick and give it
to the your workers to copy it into their own directories .

It is not necessary for everyone to download and compile LLVM one by one .

Only operating system kinds are sufficient to compile LLVM .

Mehmet Erol Sanliturk

I’m working on a project to solve the exactly same problem. It’s still incomplete though. When it’s completed users could install clang to anywhere they like with a few simple steps like:

  • download source code

  • edit a configuration file

  • fire make -j64

  • enjoy dinner

  • enjoy C++ developing with clang

Currently the project could build and install gcc-5.2, building clang-3.7 is partially completed. It’s hosted at https://gitlab.com/torshie/modern-tool